这是奔跑的键盘侠的第117篇文章
前几天写的一篇《按键精灵二三事系列第九篇——图文识别+发邮件》,有小伙伴留言说,可以直接调用百度云平台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
['圈吗hon量化分析介绍奔跑的×+', '☆自Phon量化分析介绍奔跑的键盘侠', '百度Pyon量化分析介绍奔跑的键盘侠', '百度一下', '网页资讯视频图片知道文库贴吧采购地图更多》', '百度为您找到相关结果约16.000个', 'Python-量化分析个绍(八)-云+社区-腾讯云', 'Python-—量化分析介绍(八) Ed Frey发表于奔跑的键盘侠0 My SQL数据库新用户这个模', '块是为后面做铺垫的接下来在数据处理分析时,会时不时的从数据集中提取所', 'htps/ loud tencent com/deve..-V3-百度快照', 'Python-量化分析介绍(七)-云+社区-腾讯云', 'README} My Quant v#量化分析程序目录_init奔跑的键盘侠37篇文', '章13人订阅 Python量化分析介绍(六) Python量化', 'htps/ cloud tencent com/deve..-V3-百度快照', 'Python.——三级菜单字曲+文件读写)-奔跑的键盘侠', '2018年8月4日- Python-三级菜单字典+文件读写)作者奔跑的键盘侠/公众', '号 runningkeyboard.001按键精灵简介1002如何使用网络上免费的脚本资源003亂标连点器', 'jinciwei. cn/b3442..-百度快照', 'Python基础语法之— callable(obiec- yuanCruise=CSDN博客', '2017年8月6日- Python callable0函数用法实例分析本文实例讲述了 Python callable(函数用', '法。分享.【 darknet】添加新层详细版qu931110我转发的你没看到键盘侠', 'C) CSDN技术社区-百度快照', '丛 Python开始学编程PDF超清版- Python量化投资', '2019年7月5日-改编自 Vamei博客的《 Python快速教程》。本书以 Python为样本不仅介绍了', '编程的基本目录第1章用编程改造世界第2章先做键盘侠第3章过程大于结果', 'A Python量化投资-百度快照']ocr函数中的content的格式大概是下面这么个样子:{
"log_id": XXXXXXX,
"words_result_num": XX,"words_result":
[
{"words": " XXXXXX"},
{"words": "XXXXX"}
]
}所有后面有进行格式处理,和字符串拼接。如果换成标准大小字体的图片,其实识别图文准确率很高的,毕竟这么大一个平台开发的功能。
2
其实我不推荐使用百度API
首先不说他收费的问题,如果是普通图文不涉及隐私内容的,用一下其实也挺好用的,每天免费次数对普通用户来讲也足够了。
如涉及机密信息、商业信息,安全性还是要放在首位。毕竟有些知名平台泄露用户信息什么的,不管是漏洞还是人为恶意,总是不让人省心的。
所以,可以尝试自己去搭建一个字库。像我,平时要提取识别的内容有限,常用的百十个文字而已,是可以自己动手做一个字库,毕竟安全第一,就算某天网络异常或者百度宕机,也丝毫不受影响。如果目标文字属于标准字体,大漠插件也有标准字体的字库直接使用。
好了,今天就讲这么多。