栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

使用腾讯OCR,图片转表格

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用腾讯OCR,图片转表格

不是广告哈,就是记录一下操作,因为这些页面真的很难找,即便知道缺什么也找不到对应位置在哪…

文章目录

调用说明:(以Python为例)

步骤1:腾讯开服务步骤2:图片转base64使用步骤3:把base64编码转腾讯OCR步骤4:Json转Dict步骤5:Dict数据转Pandas.Dataframe格式:步骤6:整体依次调用 完整代码资料整理

调用说明:(以Python为例)

整个流程:

    腾讯开服务图片转base64编码把base64编码转腾讯OCR腾讯OCR返回的json,转Pandas Dict类型整理dict的数据为Pandas Dataframe类型
步骤1:腾讯开服务

    进入控制台:https://console.cloud.tencent.com/cam/capi,新建一个密钥:

    在控制台开启资源包:https://console.cloud.tencent.com/ocr/overview

步骤2:图片转base64使用
def change_img_to_base64(image_path):
    """base64编码图片"""
    with open(image_path, 'rb') as f:
        image_data = f.read()
        base64_data: bytes = base64.b64encode(image_data)  # base64编码
        return base64_data
步骤3:把base64编码转腾讯OCR
def tencent_ocr(suffix, image_based_64):
    """腾讯OCR
    :param suffix:图片的后缀,比如png,jpg
    :param image_based_64:图片的base64编码
    """
    from tencentcloud.common import credential
    from tencentcloud.common.profile.client_profile import ClientProfile
    from tencentcloud.common.profile.http_profile import HttpProfile
    from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
    from tencentcloud.ocr.v20181119 import ocr_client, models
    try:
        cred = credential.Credential("自己的SecretId(看步骤1)", "自己的SecretKey(看步骤1)")
        httpProfile = HttpProfile()
        httpProfile.endpoint = "ocr.tencentcloudapi.com"

        clientProfile = ClientProfile()
        clientProfile.httpProfile = httpProfile
        client = ocr_client.OcrClient(cred, "ap-beijing", clientProfile)

        req = models.RecognizeTableOCRRequest()
        params = {
            "Imagebase64": "data:image/{suffix};base64,{image_based_64}".format(
                suffix=suffix, image_based_64=image_based_64.decode("utf8"))
        }
        req.from_json_string(json.dumps(params))
        resp = client.RecognizeTableOCR(req)
        return resp.to_json_string()
    except TencentCloudSDKException as err:
        print(err)
步骤4:Json转Dict
def json_to_dict(my_json: str) -> dict:
    """json转dict类型"""
    return json.loads(my_json)
步骤5:Dict数据转Pandas.Dataframe格式:
def formation(json_data):
    """根据腾讯ocr识别结果整理格式并输出"""
    if json_data is not None:
        dict_data = json_to_dict(json_data)
        for table_index, table_data in enumerate(dict_data['TableDetections']):  # 遍历每个表格的数据
            table_data_list = []
            for each_table_data in table_data['Cells']:  # 遍历每个表中的数据
                content: str = each_table_data['Text']
                x_y: list = list(each_table_data['Polygon'][0].values())
                x_y.append(content)
                table_data_list.append(x_y)
            # 整理格式
            table_df = pd.Dataframe(table_data_list)
            table_df.columns = ['x', 'y', 'content']
            table_df.sort_values(by=['y', 'x'], ascending=True, inplace=True)
            for index, line_df in table_df.groupby("y"):  # 按每行进行处理
                line_df.sort_values(by=['x'], ascending=True, inplace=True)
                line_values = line_df['content'].values  # 当前行的数据
                print(",".join(line_values))
步骤6:整体依次调用
if __name__ == '__main__':
    image = "mypic.png"
    image_base64 = change_img_to_base64(image)  # 步骤1:图片转base64
    suffix = image.split('.')[-1]  # 后缀
    tencent_result: json = tencent_ocr(suffix, image_base64)
    formation(tencent_result)
完整代码
import base64
import json
import pandas as pd


def change_img_to_base64(image_path):
    """base64编码图片"""
    with open(image_path, 'rb') as f:
        image_data = f.read()
        base64_data: bytes = base64.b64encode(image_data)  # base64编码
        return base64_data


def json_to_dict(my_json: str) -> dict:
    """json转dict类型"""
    return json.loads(my_json)


def tencent_ocr(suffix, image_based_64):
    """腾讯OCR
    :param suffix:图片的后缀,比如png,jpg
    :param image_based_64:图片的base64编码
    """
    from tencentcloud.common import credential
    from tencentcloud.common.profile.client_profile import ClientProfile
    from tencentcloud.common.profile.http_profile import HttpProfile
    from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
    from tencentcloud.ocr.v20181119 import ocr_client, models
    try:
        cred = credential.Credential("自己的SecretId(看步骤1)", "自己的SecretKey(看步骤1)")
        httpProfile = HttpProfile()
        httpProfile.endpoint = "ocr.tencentcloudapi.com"

        clientProfile = ClientProfile()
        clientProfile.httpProfile = httpProfile
        client = ocr_client.OcrClient(cred, "ap-beijing", clientProfile)

        req = models.RecognizeTableOCRRequest()
        params = {
            "Imagebase64": "data:image/{suffix};base64,{image_based_64}".format(
                suffix=suffix, image_based_64=image_based_64.decode("utf8"))
        }
        req.from_json_string(json.dumps(params))
        resp = client.RecognizeTableOCR(req)
        return resp.to_json_string()
    except TencentCloudSDKException as err:
        print(err)


def formation(json_data):
    """根据腾讯ocr识别结果整理格式并输出"""
    if json_data is not None:
        dict_data = json_to_dict(json_data)
        for table_index, table_data in enumerate(dict_data['TableDetections']):  # 遍历每个表格的数据
            table_data_list = []
            for each_table_data in table_data['Cells']:  # 遍历每个表中的数据
                content: str = each_table_data['Text']
                x_y: list = list(each_table_data['Polygon'][0].values())
                x_y.append(content)
                table_data_list.append(x_y)
            # 整理格式
            table_df = pd.Dataframe(table_data_list)
            table_df.columns = ['x', 'y', 'content']
            table_df.sort_values(by=['y', 'x'], ascending=True, inplace=True)
            for index, line_df in table_df.groupby("y"):  # 按每行进行处理
                line_df.sort_values(by=['x'], ascending=True, inplace=True)
                line_values = line_df['content'].values  # 当前行的数据
                print(",".join(line_values))


if __name__ == '__main__':
    image = "mypic.png"
    image_base64 = change_img_to_base64(image)  # 步骤1:图片转base64
    suffix = image.split('.')[-1]  # 后缀
    tencent_result: json = tencent_ocr(suffix, image_base64)
    formation(tencent_result)
资料整理

腾讯提供的服务叫做行业文档识别:https://cloud.tencent.com/act/event/ocrdemo?dt=4

行业文档识别的接口文档:https://cloud.tencent.com/document/api/866/49525

API调试的界面在:https://console.cloud.tencent.com/api/explorer?Product=ocr&Version=2018-11-19&Action=RecognizeTableOCR&SignVersion=

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768912.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号