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()

上一篇下一篇

猜你喜欢

热点阅读