奔跑的键盘侠

前几天写的一篇《按键精灵二三事系列第九篇——图文识别+发邮件》,有小伙伴留言说,可以直接调用百度云平台AI的OCR图文识别接口,不用自己单独做字库。于是就抽空研究了一下下,结果……

谈虎色变,我发现这个功能,网上很多帖子都用到了山海插件,关于插件、API调用,按键精灵其实有个不太好的地方:一旦涉及调用第三方和创建对象类的问题,语法都很晦涩,对业余选手来讲及其为难。

不想花费精力研究新的插件,就改用轻车熟路的python来写一下调用百度云平台的api接口吧。

1

代码实现

首先要去百度云平台注册个账号,然后去后台界面查看2个key值

(API KEY ,SECRET KEY),如下图

#!/usr/bin/env python3.6
# _*_ coding:utf-8 _*_
# __author__: Ed Frey
# DATE: 2019/8/8
import urllib.parse,urllib.request
import base64
import os
def get_token(api_key,secret_key):
'''
to get the access_token from baidu AI account information
:param api_key: API KEY from baidu AI account information
:param secret_key: SECRET KEY from baidu AI account information
:return:access_token
'''
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s'%(api_key,secret_key)
request = urllib.request.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
response = urllib.request.urlopen(request)
content = response.read()
if (content):
return eval(content)["access_token"]
return []
def ocr(access_token,path):
'''
to get words from path's picture
:param access_token: get it from fuction "get_token(api_key,secret_key)"
:param path: the picture's path
:return: a list of words
'''
if access_token is None:
return Noneif not os.path.isfile(path):
return Noneurl = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general?access_token=%s'%(access_token)
with open(path,"rb") as f:
 img = base64.b64encode(f.read())
 params = {"image": img}
params = urllib.parse.urlencode(params).encode("UTF8")
request = urllib.request.Request(url, params)
request.add_header('Content-Type', 'application/x-www-form-urlencoded')
response = urllib.request.urlopen(request)
content = response.read()
# print(content)
words_info = eval(content)["words_result"]
# print(words_info)
words = []
for word in words_info:
words.append(word["words"])
return words
if __name__ == "__main__":
api_key = "XXXXXXXXXXXX"
secret_key = "XXXXXXXXXXXXXXXXXXX"
path = r"C:\XXXXXX\test.jpg"
access_token = get_token(api_key,secret_key)
ocr_test = ocr(access_token,path)

至于测试结果:我就百度截了个图,来小试牛刀。运行结果如下:

"C:\ProgramFiles\Python36\python.exe" C:/Users/XXXXXXXXX/get_baidu_ai-token.py
{
"log_id": XXXXXXX,
"words_result_num": XX,"words_result":
[
{"words": " XXXXXX"},
{"words": "XXXXX"}
]
}

所有后面有进行格式处理,和字符串拼接。如果换成标准大小字体的图片,其实识别图文准确率很高的,毕竟这么大一个平台开发的功能。

2

其实我不推荐使用百度API

首先不说他收费的问题,如果是普通图文不涉及隐私内容的,用一下其实也挺好用的,每天免费次数对普通用户来讲也足够了。

如涉及机密信息、商业信息,安全性还是要放在首位。毕竟有些知名平台泄露用户信息什么的,不管是漏洞还是人为恶意,总是不让人省心的。

所以,可以尝试自己去搭建一个字库。像我,平时要提取识别的内容有限,常用的百十个文字而已,是可以自己动手做一个字库,毕竟安全第一,就算某天网络异常或者百度宕机,也丝毫不受影响。如果目标文字属于标准字体,大漠插件也有标准字体的字库直接使用。

好了,今天就讲这么多。