图片文字识别(2)

上一篇文章封装了request库用来发起http请求,然后获取了用户操作凭证access_token。上篇文章主要对百度AI文字识别接口最基础的通用文字以及手写文字图片进行了接入识别,本篇文章我们来接着看几个实用性比较强的文字识别接口。百度AI接口对接挺容易的,签名加密都没有涉及到。唯一的缺点就是接口文档写的不够完善,容易遇见坑。上篇文章只介绍了第一个实用性接口:身份证识别接口,我们当时只以正面照做了示例,该接口不支持图片url,而是需要将图片数据以BASE64编码。我们直接贴关键代码:

可能细心的读者会发现我代码好像变了!和上篇文章的代码改动非常大,我们先看看上节课对图片BASE64编码实现代码:

var image = fs.readFileSync('./../public/images/begin.jpg').toString('base64');

可以发现我上篇文章实际上是将图片放在项目public静态文件夹下,然后使用NodeJS异步读取文件去读取图片数据,然后进行BASE64编码。但是在实际开发中这个逻辑是非常不合理的!不合理在哪呢?主要有以下两点:

只能识别项目本地照片,往往不符合需求
如果项目本地存放过多照片,可能会大大降低效率

所以可以看到我对接口做了适当的修改,前端通过传参图片url,然后通过http.get()去不断缓冲图片数据,然后将数据转化为一个Buffer对象,最后再进行BASE64编码。

我们可以看下修改过后的接口效果:

(图片来源于百度,假数据)

可以看到我们传入图片url,最后可以转化为BASE64编码再调用接口可以成功解析到用户身份证文字信息。但是这样操作优缺点在哪呢:

优点:相对于读取本地照片,用户可以传入指定图片的url进行缓冲数据再进
      行编码为BASE64,可以达到文字识别用户想要上传的图片。
      
缺点:用户如果想要文字识别手机电脑本地的照片就会特别麻烦,需要先将照
      片上传到服务器,(比如七牛图片服务器),然后再将图片url传入接口去
      进行解析,大大降低了用户体验。

所以这样的方案其实也是不合理的,那怎样去修改方案才会更合理呢?其实我觉得有两种方案可以进行选择:

1.如果图片只需要解析不需要进行保存,前端提供用户选择本地图片操作,
  直接编码为BASE64,然后直接将BASE64编码传递给后端,后端直接调用
  接口解析图片文字信息。

2.如果图片需要进行保存,可以前端将图片转化为binary格式,后端先将图
  片上传到服务器或者直接传到对象存储oss,然后获得图片路径,使用现
  在的方法加载缓冲数据,进行BASE64编码最后调用接口解析图片文字信息。

这部分我没有去继续优化了,有兴趣的可以结合我之前上传图片的文章:Node上传文件(1) 去继续进行优化接口。

那么我们讲解完现在接口实现的具体思路,我们可以着手来实现几个实用性接口看下效果。首先我们先来看看第一个实用性接口:银行卡照片识别。

银行卡照片识别

这个接口的用处看接口名就可以知道了:识别银行卡并返回卡号、有效期、发卡行和卡片类型。首先我们先看看文档对于接口的具体说明:

这个接口请求参数很简单明了,携带access_token进行鉴权,image为图片缓冲数据的BASE64编码。接下来贴下关键代码:

我们可以测试下传入银行卡照片是否能解析出银行卡的有效信息:

可以看到传入url可以成功解析出银行卡照片上面所携带的基本信息。我们直接贴下返回参数文档说明:

营业执照识别

顾名思义这个接口就是识别营业执照的照片:可以识别营业执照,并返回关键字段的值,包括单位名称、类型、法人、地址、有效期、证件编号、社会信用代码等。首先一样直接贴下文档请求参数的说明:

必传参数一样固定有access_token以及image。有两个选传参数可以视情况进行传参。接下来贴下关键代码:

我直接百度找一个营业执照链接进行测试接口效果:

可以看到营业信息成功解析了,返回信息过多所以我就没有全部进行截图。我贴下返回参数文档说明:

护照识别

支持对中国大陆居民护照的资料页进行结构化识别,包含国家码、姓名、姓名拼音、性别、护照号、出生日期、出生地点、签发日期、有效期至、签发地点。先贴下请求参数文档说明:

请求参数也很简洁,只需要携带access_token鉴权,以及图片进行BASE64编码后的image参数。我们贴下关键代码:

我们直接测试一下接口效果:

直接贴上返回参数文档说明,可以自行去理解参数含义:

表格文字识别(内含两个接口)

自动识别表格线及表格内容,结构化输出表头、表尾及每个单元格的文字内容。 本接口为异步接口,分为两个API提交请求接口、获取结果接口。下面分别描述两个接口的使用方法。

提交请求接口

直接贴下请求参数文档说明:

本接口一样还是两个必须参数:access_token以及image。我们贴下关键代码:

我们可以看下请求接口关于返回参数的文档说明:

也就是说请求结果传入image,会返回一个request_id,然后我们可以在下一个结果通过传入request_id来获取解析结果。现在我们先看看接口效果:

可以看到我们成功获取到request_id。接下来我们看看第二个接口获取表格解析结果。首先先贴下请求参数说明:

通过上一步取到的request_id以及access_token可以获取解析结果。返回结果我们通过传参result_type指定返回结果的类型为excel或者json格式。接下来直接在第一步的代码进行改进增加第二步操作:

我们在第一次调用

PostHelper.baseRequestBase(url, param, function(err, data))

发起请求返回request_id,然后携带request_id再次发起请求获取解析表格结果。我们可以看下结果返回结果:

可以看到表格图片中的数据成功被解析出来了。当然我们选择将第二次请求携带的参数result_type改成excel,接口就会将表格图片中的数据解析成一个excel表格并返回链接。我们可以测试下效果:

可以看到接口返回excel表格的下载链接。这样有一个好处就是比如我们数据库设计表截个数据表的图,扔进接口里面就可以自动生成一个表格链接供我们进行下载,省却了我们制作数据表的时间和精力。

相对比较实用的接口且免费的接口基本有以上几个,其实百度AI提供了一系列接口。但是我这里就不准备一一介绍了,有兴趣可以自行查看百度AI文字识别文档:

https://ai.baidu.com/docs#/OCR-API/87932804

其实业务开发过程如果适当的引入人脸识别,文字识别等AI接口确实可以很大程度提升用户的体验,更大程度的留住潜在的客户。而且百度AI还提供了一系列需要申请权限的接口,很大成都方便了我们的开发,我们不必去追究底层是如何识别图片中的文字的,就可以快速接入API识别我们需要的功能。

原文发布于微信公众号 - 周先生自留地(zhanyue_org)

原文发表时间:2019-06-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券