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

之前文章中讲过百度云识别图片文字内容,后来有群友问我怎么获取图片上文字的位置,对于这个问题我又看了一下百度云识别的api接口文档,看到它是有能够识别位置的接口,所以这个问题是可以解决的。

接下来详细的和大家说说这个问题啊,本期文章我们主要讲解稍微复杂的api接口该怎么对接。(文章最低下有源码,建议最后查看)

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

主要知识点有以下几个:

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

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

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

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

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

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

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

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

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

一、post地址:

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

二、post内容:

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

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

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

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

参数名:access_token

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

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

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

post地址:

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

post内容:如下图3个参数

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

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内容)

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

得到的返回值:

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

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

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

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

代码:

dim token=Encode.JsonToTable(返回值)

TracePrint token["access_token"]

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

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

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

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

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

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

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

base64编码:ShanHai.ReadFileBase(路径)

url编码:shanhai.CharToUrl(base64)

要识别的图片:

转码后的返回值:

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

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

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

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

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

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

稍微分析一下:

"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"]

在提取代码当中有[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"]

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容