1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Tesseract OCR图片提取中文并转换为Excel的示例(附Python代码)

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

时间:2021-10-03 16:28:51

相关推荐

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

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 pdimport pytesseractfrom 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 = pile("\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 += 1return str_listr_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 == "": continues = 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]).Tdf.columns = ["产品编号", "数量"]return dfdataframe = ListToDataframe(str_list)dataframe.to_excel(outfile)dataframe

检查Excel表格:

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

5. 结束语:

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。