Tesseract OCR图片提取中文并转换为Excel的示例(附Python代码) 您所在的位置:网站首页 文字转换为7行4列的表格 Tesseract OCR图片提取中文并转换为Excel的示例(附Python代码)

Tesseract OCR图片提取中文并转换为Excel的示例(附Python代码)

2023-11-27 04:25| 来源: 网络整理| 查看: 265

1、背景描述:

日常工作会遇到这样的问题,工作群中收到以截图方式转发的表格或文字信息,需要将其中大量的数据、文字等信息从图片中摘取下来,并以Excel表格的方式进行存储和统计处理。

2、流程简述: 识别图片中的信息(文字和数据) 应用pytesseract识别图片中的文字(英文、中文)和数据并转换为字符串按需求提取关键信息 应用正则表达式提取有用的关键信息(文字和数据):如日期、地点、电话号码、数量等整理为数据表格(DataFrame),并保存至Excel表格中 整理提取的信息,合并为数据表格,并且写入和保存至Excel表格中 3. 测试环境的准备:

安装好pytesseract库和Pillow库 pytesseract库:pip install pytesseract – 用于将图片中的文字、数据的识别并转换为字符串 Pillow库:pip install pillow – 用于将输入的图片文件转换为image

下载tesseract-ocr的应用程序并安装好 注意:请记录好安装地址,将用于更改系统配置和保存用于中文识别的数据文件 Tessoract_OCR的下载地址:https://digi.bib.uni-mannheim.de/tesseract/ 在这里插入图片描述 我的Tesseract-OCR安装路径为:C:\Program Files (x86)\Tesseract-OCR

下载用于中文识别的中文字库文件并且将它们拷贝到Tesseract-OCR中的"tessdata"文件夹中: 如下图所示,tessdata文件夹路径为:C:\Program Files (x86)\Tesseract-OCR\tessdata 在这里插入图片描述 中文字库文件的下载地址: https://tesseract-ocr.github.io/tessdoc/Data-Files 在这里插入图片描述 chi_sim – 中文简体; chi_tra – 中文繁体

配置系统变量(2个操作步骤) 步骤一:环境变量中的修改(path): 增加 C:\Program Files (x86)\Tesseract-OCR, 如下图所示 在这里插入图片描述

步骤二:因为需要使用中文辨识,需要配置系统变量:TESSDATA_PREFIX, 如下图所示 TESSDATA_PREFIX变量设置为:C:\Program Files (x86)\Tesseract-OCR\tessdata 在这里插入图片描述

修改相关文件路径(2个步骤) 步骤一:路径的寻找:anaconda–>lib–>site-packages–>pytesseract 下的pytesserac.py文件: 在这里插入图片描述

步骤二:文件的修改: 将tesseract_cmd = ‘tesseract.exe’ 修改为:tesseract_cmd = ‘C:/Program Files (x86)/Tesseract-OCR/tesseract.exe’ 在这里插入图片描述 温馨提醒:环境准备的步骤比较复杂繁琐,但是在测试前必须要一一完成,否则系统会一直报错!!

4、示例演示(Python代码)

准备导入的测试图片为: 在这里插入图片描述

4.1 识别图片中的信息(文字和数据) # 4.1 导入图片文件,转换为image,识别其中的 import pandas as pd import pytesseract from PIL import Image # 设定好输入图片和输出表格文件的地址 infile = r"D:\1.png" outfile = r"D:\result.xlsx" # 将导入的图片转换为image, image = Image.open(infile) # lang="chi_sim"是指使用中文数据来识别图片中的中文信息 result = pytesseract.image_to_string (image, lang='chi_sim') result

在这里插入图片描述

小结:上述结果可以观察到:中文、英文字母和数字的辨析准确率还不错,有错误:“粑体1008”, 正确的信息是"粉体Y1008";另外,中文字体之间,中文字体与英文字母之间,以及文字信息与数据之间都是是空格的,因此在后面的信息截断时需要避开这些空格来截取信息。

4.2 根据需求提取关键信息

需求:提取产品的名称编号和对应的数量

# 4.2 提取图片中的产品名称编号和对应的数量 # 建立函数StringToList:将从图上读取的字符串信息(Str)整里为列表信息(List) def StringToList(result): result = result.strip() # 由于中文字体之间、中文字体与英文字母之间,以及文字信息与数字之间都是空格, # 因此使用"," 作为每行数据信息的截断标识(一般情况是直接使用空格符" "来截断) pattern = re.compile("\n") line = pattern.sub(",", result) line += "," str_li = [] str0 = "" for i in range(len(line)): if line[i] == ",": str_li.append(str0) str0 = "" else: str0 += line[i] i += 1 return str_li str_list = StringToList(result) str_list

在这里插入图片描述

4.3 整理为数据表格(DataFrame),并保存至Excel表格中

由于列表中的元素中含有很多空格,因此不能直接使用空格来提取信息;观察到文字信息与数量之间是由空格的,因此从字段的右边开始,直接截取数字

# 4.3 提取文字信息及数据并整理为DataFrame数据表 # 建立信息提取及转换函数 def ListToDataframe(str_list): code, qty = [], [] # 文字信息与数量之间是由空格的,因此从字段的右边开始截取数字 for s in str_list: if s == "": continue s = s[::-1] # 考虑到字段中存在很多空格,因此设置split()的参数maxsplit=1 # 即:只是对于第一个空格进行截取 s = s.split(" ", maxsplit=1) ser2, ser1 = s[0], s[1] ser1 = ser1[::-1] ser2 = ser2[::-1] code.append(ser1) qty.append(ser2) df = pd.DataFrame([code, qty]).T df.columns = ["产品编号", "数量"] return df dataframe = ListToDataframe(str_list) dataframe.to_excel(outfile) dataframe

在这里插入图片描述 检查Excel表格: 在这里插入图片描述 小结:成功将数据提取并转换为Excel表格,遗憾的是,数据在转换过程中存在一些错误,辨识的准确率需要进一步提高,当前还需要人工的检查和修正。

5. 结束语:

使用pytesseract库对信息和数据进行提取,多次测试的结果发现,对于同一张图片的提取结果不会都一样,测试结果显示:信息提取的准确性与图片的清晰度、大小、填充颜色等因素有一定的相关性,当然也受限于执行中使用的chi-sim文件的数据质量。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有