美文网首页
python 通过百度OCR api实现族谱文字识别

python 通过百度OCR api实现族谱文字识别

作者: woniuxia | 来源:发表于2020-03-14 14:15 被阅读0次

    族谱图片

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

    相关文章

      网友评论

          本文标题:python 通过百度OCR api实现族谱文字识别

          本文链接:https://www.haomeiwen.com/subject/ucmbshtx.html