url 传递 base64 参数 还原不了图片_图片文字识别实现(1)

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

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

b845185d8edab679a0e608ccf79c5f57.png

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

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

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

0e37520f89db0e1428ef2cd15c2b97c5.png

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

1b9f62b34731efab15c0609be94c47bb.png

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

2f3153c6892b27e5cab5d71f6bdcd855.png

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

f51485e2af00041df596447cc2458e5a.png

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

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

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

7ccb6f5d532b4c2eb06118560eb797e6.png

2c061e5c6f787ec6b319b4d78e3a7383.png

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

007a0e171aa5e51638c6ba9772a22a1e.png

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

npm install request --save-dev

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

7f2e4ac7b53be1050516e33a5c6e4e15.png

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

通用文字识别接口

先贴下文档接口说明:

2d91982a8e547b05a173c746334f826e.png

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

d71f12f73b19a99a583ff10f3a2885f6.png

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

43ca3781aa78b10e21b90f702046d82d.png

ae5cf8ebf3207a82a68b10fbd04048da.png

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

如果image参数存在,则url参数无法生效url不支持https,也就是https协议的图片url无法进行解析

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

9f6ddeefaa960f730499af680d1103b7.png

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

59a3a9306cf8a727a950d43b1ab1b15b.png

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

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

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

eafc62ff63fa558a0bde7fbc8cbb4197.png

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

8932df6da19c39581f09e6322edcac59.png

5a270c83a1b4f5cf7c0cb7a1eb0b17f0.png

我们来看下接口效果:

5d636ef58eecb539460da9b9a1d3cbcc.png

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

b8a30bc3e41506311eda6e14e15ca80a.png

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

手写文字识别

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

c7fde2ce4323a7518b0cc507b4f87b93.png

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

4fa48ac461a026a440a9810a8ac6d01e.png

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

2c061e5c6f787ec6b319b4d78e3a7383.png

d046df2171fadbbd2f3f98a73f7b8aa1.png

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

fee1c343eeafe1f9ed5bb0ff1380223c.png

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

c4c7e3e40f989c2a7421cea863d25c75.png

身份证识别

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

76bff74fff74d2eb2f8f922f0cc0cbef.png

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

16e75cbb5d69d6bd12d6ae43330e1636.png

b3c9da5a86d74b46a03386d5f8f7364a.png

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

718bbd5e86076e7ee4cb3c4f8ebfcacc.png

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

4d4e08dee6c7f790ff13b1a88ce872d3.png

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

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

https://gitee.com/mqzuimeng/test_code.git

        如果喜欢我的文章,欢迎关注我的个人公众号:周先生自留地

7f736161a51980f52dac99730419d566.png

推荐阅读

NodeJS人脸识别初探

NodeJS人脸识别(2)

NodeJS人脸识别(3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值