python读取图片转存excel

2022-03-25 15:26:21热度:90°C

在日常工作中,经常遇到一些表格是图片格式的,那怎么把图片中的表格数据提取出来,放在excel文件中呢?如果数据量比较少,手动抄录是没有问题的,当数据量比较多的时候,就非常耗时了,而且容易出错。

网上搜了一下,有一些提供读图片转存excel的工具或者,但是生成的excel文件格式有点乱,比如一行变成多行之类的。

还有一些平台提供了这种功能的api,比如阿里云,腾讯云,输入一张图片就会输出一些表格数据。下面以腾讯云的api接口进行说明。

接口申请

首先在腾讯云注册账号,开通通用文字识别服务,如下图所示:文字识别服务打开。文字识别服务每个月可以免费调用1000次,超过次数后开始收费。如下图所示:自动转入后付费关掉后,超过次数就不会收费了,当然也就无法使用api了。

开通服务后,还需要申请访问api的秘钥,申请好以后如下图所示。

sdk包安装

主要安装腾讯云提供的组件包:tencentcloud_sdk_python,本文使用离线包的形式安装,下载后是个whl文件,使用pip install即可安装。如果缺少其他包,请自行安装。

pip install tencentcloud_sdk_python-3.0.531-py2.py3-none-any.whl

实现方法

配置文件config.yml

#coding=utf-8secret_id: AKID3vXswjGWVDeohJfkY5LK2ScU5PSEivrXsecret_key: SdXCclcxxxx

源代码imgToExcel.py

#coding=utf-8import sysimport ocrimport yamldef get_yaml_data(yaml_file):# 打开yaml文件file = open(yaml_file, r, encoding="utf-8")file_data = file.read()file.close()# 将字符串转化为字典或列表data = yaml.load(file_data, Loader=yaml.FullLoader)return datadef imageToExcel(pic_path):config = get_yaml_data("config.yml")#使用ocr进行转换trans = ocr.OCR()path_excel = trans.img_to_excel(pic_path,image_path=pic_path,secret_id=config[secret_id],secret_key=config[secret_key])if __name___ == __main__:pic_path = sys.argv[1]imageToExcel(pic_path)

源代码ocr.py

参考官方api示例:?Product=ocr&Version=2018-11-19&Action=RecognizeTableOCR&SignVersion=

#coding=utf-8from tencentcloud.common import credentialfrom tencentcloud.common.profile.client_profile import ClientProfilefrom tencentcloud.common.profile.http_profile import HttpProfilefrom tencentcloud.ocr.v import ocr_client, modelsimport base64#OCR识别封装class OCR(object):def img_to_excel(self, output_file_name, image_path, secret_id, secret_key):# 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKeycred = credential.Credential(secret_id,secret_key)# 实例化client对象httpProfile = HttpProfile()httpProfile.endpoint = "ocr.tencentcloudapi.com"clientProfile = ClientProfile()clientProfile.httpProfile = httpProfileclientProfile.signMethod = "TC3-HMAC-SHA256"client = ocr_client.OcrClient(cred, "ap-shanghai", clientProfile)# 实例化一个请求对象#req = models.GeneralFastOCRRequest()req = models.GeneralFastOCRRequest()# 读取图片数据,使用Base64编码with open(image_path, rb) as f:image = f.read()image_base64 = str(base64.b64encode(image), encoding=utf-8)req.ImageBase64 = image_base64# 通过client对象调用访问接口,传入请求对象resp = client.RecognizeTableOCR(req)# 获取返回数据(Data为Base64编码后的Excel数据)data = resp.Data# 转换为Exceloutput_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

效果展示

来自本人原创首发地址:

相关文章