提高Tesseract文字识别率的三种方法
前言
有各种原因会导致Tesseract文字识别率不高。这里介绍了一些基本操作,能够帮助你显著提高识别精度。
但是如果你要识别的图像是一个并不常用的字体,或者是一个新的语言,那么就必须要训练才行。
方法一 图像预处理
Tesseract在执行OCR之前已经在内部先进行了各种图像处理操作(使用Leptonica库)。通常情况下,这样操作就已经足够了,但是OCR的识别场景复杂,不可避免的会碰到识别准确度不够的情况。
那么你可以试试以下这些办法:
缩放 Rescaling
Tesseract最适合DPI至少为300DPI的图像,因此调整图像的大小可能是有帮助的。
二值化Binarisation
具体可以参考图像处理工具ImageMagick - 灰度化和二值化
去噪 Noise Removal
噪声是图像中亮度或颜色的随机变化,会使图像的文本更难以识别。在二值化步骤中,Tesseract无法去除某些类型的噪声,这会导致准确率下降。
可以参考ImageMagick给图像去噪来给图像进行去噪处理。
偏移校正 Rotation / Deskewing
如果页面过于倾斜,Tesseract的行分割质量会显著降低,严重影响OCR的质量。为了解决这个问题,旋转页面图像使文本行是水平的。
边框处理 Borders
扫描的页面通常有黑色的边框,这些字符可能作为额外的字符被错误地提取出来。这些可以通过程序或者软件来做,非常简单
经过软件处理后:
如果您的OCR只是文本区域没有任何边框,tesseract可能会有问题。你可以通过如下命令,来增加10x10像素的白色边框:
convert 427-1.jpg -bordercolor White -border 10x10 427-1b.jpg
透明与Alpha通道 Transparency / Alpha channel
阿尔法通道)是指一张图片的透明和半透明度。
举例来说一个使用每个像素16比特存储的位图,对于图形中的每一个像素而言,可能以5个比特表示红色,5个比特表示绿色,5个比特表示蓝色,最后一个比特是阿尔法。在这种情况下,它要么表示透明要么不是,因为阿尔法比特只有0或1两种不同表示的可能性。
当使用32个比特存储的位图,每8个比特表示红绿蓝,和阿尔法通道。在这种情况下,就不光可以表示透明还是不透明,阿尔法通道还可以表示256级的半透明度,因为阿尔法通道有8个比特可以有256种不同的数据表示可能性。
Tesseract期望在处理图像之前从图像中删除alpha通道。这可以通过ImageMagick命令来实现
convert input.png -alpha off output.png
方法二 页面分割
默认情况下,Tesseract在分割图像时需要一页文本。如果你只是试图OCR一个小区域尝试不同的分割模式,使用-psm参数。
0 Orientation and script detection (OSD) only.
1 Automatic page segmentation with OSD.
2 Automatic page segmentation, but no OSD, or OCR.
3 Fully automatic page segmentation, but no OSD. (Default)
4 Assume a single column of text of variable sizes.
5 Assume a single uniform block of vertically aligned text.
6 Assume a single uniform block of text.
7 Treat the image as a single text line.
8 Treat the image as a single word.
9 Treat the image as a single word in a circle.
10 Treat the image as a single character.
11 Sparse text. Find as much text as possible in no particular order.
12 Sparse text with OSD.
13 Raw line. Treat the image as a single text line, bypassing hacks that are Tesseract-specific.
方法三 字典、单词列表和模式
默认情况下,Tesseract被优化为能够识别句子中的单词中。如果您试图识别其他东西,比如收据、价目表或代码,那么会有些困难。
如果您的大部分文本不是字典中的单词,那么禁用Tesseract使用的字典可以提高一定的识别能力。
当然Tesseract还可以将单词添加到帮助识别的单词列表中,或者添加常见的字符模式。
如果您知道您只会遇到某一些字符,比如只有数字,那么您可以使用tessedit char白名单配置变量。