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

在数学建模中会遇到对图片中的文字进行识别提取,保存到excel中,以下进行操作:
1、在腾讯云中开通业务,每个月有免费额度,虽然识别也会不准,但还算亲民,具体操作可参考官方文档文字识别 一分钟接入服务端 API-快速入门-文档中心-腾讯云
2、代码接入腾讯云API,进行图片识别

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

文章插图
3、将识别后的文字进行保存 。
在识别后的结果千奇百怪,有元素个数不统一,有识别错误等情况如下图:
【数学建模接入腾讯云识别图片中的文字并保存】
数学建模  接入腾讯云识别图片中的文字并保存

文章插图
为了实现不同信息的正确提取,使用了.join()元素合并,以解决识别后元素个数不统一的情况 。.split()以标志点分割文字,以解决识别出现错误的情况(在这里使用识别率最高的“#”作为标志)具体过程在代码中的备注均有说明,请大家放心食用 。缺少库可自行下载 。
import osimport pandas as pd#以下代码是将【本地图片】进行文字识别# Ningmou#接入腾讯云文字识别(高精度版)作为端口接入#pip install tencentcloud-sdk-pythonfrom tencentcloud.common import credentialfrom tencentcloud.common.profile.client_profile import ClientProfilefrom tencentcloud.common.profile.http_profile import HttpProfilefrom tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKExceptionfrom tencentcloud.ocr.v20181119 import ocr_client, modelsimport base64import jsonimport jsonpathdef get_json(img_path) :try:cred = credential.Credential("", "") #输入密钥httpProfile = HttpProfile()httpProfile.endpoint = "ocr.tencentcloudapi.com"clientProfile = ClientProfile()clientProfile.httpProfile = httpProfileclient = 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()#不知道为何,此步无法完成数据提取,于是在下面又写了一个解析的方法return respexcept 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)