2015-06-30 165 views
4

我对使用tesseract实现更好的识别效果有疑问。我正在使用tesseract识别序列号。序列号仅由一种字体类型字符A-Z,0-9组成,并且以不同的大小和长度出现。通过培训获得更好的识别效果tesseract

目前我能够识别约40%的序列号图像正确。图像通过手机摄像头拍摄。因此图像质量不是最好的。

特殊问题字符是8/B,5/6。由于我只识别序列号,因此我没有使用任何字典改进,并且每个字符都被独立识别。

我的问题是:有人已经获得了更好的识别结果和培训tesseract?需要多少图片才能获得好的效果。

对于培训tesseract应该使用打印和事后拍摄的序列号,还是应该使用原始数字序列号,而不打印和拍摄?

也许有人已经在那种地区体验过。

关于训练tesseract:我已经用一些图像训练了tesseract。因此,我已经打印了不同尺寸的所有字符,拍摄并正确标记了它们。例如字符5

enter image description here

的训练照片这是一个好/坏培训的例子吗?因为我只想识别没有任何依赖性的单个字符,所以我虽然不用言语训练。

实际上,我只用这些图像中的3个对字符B 8 6 5进行了训练,与原始英语(英语)tesseract数据库相比,这不会导致更好的识别。

最好的问候, 克里斯托夫

回答

1

我目前在Sikuli应用程序的工作使用的Tesseract阅读从截图文字(字符串和数字)。我发现实现准确性的最佳方式是在执行OCR之前处理屏幕截图。但是,我正在阅读的大多数文本都是绿色文本 - 黑色背景,因此这是我的首选解决方案。我用内的BufferedImage Scalr's方法来提高图像的尺寸:

BufferedImage bufImg = Scalr.resize(...) 

它立即产生了具有灰色背景上的黑色文本更准确的结果。然后,我在创建新的BufferedImage时分别使用BufferedImage的选项BufferedImage.TYPE_BYTE_GRAYBufferedImage.TYPE_BYTE_BINARY来分别将图像处理为灰度和黑/白。

在处理黑色背景上的绿色文本时,Tesseract的准确率从30%提高到85%左右,而在白色背景下处理普通黑色文本时,精度接近100%。 (有时一个字中的字母被数字误认为hel10)
我希望这有助于!