This page looks best with JavaScript enabled

Python3调用百度API实现OCR识别

 ·  ☕ 3 min read · 👀... views

随着人工智能技术的发展,光学字符识别技术(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
pip3 install baidu-aip

然后

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

Share on

Qfrost
WRITTEN BY
Qfrost
CTFer, Anti-Cheater, LLVM Committer