经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » 人工智能基础 » 查看文章
提升Tesseract-OCR输出的质量
来源:cnblogs  作者:thomaszdxsn  时间:2019/4/1 8:55:34  对本文有异议

https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality

如果你使用Tesseract不能获得理想的输出结果,可能会有很多原因。但是请记住,除非你使用一个非常罕见的字体,或者使用一种没有被训练过的新语言这些情况,重新训练Tesseract不会有多大效果。

图片处理

Tesseract在做真正的OCR之前,内部(使用Leptonica库)先进行了各种图片处理。一般来说,它这些准备工作做的不错,但是不可避免的还是会有不足够的地方,如果图片处理不到位的话识别准确率也不会很高。

你可以在运行Tesseract的时候,设置配置变量tessedit_write_images=true,在输出的日志中可以看到Tesseract是如何处理图片的。如果返回的tessinput.tif文件看起来有问题,那么在OCR之前不妨进行一些手动的图片处理。

修改比例(Rescaling)

如果图片的DPI有300以上,Tesseract可以处理的很棒,所以如果DPI不够,不妨调整比例。

二值化(Binarisation)

binarisation?

也就是说,最好把图片变为黑白图片。Tesseract会在内部做这个事情(使用Otsu算法),但是处理结果可能不是最好的,特别是在背景颜色不算均匀暗色的时候。

如果你不能提供更好的图片,你也可以使用不同的算法。比如ImageAutoThreshold(Java), OpenCV Image Thresholding(Python), scikit-image Thresholding(Python)的文档。

去除噪点(Noise Removal)

noise?

噪点,是图片中那些随机的暗色或者彩色点,这让图片中的文字更加难以阅读。Tesseract的二值化处理步骤没有办法处理一些类型的噪点,这时候会让解析精度骤降。

旋转/偏移校正(Rotation / Deskewing)

skew-linedetection?

歪曲的图片,会导致页面被扫描的时候不是笔直的。如果页面太歪曲,Tesseract的行数分割不会很准确,这也会影响OCR的最终质量。

边界(Borders)

扫描中的边界移除

borders?

被扫描的页面,可能会有一些暗边褶皱。这可能会导致提取一些额外的错误的字符。

缺少边界

如果你想要OCR的文本区域没有边界,Tesseract可能会碰到问题。请看这个帖子,你也可以使用ImageMagick来增加一条边界。

convert 427-1.jpg -bordercolor White -border 10x10 427-1b.jpg

透明度/Alpha通道

一些图片格式(比如png),可能使用Alpha通道来提供透明度特性。

Tesseract3.x希望用户在输入给tesseract之前移除图片的alpha通道。可以使用下面的命令:

convert input.png -alpha off output.png

Tesseract4.00开始,内部使用了leptonica的函数pixRemoveAlpha()来移除alpha通道:通过为alpha部分混入白色背景色来解决。在一些少见的情况下,这个方法可能会导致问题,用户需要手动移除alpha通道。

工具/库

例子

如果你想要知道如何使用程序来提升图片质量,可以看看下面的例子:

页面划分的方法

默认情况下,Tesseract会认为图片是划分好的,会识别整个图片。如果你只要对一个小块区域进行OCR,请使用--psm参数。注意,为文本加入白色的border也有用,请看issue 398.

想要知道Tesseract支持的所有页面分割模式,请使用命令tesseract -h:

  1. 0 Orientation and script detection (OSD) only.
  2. 1 Automatic page segmentation with OSD.
  3. 2 Automatic page segmentation, but no OSD, or OCR.
  4. 3 Fully automatic page segmentation, but no OSD. (Default)
  5. 4 Assume a single column of text of variable sizes.
  6. 5 Assume a single uniform block of vertically aligned text.
  7. 6 Assume a single uniform block of text.
  8. 7 Treat the image as a single text line.
  9. 8 Treat the image as a single word.
  10. 9 Treat the image as a single word in a circle.
  11. 10 Treat the image as a single character.
  12. 11 Sparse text. Find as much text as possible in no particular order.
  13. 12 Sparse text with OSD.
  14. 13 Raw line. Treat the image as a single text line,
  15. bypassing hacks that are Tesseract-specific.

字典,单词列表以及模式

默认情况下,Tesseract被优化为识别单词组成的句子。如果你想要识别一些其它的模式,比如收据,价格列表,或者代码。可以使用一些方法来提高识别率,比如选用合适的文本分割方法。

如果你要识别的文本都不是字典中的单词,禁用Tesseract的字典功能可以提升识别准确率。可以通过同时设定配置load_freq_dawg=false & load_system_dawg=false来禁用字典。

另外,也可以为Tesseract的单词列表加入一些新的词,来帮助提升识别准确率。或者可以加入通用的字符模式,如果你对你的输入模式有了解,这种方式可以大幅提升准确率。更多详情请参考Tesseract手册.

如果你知道,只会碰到语言中的一部分子集,比如只有数字,你可以使用配置tessedit_char_whitelist.

原文链接:http://www.cnblogs.com/thomaszdxsn/p/ti-shengTesseractOCR-shu-chu-de-zhi-liang.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号