Python进行图片文字识别(表格图片)(使用阿里OCR接口)

使用阿里OCR接口进行图片识别

这里仅做代码的记录,用于后续的快速工作。不会进行太多代码的讲解,如果你也刚好需要的话,还需要结合阿里的OCR文档,会更快速。
阿里OCR链接:https://duguang.aliyun.com/

# 图片进行识别后再导出为表格文档

import sys

from typing import List

from alibabacloud_ocr_api20210707.client import Client as ocr_api20210707Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_darabonba_stream.client import Client as StreamClient
from alibabacloud_ocr_api20210707 import models as ocr_api_20210707_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient

def create_client(
        access_key_id: str,
        access_key_secret: str,
        ) -> ocr_api20210707Client:
    config = open_api_models.Config(
        access_key_id=access_key_id,
        access_key_secret=access_key_secret)
    # 访问的域名
    config.endpoint = f'ocr-api.cn-hangzhou.aliyuncs.com'
    return ocr_api20210707Client(config)


def pic_table(pic_path):
    
    """
    这里需要改变!!!!!
    """
    client = create_client('输入你的AccessKey ID', '输入你的AccessKey Secret')
    body_syream = StreamClient.read_from_file_path(pic_path)
    recognize_table_ocr_request = ocr_api_20210707_models.RecognizeTableOcrRequest(
        body=body_syream)
    runtime = util_models.RuntimeOptions()
    response = client.recognize_table_ocr_with_options(recognize_table_ocr_request, runtime)
    body = response.body
    #那到数据后
    filename='body.json'
    with open(filename,'w',encoding='utf-8') as f:
        f.write(str(body))

    with open('body.json','r',encoding='utf-8') as f:
        content = f.read().rstrip()
    content = eval(content)
    data = content['Data']
    data = eval(data)
    key = data.keys()
    con = data['prism_tablesInfo'][0]['cellInfos']
    key = []
    value = []
    for i in range(len(con)):
        key.append(con[i]['yec'])
        value.append(con[i]['word'])
    dic = list(zip(key,value))
    c = []
    for i in list(set(key)):
        r = []
        for j in range(len(dic)):
            if dic[j][0] == i:
                r.append(dic[j][1])
        c.append(r)
    ls = []
    for i in range(len(c)):
        ls.append(len(c[i]))
    a = max(ls)
    for i in range(len(c)):
        if len(c[i]) < a:
            c[i].extend('N'*(a-len(c[i])))
        elif len(c[i]) > a:
            for j in range(a-len(c[1])):
                c[i].remove('')
        else:
            pass

    import pandas as pd
    table = pd.DataFrame(columns=[i for i in range(a)])
    for i in range(len(c)):
        table.loc[i]=c[i]
    table.to_excel(pic_path[0:-4]+'table.xlsx',encoding='utf-8-sig',index=False)

import os
"""
这里需要改变,输出表格后,存放的目录!!!!!
"""
path = '你的目录'
dirs = os.listdir(path)
pic_l = []
for i in dirs:
    dir = os.path.join(path,i)
    pic_l.append(dir)
for i in range(10,18):
    pics = os.listdir(pic_l[i])
    for j in pics:
        try:
            pic_s = os.path.join(pic_l[i], j)
            pic_table(pic_s)
        except:
            print('error')




# 仅仅做识别

import sys
import os
import json


from typing import List

from alibabacloud_ocr_api20210707.client import Client as ocr_api20210707Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_darabonba_stream.client import Client as StreamClient
from alibabacloud_ocr_api20210707 import models as ocr_api_20210707_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient

path = '图片的路径'
accessKeyId = '你的ID'
accessKeySecret = '你的Secret'

#dirs = os.listdir(path)

class OCRStart:
    def __init__(self):
        pass

    @staticmethod
    def create_client(
        access_key_id: str,
        access_key_secret: str,
    ) -> ocr_api20210707Client:
        config = open_api_models.Config(
            access_key_id= access_key_id,
            access_key_secret= access_key_secret
        )
        config.endpoint = f'ocr-api.cn-hangzhou.aliyuncs.com'
        return ocr_api20210707Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = OCRStart.create_client(accessKeyId, accessKeySecret)
        # 需要安装额外的依赖库,直接点击下载完整工程即可看到所有依赖。
        body_syream = StreamClient.read_from_file_path('photo/5.0埋点v1.2.22.JPG')
        recognize_table_ocr_request = ocr_api_20210707_models.RecognizeTableOcrRequest(
            body=body_syream
        )
        runtime = util_models.RuntimeOptions()
        try:
            reqData = client.recognize_table_ocr_with_options(recognize_table_ocr_request, runtime)
        
            print(reqData)
            #reqData 就是最终识别并返回的数据

        except Exception as error:
            # 如有需要,请打印 erro
            print(error.message)

	# 和上面方法一样,只不是这个是 异步 的方式
    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        client = Sample.create_client(accessKeyId, accessKeySecret)
        body_syream = StreamClient.read_from_file_path('photo/5.0埋点v1.2.22.JPG')
        recognize_table_ocr_request = ocr_api_20210707_models.RecognizeTableOcrRequest(
            body=body_syream
        )
        runtime = util_models.RuntimeOptions()
        try:
            reqData = client.recognize_table_ocr_with_options(recognize_table_ocr_request, runtime)
        
            print(reqData)
        except Exception as error:
            # 如有需要,请打印 erro
            print(error.message)


if __name__ == '__main__':
    OCRStart.main(sys.argv[1:])
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值