syzz1801 2024-10-18 18:35 采纳率: 0%
浏览 8

批量将腾讯云的OCR识别结果写入导出的表格

我是零基础用户,想请教一下,我这个代码在Python跑完没有将腾讯云的OCR识别结果写入导出的表格里面是什么问题,我想用来批量识别微信支付的订单截图,谢谢!


```python
import json
import base64
import logging
import os
import pandas as pd
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

# 腾讯云OCR服务的密钥和区域
secret_id = "***"
secret_key = "***"
region = "ap-guangzhou"

# 图片文件夹路径
image_folder_path = "D:/报销"

# 实例化一个认证对象
cred = credential.Credential(secret_id, secret_key)

# 实例化一个http选项
httpProfile = HttpProfile()
httpProfile.endpoint = "ocr.tencentcloudapi.com"

# 实例化一个client选项
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile

# 实例化OCR client对象
client = ocr_client.OcrClient(cred, region, clientProfile)

# 创建一个空的DataFrame来存储结果
results_df = pd.DataFrame(columns=["文件名", "金额", "支付时间", "商户全称", "交易单号"])

# 遍历文件夹中的图片文件
for filename in os.listdir(image_folder_path):
    if filename.lower().endswith((".jpg", ".jpeg", ".png", ".bmp", ".tiff", ".tif")):
        file_path = os.path.join(image_folder_path, filename)
        logging.info(f"正在处理文件: {filename}")

        try:
            # 读取并编码图片为Base64字符串
            with open(file_path, "rb") as image_file:
                image_base64 = base64.b64encode(image_file.read()).decode('utf-8')

                # 实例化一个请求对象并设置请求参数
            req = models.SmartStructuralOCRV2Request()
            req.ItemNames = ["金额", "支付时间", "商户全称", "交易单号"]
            req.ImageBase64 = image_base64

            # 发送请求并获取响应
            resp = client.SmartStructuralOCRV2(req)

            # 解析响应结果
            response_data = json.loads(resp.to_json_string())
            ocr_data = response_data.get('Data', {}).get('Items', [])

            if ocr_data and isinstance(ocr_data, list) and len(ocr_data) > 0:
                result_item = ocr_data[0]  # 这里只取第一个结果作为示例
                result_dict = {key: result_item.get(key, '') for key in ["金额", "支付时间", "商户全称", "交易单号"]}
                result_dict["文件名"] = filename
                results_df = results_df.append(result_dict, ignore_index=True)

        except TencentCloudSDKException as err:
            logging.error(f"处理文件 {filename} 时出错: {err}")
        except Exception as e:
            logging.error(f"处理文件 {filename} 时发生意外错误: {e}")

        # 将结果DataFrame保存为Excel文件
desktop_path = os.path.join(os.path.expanduser('~'), 'Desktop')
output_file_path = os.path.join(desktop_path, "OCR_Results.xlsx")
results_df.to_excel(output_file_path, index=False)
logging.info(f"OCR结果已保存至 {output_file_path}")

```

  • 写回答

1条回答 默认 最新

  • 无疆76 2024-10-18 18:59
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    你的代码看起来大体是正确的,它应该能正确地从腾讯云OCR服务获取识别结果并将结果存储在一个Pandas DataFrame中。然后,这个DataFrame会被保存为一个Excel文件。然而,如果在运行代码后并没有将腾讯云的OCR识别结果写入导出的表格,可能有以下几个原因:

    1. 文件路径问题:确保你的图片文件夹路径(image_folder_path)是正确的,并且确保你有权限访问这些文件。另外,也要确保你有权限在桌面上创建和写入文件。
    2. 腾讯云OCR服务的问题:确保你的腾讯云OCR服务正在正常运行,并且你的秘钥(secret_idsecret_key)是正确的。同时,检查你的代码中的区域(region)设置是否正确。
    3. 异常处理:你的代码对腾讯云SDK异常和其他异常进行了处理,这很好。但是,如果发生异常,可能会影响到后续的代码执行。确保异常处理后的代码(特别是将结果写入Excel的部分)在异常发生后仍能正确执行。
    4. 数据解析问题:腾讯云的OCR服务返回的JSON数据格式可能会影响到你的解析逻辑。你需要确保response_data.get('Data', {}).get('Items', [])这部分代码能够正确获取到OCR的结果。如果返回的数据结构发生变化,你可能需要调整这部分代码以适应新的数据结构。
    5. Excel文件保存问题:确认你的程序有权限在桌面上创建和写入文件。有时,由于权限问题,文件可能无法成功保存。你可以尝试将文件保存到其他已知有写入权限的目录中,然后再移动到你想要的位置。

    你可以尝试以上步骤来解决问题。如果问题仍然存在,你可能需要更详细地检查代码和错误日志以找出问题的根源。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月18日