提高Tesseract文字识别率的三种方法

前言

有各种原因会导致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白名单配置变量。


相关主题: