python 通过百度OCR api实现族谱文字识别
2020-03-14 本文已影响0人
woniuxia
族谱图片
IMG_20190716_184734.jpg识别后输出结果
image.png代码
# -*- coding:utf-8 -*-
"""
File Name: test_ocr_bd_1
Author: WaBi
Data: 2019/7/17 20:27
-----------------------
Info:
-----------------------
Change Activity:
2019/7/17: create
"""
import requests
import json
import base64
from operator import itemgetter
""" 你的百度 APPID AK SK """
APP_ID = 'xxxx'
API_KEY = 'xxxxx'
SECRET_KEY = 'xxxxxxxxx'
token_url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=xxxxxx&client_secret=xxxxxxx'
filePath = 'D:/projects/rhino/test/ocr/20190716/IMG_20190716_184734.jpg'
def baidu_api():
token_info = requests.get(url=token_url)
token_info_dic = json.loads(token_info.text)
access_token = token_info_dic['access_token']
url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general?access_token=' + access_token
with open(filePath, 'rb') as fp:
img = base64.b64encode(fp.read())
params = {
'image': img,
}
resp = requests.post(url=url, data=params)
# print(resp.text)
words_result = json.loads(resp.text)['words_result']
# print(words_result)
words = {}
for num in range(30):
words[num + 1] = ''
words_1 = {}
for row in words_result:
words_1.setdefault(row['location']['left'], []).append({'top': row['location']['top'], 'words': row['words']})
# print(words_1)
pre_cnt = 0
h_cnt = 1
words_2 = {}
for value in sorted(words_1, reverse=True):
if pre_cnt == 0:
pre_cnt = value
if pre_cnt - value > 30:
h_cnt = h_cnt + 1
for row in words_1[value]:
words_2.setdefault(h_cnt, []).append(row)
pre_cnt = value
for value in sorted(words_2):
for row in sorted(words_2[value], key=itemgetter('top')):
try:
words[value] = words[value] + row['words']
except KeyError:
print('value=%d' % (value,))
for key, value in words.items():
print('%d: %s' % (key, value))
baidu_api()