首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图片文字识别(2)

图片文字识别(2)

作者头像
创译科技
发布2019-07-01 16:54:58
42.2K0
发布2019-07-01 16:54:58
举报
文章被收录于专栏:Node开发Node开发

上一篇文章封装了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识别我们需要的功能。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿周先森 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文字识别
文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档