Chuang Ye

Python调用百度OCR

2019-07-14 python OCR
Word count: 914 | Reading time: 4min

你要记住这句话

字母+数字的文字识别现在自己还是可以做到的,但是中文的文字识别就很难了。所以平时遇到这种需求时,直接调用大厂的文字识别OCR效率更高点。

这里调用百度的OCR主要实现的是对网络上一些表格图片进行文字识别。
之后要识别的图片

在百度云开放平台创建应用

百度官方使用说明

获取API KEY和Secret Key

进入百度AI开放平台的文字识别板块,然后创建应用,获得API KEY和Secret Key;

授权字符串Access Token

Token是使用API的第一步!Access Token就是在每次向服务器发送的请求里面加上这个你个人专属的密码,这个密码由别人API的创建者决定;有可能一个token会十分复杂不过这个部分还好,基本每个开发者都会写说明文档来介绍如何使用。

code
1
2
3
4
5
6
7
8
9
10
11
12
import requests
import ssl, sys

# 官网host解析
# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'

headers = {
'Content-Type': 'application/json;charset=UTF-8'
}
res = requests.get(url=host, headers=headers).json()
print(res['access_token'])

把获取到access_token保存一下,注意:百度OCR获取的access_token有效期为30天,需要每30天进行定期更换;

开始调用表格文字识别API(异步接口)

code
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
import requests
import base64
import ssl, sys

url = 'https://aip.baidubce.com/rest/2.0/solution/v1/form_ocr/request'

data = {}

# 上面获得access_token
data['access_token'] = ''

# 读取图片
file = open('test1.png', 'rb')
image = file.read()
file.close()

# 进行编码
data['image'] = base64.b64encode(image)

#写自己API KEY
headers = {
"Content-Type": "application/x-www-form-urlencoded"
}

res = requests.post(url=url, headers=headers, data=data)

print(res.json())
请求URL
1
https://aip.baidubce.com/rest/2.0/solution/v1/form_ocr/request
Headers说明
1
2
3
4
headers = {
"Content-Type": "application/x-www-form-urlencoded",
"apikey": ""
}
请求参数

百度OCR对图片的要求是需要base64编码、去掉编码头后再进行urlencode

1
data['image'] = base64.b64encode(image)

还有access_token

1
data['access_token'] = '**************'

Result

这里是返回的参数

调用接口获取结果

code
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
import requests
import ssl, sys

url = 'https://aip.baidubce.com/rest/2.0/solution/v1/form_ocr/get_request_result'

data = {}

# 上面获得access_token
data['access_token'] = ''

# 上面获得request_id
data['request_id'] = '15347521_1068276'

#可以获得josn和excel两种结果
data['result_type'] ='excel'

#写自己API KEY
headers = {
"Content-Type": "application/x-www-form-urlencoded",
"apikey": ""
}

res = requests.post(url=url, headers=headers, data=data)

print(res.json())
请求URL
1
https://aip.baidubce.com/rest/2.0/solution/v1/form_ocr/get_request_result
Headers说明

使用获得的API KEY

1
2
3
4
headers = {
"Content-Type": "application/x-www-form-urlencoded",
"apikey": ""
}

请求参数

使用上一步获得的request_id

1
data['request_id'] = '15347521_1068276'

期望获取结果的类型,取值为“excel”时返回xls文件的地址,取值为“json”时返回json格式的字符串,默认为“excel”

1
data['result_type'] ='excel'

Result

这里是返回的参数

1
{'result': {'result_data': 'http://bj.bcebos.com/v1/aip-web/form_ocr/67ACBFCCC3C24A79A7161DC2F3A05D29.xls?authorization=bce-auth-v1%2Ff86a2044998643b5abc89b59158bad6d%2F2019-07-05T09%3A17%3A41Z%2F86400%2F%2F49456aa34ec7ed98e00ebb9cef40a6272fb63354dc25b770326055a4fe237245', 'ret_msg': '已完成', 'request_id': '15347521_1068276', 'percent': 100, 'ret_code': 3}, 'log_id': 15623183058743806}

最后的url我们点进去下载excel,该excel就是我们文字识别的最终结果
result

结语

稍微修改一下可以做其他图片的文字识别,不同图片文本对于不同的请求URL和参数,需要去自己去官网看文档。最主要的这个OCR也可以做为反爬验证码的识别,有空再搞这个吧

< PreviousPost
Python调用高德API批量获得经纬度
NextPost >
重复度计算