tesseract-OCR 注意事项

一:设置白名单:让tesseract-OCR只识别指定内容


有时我们需要用tesseract-ocr只识别指定类型的数据,如:仅识别英文字母或数字。此时可设置白名单,让tesseract-ocr只输出我们需要的结果。
1.打开tesseract-ocr安装路径下的tessdata/configs/digits文件,可以看到里面有一个tessedit_char_whitelist,将其设置成我们需要得到的识别结果。
如:tessedit_char_whitelist ABCD
2.在调用命令时,需要加上我们设置的文件名:tesseract xxx.png outfilename -psm 6 digits
注:
tesseract提供了OCR引擎模式。有如下四种
0 =仅限原始Tesseract
1 =只有神经网络LSTM
2 =Tesseract + LSTM
3 =基于可用的默认值
目前LSTM是无法支持白名单的

我们需要选择第0种模式,指令如下:

tesseract --oem 0 1.png outfileName digits
注意:使用第0种模式会降低识别准确率
 

二。下载地址:

https://digi.bib.uni-mannheim.de/tesseract/

三。中文包问题

安装过程选择安装中文包失败,并且有些网址失败,需要下面地址和方式下载(不能用迅雷)。下载后chi_sim.traineddata放到安装目录C:\Program Files\Tesseract-OCR\tessdata 下

下载地址:https://github.com/tesseract-ocr/tessdata/blob/master/chi_sim.traineddata

四。命令行介绍 

tesseract test.jpg test.txt -l chi_sim+eng -psm 7 --oem 1 

-l chi_sim+eng 指定中文字库和英文字库

-psm 7 表示告诉tesseract code.jpg图片是一行文本这个参数可以减少识别错误率. 默认为 3。自己测试好像是一样的

             默认的tesseract将一个图片当成一个文档来看。如果只需要指定的区域可以使用不同的分割模式,使用psm参数

            参考:https://blog.csdn.net/claroja/article/details/82992643

--oem 1 --oem 后面的参数 1代表用lstm引擎识别, 0表示用传统引擎识别

configfile 参数值为tessdata\configs 和 tessdata\tessconfigs 目录下的文件名.

通过这些操作可以将很大的提高识别的准确率,但是由于识别引擎自身限制,对中文识别并不友好,识别率依然没有达到我所需要的程度.
接下来要做的:
1.通过对已有的图片进行训练,但官方给的LSTM模式训练的操作还没有吃透,传统方式训练对识别率提高不大
2.尝试理解其内部的原理,并尝试加入自己理解(好像不大可能毕竟别人花了10年才写出来 笑哭)问题还有就是在于并没有多少资料,只有没有多少注释的源码,预计会花费很多的时间

五。python 调用方式

快速开始

  1. try:

  2. import Image

  3. except ImportError:

  4. from PIL import Image

  5. import pytesseract

  6. #如果PATH中没有tesseract可执行文件,请包含以下内容:

  7. pytesseract.pytesseract.tesseract_cmd = r'<full_path_to_your_tesseract_executable>'

  8. #示例tesseract_cmd = r'C:\ Program Files(x86)\ Tesseract-OCR \ tesseract'

  9. #简单的图像串

  10. print(pytesseract.image_to_string(Image.open('test.png')))

  11. #法语文本图像串

  12. print(pytesseract.image_to_string(Image.open('test-european.jpg'), lang='fra'))

  13. #获取包围盒估计

  14. print(pytesseract.image_to_boxes(Image.open('test.png')))

  15. #获取详细的数据,包括盒,置信线和页码

  16. print(pytesseract.image_to_data(Image.open('test.png')))

  17. #获取有关方向和脚本检测信息

  18. print(pytesseract.image_to_osd(Image.open('test.png'))

  19. #为了绕过内部图像的转换,只需用相对或绝对图像路径

  20. #注:如果你不使用支持的图像,正方体将返回错误

  21. print(pytesseract.image_to_string('test.png'))

支持OpenCV image / NumPy数组对象

  1. import cv2

  2. img = cv2.imread(r'/<path_to_image>/digits.png')

  3. print(pytesseract.image_to_string(img))

  4. #或显式转换预先

  5. print(pytesseract.image_to_string(Image.fromarray(img))

如果您有tessdata错误,请添加以下配置:“打开数据文件时出错......”

  1. tessdata_dir_config = r ' - tessdata-dir“<replace_with_your_tessdata_dir_path>”'

  2. #示例config:r' - tessdata-dir“C:\ Program Files(x86)\ Tesseract-OCR \ tessdata”'

  3. #添加双引号很重要在dir路径附近。

  4. pytesseract.image_to_string(image, lang='chi_sim', config=tessdata_dir_config)

功能

  • get_tesseract_version返回系统中安装的Tesseract版本。
  • image_to_string将图像上的Tesseract OCR运行结果返回到字符串
  • image_to_boxes返回包含已识别字符及其框边界的结果
  • image_to_data返回包含框边界,置信度和其他信息的结果。需要Tesseract 3.05+。有关更多信息,请查看Tesseract TSV文档
  • image_to_osd返回包含有关方向和脚本检测的信息的结果。

参数

image_to_data(image,lang = None,config ='', nice = 0,output_type = Output.STRING)

  • image Object,PIL Image /由Tesseract处理的图像的NumPy数组
  • lang String,Tesseract语言代码字符串
  • config String,任何其他配置为字符串,例如:config =' - psm 6'
  • nice Integer,修改Tesseract运行的处理器优先级。Windows不支持。尼斯调整了类似unix的流程的优点。
  • output_type Class属性,指定输出的类型,默认为string。有关所有支持类型的完整列表,请检查pytesseract.Output类的定义。

六。4.0 新功能引擎-Lstm深度学习的识别引擎

Tesseract4.0后支持双识别引擎:Lstm深度学习的识别引擎+传统引擎。这样能够使得未训练情况下也能得到较高的识别度

七。把网页上采集的图片不存到本地直接在内存中识别

使用image = BytesIO(response.content)转换为流数据

八。解决tesseract不识别最左侧字符的问题及指定白名单

参数中加上config="--psm 6 --oem 3 -c tessedit_char_whitelist=0123456789"

九。-psm的说明

在网上找到了0-10项的中文说明(另外几项没找到...),如下:
0:定向脚本监测(OSD) 
1: 使用OSD自动分页 
2 :自动分页,但是不使用OSD或OCR(Optical Character Recognition,光学字符识别) 
3 :全自动分页,但是没有使用OSD(默认) 
4 :假设可变大小的一个文本列。 
5 :假设垂直对齐文本的单个统一块。 
6 :假设一个统一的文本块。 
7 :将图像视为单个文本行。 
8 :将图像视为单个词。 
9 :将图像视为圆中的单个词。 
10 :将图像视为单个字符。

十。训练注意事项

tesseract OCR训练新字体对图片的预处理和要求

同tesseract OCR识别对图片有要求一样,在训练新的字符集或新的字体时,对图片也有一定要求,符合要求的图片,能大大提高训练的效率。

在图像处理方面,去除噪声,使训练的字符图片尽量连贯、清晰。

其他方面,通常的要求如下:

1. 在一幅图片内,字体统一,决不能将多种字体混合出现在一幅训练图片内;如果不是通过扫描文本获取的字符图片,这个条件很容易被忽视。

2.  理想条件下,同种字体的字符图片集中到一幅大的训练图片中,在同一页内;

3. 要保留一定的字符间距与行间距;

4. 字符高度(大小),只要满足高度最小条件即可,对于小写字符x,其高度要至少大于10个像素;

5. 对于非字母字符,如!@#$%^&(),.{}<>/?,不要集中在一起出现,原因是这样不利于tesseract找出 文本行基线baseline,不利于文本高度及大小的检测,baseline检测是tesseract engine的第一步;

6. 一般每个字符需要10个样本,高频常见字符至少20个样本,不常见字符需要5个样本;

7. 对于同种字体,多页训练图片,可以在训练中,件用相同的方式合并tr文件和box文件,两类文件内的字符次序要相同,利于提高训练效果。

在获取训练字符图片方面,不一定非要从待识别图片中收集,可以利用word字符集找到对应字体,打印,扫描,获取训练图片,简单、方便。这个根据实际情况来应用。

十一 设置黑白名单

设置字符白名单(只有大小写字母):

# tesseract c.png out -psm 7 -c tessedit_char_whitelist='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
设置字符黑名单(不含数字):

# tesseract c.png out -psm 7 -c tessedit_char_blacklist='0123456789'

 

 

 

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tesseract-OCR是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,可以用于将图像中的文字转换为可编辑的文本。下面是安装Tesseract-OCR的步骤: 1. 首先,你需要下载并安装Tesseract-OCR引擎。你可以从Tesseract的官方GitHub页面(https://github.com/tesseract-ocr/tesseract)上找到最新的版本。根据你的操作系统,选择相应的安装包进行下载。 2. 安装完成后,将Tesseract-OCR添加到系统的环境变量中。这样你就可以在任何位置使用Tesseract命令。 3. 接下来,你需要下载训练数据文件(语言数据)。Tesseract支持多种语言,你可以从Tesseract的官方GitHub页面上找到相应的语言数据文件。下载完成后,将其放置在合适的位置。 4. 现在,你可以在命令行中使用Tesseract命令来进行OCR识别了。例如,你可以使用以下命令来识别一张图片中的文字: ``` tesseract image.png output -l eng ``` 这个命令将会将名为image.png的图片中的文字识别并保存到名为output.txt的文本文件中。`-l eng`参数指定了使用英语语言进行识别。 5. 如果你想在编程中使用Tesseract-OCR,可以选择适合你编程语言的Tesseract库或API。Tesseract提供了多种语言的接口,如Python、Java、C++等。你可以在Tesseract的官方文档中找到相应的使用方法和示例代码。 希望以上信息对你有所帮助!如果你还有其他问题,请继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值