随着人工智能技术的发展,光学字符识别技术(OCR)也越来越成熟,识别的准确度也越来越高。近日,看到群里诸位巨佬通过人工智能、机器学习等高逼格的技术实现了图像转文字的功能。在下才疏学浅,没有写人工智能的实力,只能退而求其次,思考能否调用别人的OCR接口实现字符识别。 一番搜索后,发现百度的OCR接口做的比较友好,网友们对其的识别率也是较为满意的,于是我也通过一番研究,实现了百度api接口调用实现OCR识别功能。今日在这里分享我的折腾成果。 PS:本文适合新手,大佬请忽略。如有写错还请指正。 首先,先去ai.baidu.com注册一个账号,并创建 图像识别 > 通用文字识别 应用。
创建后你便可以在http://console.bce.baidu.com/ai/#/ai/ocr/app/list得到APP_ID,API_KEY,SECRET_KEY这三个密钥。然后便是去查询ocr api的官方调用文档了。虽然说里面有python调用ocr api的例子,但是构建token等操作对于新手来说还是有一定的难度,想要完全理解并实现估计还是会走很多弯路。于是我想,对于这种比较固定的功能应该会有大佬已经写好了库来方便调用,经过一番查询,果然有一个叫aip的库中的AipOcr函数能实现这样一个功能。 于是
然后
1
|
from aip import AipOcr client = AipOcr(APP\_ID, API\_KEY, SECRET_KEY)
|
注意了,安装时输的是baidu-aip,但是调用时库名是aip。AipOcr()函数将返回一个aip.ocr.AipOcr对象。
1
|
client.general(image) #上传本地图片进行识别 res=client.basicGeneralUrl(url) #提交图片URL进行识别
|
该方法将以字典形式返回扫描状态及结果。我们写一个for循环将结果提取出来。
1
|
for item in res\['words_result'\]: print(item\['words'\])
|
以上代码便可实现了调用百度api进行ocr识别。我们可以看一下识别效果。
将代码进行优化后,也可以实现一条命令实现扫描,以下附上完整代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
from aip import AipOcr
import sys,os
from urllib.request import urlopen
"""
你的 APPID AK SK
"""
APP_ID = '11601929'
API_KEY = 'uj0AbP2H12PmRjqwkyHHk7nf'
SECRET_KEY = 'guVA01FCoEcpMjIapXW9IOyQ5NTR6rXi'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
length = len(sys.argv)
argu = {'-i':0,'-u':0}
#帮助模块
if sys.argv[1] == '--help':
print('This script is order to get words from image\nThe principle is to upload pictures to Baidu AI for OCR recognition\n\n\t -i \t Submit local pictures to Baidu AI. You must input image absolute path or filename\n\t -u \t Submit an image URL to Baidu AI. You must input an image URL')
exit(0)
#判定参数格式是否规范
if length <= 2:
print("error! syntax:{} (-i / -u) <<target>>".format(__file__))
print("You can input '{} --help' to get more information".format(__file__))
exit(1)
#读取参数并判定其有效性
try:
argu[sys.argv[1]] = 1
except:
print("error! syntax:{} (-i / -u) <<target>>".format(__file__))
print("You can input '{} --help' to get more information".format(__file__))
exit(1)
""" 读取图片 """
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
if argu['-u'] == 1:
""" 调用通用文字识别, 图片为远程url图片 """
url = sys.argv[2]
try:
urlopen(url)
except:
print('Target couldn\'t be accessed')
exit(1)
res=client.basicGeneralUrl(url)
if argu['-i'] == 1:
""" 调用通用文字识别, 图片为本地图片 """
filename = sys.argv[2]
if not os.path.exists(filename):
print('Target couldn\'t be accessed')
exit(1)
#print(filename)
image = get_file_content(filename)
res=client.general(image)
for item in res['words_result']:
print(item['words'])
|
好了,教程到此结束。若是大家对Python的学习有什么心得体会欢迎大家与我进行交流。 Mail:root@qfrost.com