• 0
  • 0
分享
  • Python之ocr识别图片并转为excel文件
  • 豆秸 2022-07-08 08:58:45 字数 3200 阅读 8065 收藏 0

环境准备

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

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

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

1.png

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

接口调用说明:

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

2.进入接口调试页面

投2.png

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

投3.png

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.csdn.net/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.结果

投4.png

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 定义:软件兼容性测试是指检查软件之间能否正确地进行交互和共享信息。随着用户对来自各种类型软件之间共享数据能力和充分利用空间同时执行多个程序能力的要求,测试软件之间能否协作变得越来越重要。软件兼容性测试工作的目标是保证软件按照用户期望的方式进行交互。平台的兼容性:硬件平台:pc手机pad等,操作系统:AndroidiOSWindowsmaclinux。浏览器:谷歌浏览器火狐浏览器IE浏览器等。web兼容性测试:以浏览器兼容性为主,操作系统和分辨率为辅。明确需求:根据用户需求去找浏览器,市场占有率的浏览器(浏览器最近的三个版本)操作系统:安装虚拟机。浏览器市场占有率浏览器内核阵营操作系统安装虚拟机...
            0 0 1194
            分享
          • 笔者从自己负责测试的项目出发,讲述下自己做测试管理的一些故事,从流程管理和团队管理两方面,分享下自己做管理过程中的一些心得和思考,供各位参考。流程管理流程简述我们测试的项目是一个APP端类的产品,迭代周期时一个月一个迭代。每个月月初启动迭代,经过两周的开发设计周期,各需求开发实现后,即提交给测试,以需求为单位进入测试周期。整个迭代有约两周的测试时间完成全部需求的测试,进入发布环节,并在当月完成发布。到下一个月,进入下一个迭代。任务拆分我们项目的版本周期是一个月一次迭代,迭代周期较长,每次迭代的任务量也相对比较多。因此,任务就需要进行合理的拆解,分配给不同的小伙伴。在团队管理上,我将团队打散成多...
            1 1 2225
            分享
          •   在日常的测试工作中,不知道大家是否会有梳理自己测试业务的习惯。我个人觉得这个事情是值得做的,最好还可以培养成一个习惯。  一、为什么要梳理业务?  因为在业务测试中,作为测试人员,熟悉负责的业务是非常重要的,而通过阶段性的梳理总结,可以让你的业务知识系统化的沉淀下来。  当被问起这个业务系统的测试重点在哪里?难点如何克服?为什么要这样设计等等问题,可以有条不紊的进行输出。  又或者,当你任务需要交接,或者需要别人支援你的业务,你可以自信的把文档丢过去,拍拍胸脯说:看一遍你就知道了。  同样大家平时都在做业务,同样并没有多少别的技术层的产出,这也是为什么有人能拿A,有人却只能拿C的原因之一。...
            0 0 1094
            分享
          •   前言  年前公司大量裁员,很荣幸拿到了过年大礼包,休息了一个月,年前年后找了一段时间,经历过,手撕代码,上机编写代码,各种各样的笔试题,这里给大家总结一些面试过程的面试题。面试过管理岗位和技术岗位,就只介绍一些技术岗位的面试题吧,过程中编写一些个人理解的结果,大佬勿喷  1、python装饰器是什么?有什么作用?简单举一个例子?  答:python装饰器就是在不改变原函数的情况下项函数增加新的功能,主要对目标函数进行装饰,增加函数的功能。比如日志记录,在某个函数中,增加一些日志记录,方便我们后续调试或者完成一些日志记录。  2、pytest的装饰器有哪些?你用到过那些?  pytest.m...
            0 1 599
            分享
          • 在软件研发中,有一种思想叫TDD,即测试驱动开发,TDD是敏捷方法中的一项核心实践,其原理是在开发功能代码之前,先编写单元测试用例代码,对要编写的函数或类明确测试方法后,再进行设计与编码。本篇不是讲如何来实践TDD,而是利用这种思想来推进项目的进度。大部分人可能都有这样的感受“别人催着自己的工作往前赶,心里贼反感”,“而自己催着别人往前赶,心里只有快感”。在大部分项目都在走敏捷模式的情况下,项目经理已经被弱化,而产品经理更多关注设计、客户,使项目团队经常出现一团散沙的情况。作为下游的测试团队就贼难受,上游的设计、开发掉了链子,如延期,在时间截点已被卡死的情况下,测试团队很难顺利完成项目测试并交...
            0 0 2269
            分享
      • 51testing软件测试圈微信