按键精灵_百度云识别获取图片上文字的位置

如果你想学会post对接api,请认真看这篇文章,保证你能学会!

主要知识点有以下几个:

一、post方式提交数据的方法

二、怎么查看api帮助文档,包括参数、返回值等等

下面我们正式这期文章教程的讲解,先来看看准备工作,首先你要有一个百度账号,这是最起码的要求,然后登陆百度云识别平台:

http://ai.baidu.com/tech/ocr

新建一个应用,获取到API Key和Secret Key,这两个就是开启api使用大门的钥匙。

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

之前那期文章我给大家的源码然后直接使用,并没有说源码怎么来的。那么这期就给大家说说具体的获取步骤:先来获取帮助文档,打开连接http://ai.baidu.com/docs#/OCR-API/top

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

在右侧有菜单选项,点击上图通用文字识别(含位置信息。。),说实话右侧的菜单看起来有些不习惯。之后在中间位置就可以看到本期的重点——帮助文档。

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

很多人初次接触这些api帮助文档的时候,是不愿意仔细看下去的,觉得很枯燥无聊,这没办法,必须要强迫自己认真看,既然是帮助文档其实就是说明书,只有看明白了说明书才知道怎么使用。

下面我带着大家看说明书,首先看到HTTP方式是post方式,对于post方式至少需要两个有效的数据——post地址,post内容。接下来我们就在说明书里面找这两个数据。

一、post地址:

请求URL:https://aip.baidubce.com/rest/2.0/ocr/v1/general

二、post内容:

帮助文档中的全部URL参数。

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

对于参数来说,有些是直接填写,有些是需要通过代码获取的,有些参数是可填可不填的。

我们按照帮助文档的顺序逐一整理出来。

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

关于参数分两部分组成:参数名和参数值,以上图为例,

参数名:access_token

参数值:通过API Key和Secret Key获取的access_token,参考“Access Token获取”

关于参数值这部分,它是需要通过代码获取的,所以要分析它是怎么得到的,点击“Access Token获取”的链接。

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

通过截图内容可以看出要想获取access_token的值,还是需要post方式提交,那么老套路,分析post地址和post内容。

post地址:

https://aip.baidubce.com/oauth/2.0/token

post内容:如下图3个参数

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

依然按照参数名=参数值的形式写一下。

grant_type=client_credentials

client_id=你自己的api key

client_secret=你自己的secret key

为了保护账号隐私,我自己key隐藏掉,你可以根据文章开头说的,自己查看自己账号的key值。post内容是将所有参数用&连接起来。

post内容=grant_type=client_credentials&client_id=你自己的api key&client_secret=你自己的secret key

post地址和post内容都准备好了以后,就可以操作了,使用的命令是url.post,当然山海插件也有post相关的命令。

具体形式如下:

dim 返回值=url.post(post地址,post内容)

看一下在安卓按键中的实际代码:

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

得到的返回值:

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

一大段英文字母放到这里,看起来很费劲,通过形式我们可以判断出是json数据,之前有好几篇文章都讲到json的提取,稍后我会在文章底部推荐文章中放上教程链接。

我们先把json格式化一下,用在线的工具http://www.bejson.com/

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

格式化以后,按照“ 键名:键值”这个格式换行了,看起来很清晰。

我们需要返回值中键名叫access_token的键值。

代码:

dim token=Encode.JsonToTable(返回值)

TracePrint token[“access_token”]

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

这部分关于access_token这个参数就结束了。

接下来返回百度云识别参数的帮助文档看下一个参数。

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

参数是Content-Type=application/x-www-form-urlencoded是直接用的参数。

下面是“请求参数”,这部分重要,划重点了,所有post对接的参数,必不可少的就是这部分参数了。

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

参数一大段,先看第二列,是否必须,提示false的都是可以不填的,对于初学者,能省略不填的都先不填,那么就剩下两个参数了。

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

然后又发现,这两个参数还是二选一,也就说只要一个就行,我们选择image这个参数,因为平时识别的图片都是本地的居多。来看看它的说明介绍。

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

图片要求是base64编码,再转url编码。关于两个编码我们不需要掌握它的原理,只需要使用对应的命令即可。

base64编码:ShanHai.ReadFileBase(路径)

url编码:shanhai.CharToUrl(base64)

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

要识别的图片:

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

转码后的返回值:

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

对于这个返回值,虽然复杂但是不需要任何提取处理,所以不用管它,稍后直接用就行。

现在百度云识别需要的所有参数都搞定了,开始动手识别了。

下图回顾一下这个几个参数。

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

post内容=”access_token=”&token[“access_token”]&”&Content-Type=application/x-www-form-urlencoded&image=”&图片

将上面所有内容合并在一起,

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

运行代码的返回值依然是json,格式化以后如下图

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

稍微分析一下:

“words_result_num”: 4, 意思是有4组文字(4行文字)

“words”: “63+332+24等于多少?” 意思是识别的内容是”63+332+24等于多少?”

“location”: { 意思是定位

“width”: 446, 意思是文字块宽度446

“top”: 331, 意思是文字块距顶部331(纵坐标)

“height”: 54, 意思是文字块高度54

“left”: 30 意思是文字块距左侧30 (横坐标)

},

注意:说的横坐标和纵坐标都是相对于图片左上角,而不是屏幕啊

提取json内容:

Dim json=Encode.JsonToTable(myjson)

TracePrint json[“words_result”][1][“words”]

TracePrint json[“words_result”][1][“location”][“left”]

TracePrint json[“words_result”][1][“location”][“top”]

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

百度云识别获取图片上文字的位置(按键精灵post方式讲解)

在提取代码当中有[1],如果你想提取第一行内容,就写1,第二行内容就写2,只要不超过图片中文字的行数,就都是有效的。

根据我们提取的返回值可以看出,图片上第一行文字内容是”63+332+24等于多少?” 横坐标是30,纵坐标是331。

最终我们就可以实现识别图片文字的位置。

稍微啰嗦一句,我们在看api文档的时候,有很多非必须填写的参数,这些虽然可以不填,但不代表没有用,它们可能是满足一些特殊需求的参数,在你掌握基础的参数使用方法以后,建议去看看这些参数的使用。

好了,本期内容就这些,知道有些朋友就喜欢直接用源码:

Dim api="7h4Y7Ejb21kUrXYpxhmQRfnt"
Dim Secret="zgGwEcIcXFCWrsqmALYLGzrnGq2qaMjy"
Dim post地址="https://aip.baidubce.com/oauth/2.0/token"
Dim post内容="grant_type=client_credentials&client_id="&api&"&client_secret="&Secret
Dim 返回值=url.post(post地址,post内容)
TracePrint 返回值
dim token=Encode.JsonToTable(返回值)
TracePrint token["access_token"]
Dim 路径="/sdcard/pictures/tx.png"
Import "shanhai.lua"
Dim base64=ShanHai.ReadFileBase(路径)
Dim 图片=shanhai.CharToUrl(base64)
Dim post内容1="access_token="&token["access_token"]&"&Content-Type=application/x-www-form-urlencoded&image="&图片
Dim myjson=url.post("https://aip.baidubce.com/rest/2.0/ocr/v1/general",post内容1)
TracePrint myjson
Dim json=Encode.JsonToTable(myjson)
TracePrint json["words_result"][1]["words"]
TracePrint json["words_result"][1]["location"]["left"]
TracePrint json["words_result"][1]["location"]["top"]

 

赞 (0)