Python之ocr识别图片并转为excel文件

本文指导如何开通腾讯云文字识别服务,使用表格识别功能,通过Python实现图片转Excel,并提供了详细步骤和代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境准备

1.开通腾讯文字识别服务

        按照官网步骤进行开通:https://cloud.tencent.com/product/generalocr/getting-started

开通后可获得两个参数:SecretId、SecretKey

         腾讯提供的文字识别服务,支持多种图片识别,包括身份证、表格、或者其他通用文字识别等,本文主要使用表格识别服务。

接口调用说明:

1.打开表格识别V2接口说明文档:https://cloud.tencent.com/document/product/866/49525#1.-.E6.8E.A5.E5.8F.A3.E6.8F.8F.E8.BF.B0

2.进入接口调试页面

 3.自动生成python语法的代码片段(供参考)

   

2.开发环境准备:

tencentcloud-sdk-python:

        pip install -i https://mirrors.tencent.com/pypi/simple/ --upgrade tencentcloud-sdk-python

参考地址:https://cloud.tencent.com/document/sdk/Python

3.打包应用程序(按照下述步骤安装)

(1)pip install pywin32;
(2)pip install wheel
(3)pip install -U setuptools
(4)pip install pyinstaller

参考资料:https://blog.youkuaiyun.com/qiuqiuit/article/details/113080645

代码设计:

1.yaml

yaml文件管理配置信息:SecretId、SecretKey

yaml配置文件内容:config.yaml

# -*- coding: utf-8 -*-
secret_id: AKIDvpcBVdZJ0b2Rfha******
secret_key: DD0ZtzsXzFI6h5FAsN******

对应的读取yaml内参数的代码如下:

import yaml
def get_yaml_data(yaml_file):
    #1-打开yaml文件
    file = open(yaml_file, 'r', encoding="utf-8")
    #2-读取文件
    file_data = file.read()
    #3-将字符串转化为字典或列表
    data = yaml.safe_load(file_data)
    #4-关闭按文件
    file.close()
    #返回读取的数据内容
    return data

 2.ocr识别图片

# -*- coding: utf-8 -*-
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.ocr.v20181119 import ocr_client, models
import base64
# OCR识别封装
def img_to_excel(output_file_name,
                 image_path,
                 secret_id,
                 secret_key):
    #1- 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey
    cred = credential.Credential(
        secret_id,
        secret_key
    )
    #2- 实例化client对象
    http_profile = HttpProfile()
    http_profile.endpoint = "ocr.tencentcloudapi.com"

    client_profile = ClientProfile()
    client_profile.httpProfile = http_profile
    client_profile.signMethod = "TC3-HMAC-SHA256"
    client = ocr_client.OcrClient(cred, "ap-shanghai", client_profile)
    #3-实例化一个请求对象--使用表格V2
    fast_request = models.TableOCRRequest()
    #4-读取图片数据,使用Base64编码
    with open(image_path, 'rb') as f:
        image = f.read()
        image_base64 = str(base64.b64encode(image), encoding='utf-8')
    fast_request.ImageBase64 = image_base64
    #5-通过client对象调用访问接口,传入请求对象----使用表格V2
    resp=client.TableOCR(fast_request)
    #6-获取返回数据(Data为Base64编码后的Excel数据)
    data = resp.Data
    # 转换为Excel
    output_file_name = str(output_file_name)
    path_excel = output_file_name + ".xlsx"
    with open(path_excel, 'wb') as f:
        f.write(base64.b64decode(data))
    return path_excel



3.运行调用

# -*- coding: utf-8 -*-

import ocr
import yaml_class
'''
图片统一命名格式:'num'+N(编号)+'.jpn'
excel文件名称格式:与图片的N(编号)一一对应
'''
def ocr_pic(N):
    #调用yaml读取函数,已列表形式返回配置数据secret_id,secret_key
    config = yaml_class.get_yaml_data("config.yml")
    #遍历读取图片,N为图片的个数
    for image_path in range(1, N + 1):
        pic_path = image_path
        # 调用ocr识别图片并转成excel文件
        path_excel = ocr.img_to_excel(
            'excel_list/' + str(pic_path) ,  #excel文件路径+文件名
            'pic_list/' + 'num' + str(image_path) + '.png',  #图片文件路径+文件名
            secret_id=config['secret_id'],
            secret_key=config['secret_key'],
        )

if __name__ == '__main__':
    #入参为图片数量,假设有2张图片
    ocr_pic(2)

4.结果

### 将PDF文件中的数据转换为Excel表格 为了将PDF文件中的数据成功导出至Excel表格,通常会借助几个重要的Python库来完成这一过程。具体来说,`PyMuPDF` (也称为 `fitz`) 和 `tabula-py` 是两个常用的用于从PDF中提取表格数据的库;而 `pandas` 则是一个强大的数据分析和处理库,可用于进一步整理所提取的数据,最终利用 `openpyxl` 或者 `xlsxwriter` 库将数据写入到Excel文件中。 #### 安装必要的库 在开始之前,确保安装了所需的Python包: ```bash pip install pymupdf tabula-py pandas openpyxl ``` #### 提取PDF中的表格数据 下面是一段简单的代码示例,展示如何使用上述提到的技术栈来实现目标功能[^1]: ```python import fitz # PyMuPDF from tabula import read_pdf import pandas as pd def convert_pdf_to_excel(pdf_path, excel_path): """ Convert tables within a PDF document into an Excel file. :param pdf_path: Path to the input PDF file containing table(s). :param excel_path: Destination path for saving the output Excel file. """ # Extract all pages' content using PyMuPDF doc = fitz.open(pdf_path) total_pages = len(doc) dfs = [] # List of DataFrames holding each page's data for i in range(total_pages): try: df_list = read_pdf(pdf_path, pages=i+1, multiple_tables=True) dfs.extend(df_list) except Exception as e: print(f"Error processing page {i}: ", str(e)) writer = pd.ExcelWriter(excel_path, engine='xlsxwriter') for idx, dataframe in enumerate(dfs): sheet_name = f'Sheet{idx + 1}' dataframe.to_excel(writer, sheet_name=sheet_name, index=False) writer.save() ``` 这段脚本首先遍历整个PDF文档的所有页面,尝试从中抽取任何可用的表格结构化信息。对于每一个成功的表格外置操作,都会创建一个新的DataFrame对象存放在列表里。最后一步则是把这些收集起来的数据帧逐一写入同一个Excel工作簿的不同Sheet页内[^2]。 #### 处理复杂情况下的改进措施 当遇到更复杂的PDF格式时——比如包含图像形式呈现的表格而非纯文本——则可能需要额外的方法论支持。此时可以考虑先通过OCR技术识别图片内的字符再做后续解析,或者直接调用专门针对此类情形设计的服务API接口来进行辅助处理[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miss糖豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值