图片文字识别实现(1)

2019-06-20 13:50:50 浏览数 (1)

上次使用百度AI接口开发过人脸识别接口,今天腾出时间所以去看了看文字识别的技术接口文档。文字识别一样有SDK可以接入快速开发,但是我不准备使用SDK接入,本篇文章直接使用API文档接入文字识别API。上篇文章对Express框架进行了简单封装,我们可以在上篇文章的项目基础上继续进行。如果想从零开始搭建项目可以看下上一篇文章:jsonwebtoken生成与解析token

我们可以看看现在项目的结构:

我们先来看看各个文件夹的效果:

代码语言:javascript复制
dao:数据库层业务逻辑
db:封装mysql的一些基本方法,如初始化、更新
doc:ApiDoc自动根据接口注释生成接口文档
node_module:引入的第三方包
public:存放静态资源
router:接口路由层,存放业务逻辑
util:封装一些常用公共方法,如签名加密

本篇文章主要对几个不需要申请权限的接口进行测试,我们来看下文字识别都有什么类型的接口:

首先调用API我们需要携带参数access_token参数。所以接下来我们需要先获取access_token。我们看下文档对于access_token的要求:

文档写的很清晰,我们不多废话,直接代码来实现获取access_token。首先我们将client_idclient_secret配置在config.js中:

util文件夹下建立postHelper.js文件,用来封装http请求。首先获取access_token需要,我们先封装一个Content-Type为application/x-www-form-urlencodedPOST请求方法:

接下来实现一个接口,获取access_token。上一篇详细讲解了一个接口的设计方法。所以获取access_token接口的具体流程为:

代码语言:javascript复制
将所有必须参数去掉sign参数按照制定规则加密生成签名sign.
发起post请求,获取access_token.

接下来我们代码实现下,我们将加密签名等业务逻辑放在路由层实现:

然后将调用post请求请求access_token接口获取access_token操作放在dao层执行。

这边由于我们发起请求使用了request库,所以我们需要先安装一下依赖,命令为:

代码语言:javascript复制
npm install request --save-dev

然后我们来看下接口运行效果:

可以看到access_token已经成功获取到。因为access_token是有过期时间的,所以可以选择过期了再次获取新的access_token或者每次请求API之前先获取新的access_token。接下来我们看下第一个接口:通用文字识别。

通用文字识别接口

先贴下文档接口说明:

本接口需要用到的请求参数也顺便贴出来:

接口其实很简单,上传图片解析文字。图片格式可以BASE64格式或者url。我这里使用URL进行测试,接下来实现业务逻辑代码:

这个接口有两个地方需要格外注意:

代码语言:javascript复制
如果image参数存在,则url参数无法生效
url不支持https,也就是https协议的图片url无法进行解析

我们可以看下接口相应效果:

顺便贴下返回参数的说明,可以对着字段理解返回值的含义:

可以看到图片识别文字解析到了两句话,当然这个接口可以选传参数,我们可以再看下请求参数说明可以选择识别语言类型,检测图片朝向等。选传参数我这边不测试,有兴趣可以自行拓展。接下来看下一个接口:通用文字识别(含位置信息版)。

通用文字识别(含位置信息版)

看标题就可以知道本接口和上个接口的区别在于本接口可以返回文字在图片中的位置信息。首先贴下接口说明:

我们直接代码实现下本接口。直接贴下代码:

我们来看下接口效果:

可以看到在解析的数组里面返回了文字相对于图片的位置。我们可以贴下返回参数说明:

接口可以选传参数recognize_granularity定位但字符位置等。对于选传参数就不过多解释。读者可以自行拓展。接下来我们来看下一个接口:手写文字识别。

手写文字识别

本接口可以识别图片中手写中文或数字。首先贴下接口说明:

我将使用以下图片进行手写图片识别:

话不多说,我们直接实现代码:

我们首先需要将图片进行base64编码,然后提交到API。我这边以读取本地图片进行base64编码示例。我们可以测试下接口效果:

返回结果成功解析到手写图片的文字了。我们可以看下返回参数的说明:

身份证识别

支持对大陆居民二代身份证正反面的所有字段进行结构化识别,包括姓名、性别、民族、出生日期、住址、身份证号、签发机关、有效期限;同时,支持对用户上传的身份证图片进行图像风险和质量检测,可识别图片是否为复印件或临时身份证,是否被翻拍或编辑,是否存在正反颠倒、模糊、欠曝、过曝等质量问题。首先贴一下接口说明:

话不多说直接实现接口代码:

本接口必传参数除了进行base64编码的image外,还需要指定身份证正反面。我们可以测试下接口效果:

贴下返回参数帮助读者理解接口返回参数的含义:

本片文章先介绍上面四个接口,我们可以看到利用百度AI接口是很容易接入文字识别功能的。当然我们这种是站在前人的肩膀上进行开发的,有兴趣的可以自己去研究底层源码。本篇文章就到这里结束了,下一篇接着讲讲剩下的文字识别接口,涉及各种类型的图片文字识别如银行卡照片识别,行驶证照片识别等。我们下一篇文章再见!

本篇文章代码已同步到码云,可自行下载使用:

代码语言:javascript复制
https://gitee.com/mqzuimeng/test_code.git

0 人点赞