接入腾讯云识别图片中的文字并保存(数学建模)

在数学建模中会遇到对图片中的文字进行识别提取,保存到excel中,以下进行操作:

1、在腾讯云中开通业务,每个月有免费额度,虽然识别也会不准,但还算亲民,具体操作可参考官方文档文字识别 一分钟接入服务端 API-快速入门-文档中心-腾讯云

2、代码接入腾讯云API,进行图片识别

3、将识别后的文字进行保存。

在识别后的结果千奇百怪,有元素个数不统一,有识别错误等情况如下图:

 

 

为了实现不同信息的正确提取,使用了.join()元素合并,以解决识别后元素个数不统一的情况。.split()以标志点分割文字,以解决识别出现错误的情况(在这里使用识别率最高的“#”作为标志)具体过程在代码中的备注均有说明,请大家放心食用。缺少库可自行下载。

import os
import pandas as pd
#以下代码是将【本地图片】进行文字识别
# Ningmou

#接入腾讯云文字识别(高精度版)作为端口接入
#pip install tencentcloud-sdk-python
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
import base64
import json
import jsonpath
def get_json(img_path) :
    try:
        cred = credential.Credential("", "") #输入密钥
        httpProfile = HttpProfile()
        httpProfile.endpoint = "ocr.tencentcloudapi.com"

        clientProfile = ClientProfile()
        clientProfile.httpProfile = httpProfile
        client = ocr_client.OcrClient(cred, "", clientProfile) #服务器地址

        req = models.GeneralAccurateOCRRequest()
        #对本地图片进行base64转码【本地图片解析需要先转成base64编码】
        with open(img_path, 'rb') as f:
            base64_data = base64.b64encode(f.read())
            s = base64_data.decode()
            ImageBase64_value = 'data:image/jpeg;base64,%s'%s
            #params是字符串,以下进行拼接
            params = '{"ImageBase64":"' + ImageBase64_value + '"}' #以图片Base64编码发送请求
        req.from_json_string(params)

        resp = client.GeneralAccurateOCR(req)

        resp = resp.to_json_string()        #<class 'str'>不知道为何,此步无法完成数据提取,于是在下面又写了一个解析的方法

        return resp
    except TencentCloudSDKException as err:
        print(err)

def parse_json(resp):  #解析
    with open('text.txt','w',encoding='utf-8') as f:  #先写入txt中
        f.write(resp)
    with open('text.txt','r',encoding='utf-8') as f:  #然后再读
        str = f.read()
    str = json.loads(str)                              #json.loads:将JSON字符串解码为 Python 对象;json.dumps:将 Python 对象编码成 JSON 字符串
    DetectedText = jsonpath.jsonpath(str, "$..DetectedText")  #解析:通过找到DetectedText获得对应的值
    return DetectedText
    #print(len(DetectedText))



#指明图片所在文件夹
images = r'E:\mycode\tupian'

#遍历所有图片并识别文字,切片提取有效信息
data1 = [] #设置空列表,储存数据
str = '' #用于合并元素
for img_path in os.listdir(images):  #os用于连接系统上的文件
# DetectedText 是识别后得到的结果
    resp = "".join(get_json(f'{images}/{img_path}'))
    DetectedText1 = parse_json(resp)  #腾讯云识别的文字拆分成几个元素
    DetectedText = str.join(DetectedText1)  #将每个元素合并成一个元素
    shijian = DetectedText[0:5]  #将每个元素的前5个字符提取作为时间
    wendu = DetectedText.split('#', 2)   #以元素中“#”作为标志切开,形成3个元素
    yisi = wendu[1][:-1]  #提取1#温度
    ersi = wendu[-1][-5:]  #提取2#温度
    data1.append([shijian, yisi, ersi])  #将提取的数据放入data1中

    # 输出结果
    print(wendu)

##保存数据

#新建文件夹保存
df = pd.DataFrame(data1)
print(f"识别结果如下:")
print(df)
df.to_excel("附件2.xlsx", index=False)

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值