我对使用tesseract获得更好的识别结果有疑问。我正在使用tesseract来识别序列号。串行麻木只包含一种字体类型,字符A-Z,0-9,并且以不同的大小和长度出现。
目前,我能够识别出大约40%的序列号图像是正确的。图像通过手机摄像头拍摄。因此图像质量不是最好的。
特殊问题字符为8 / B,5/6。由于我只识别序列号,因此我没有使用任何字典改进,并且每个字符都是独立识别的。
我的问题是:是否有人已经通过培训tesseract获得更好的识别结果?需要多少图像才能获得良好的效果。
对于培训tesseract我应该使用打印和后续拍摄的序列号,还是应该使用原始数字序列号,而不打印和拍摄?
也许有人已经在这方面经历过。
关于培训tesseract:我已经用一些图像训练了tesseract。因此,我打印了不同尺寸的所有字符,拍摄并正确标记。角色5的训练照片示例
这是一个好/坏训练的例子吗?因为我只想识别没有任何依赖性的单个字符,我虽然不必使用单词进行训练。
实际上我只训练了其中3个图像用于 B 8 6 5 这些字符,与原始的英语(eng)tesseract数据库相比,这不会得到更好的识别。
最好的问候, 克里斯托弗
答案 0 :(得分:1)
我目前正在使用Tesseract从Sikuli应用程序中读取屏幕截图中的文本(字符串和数字)。我发现实现准确性的最佳方法是在对其执行OCR之前处理屏幕截图。但是,我正在阅读的大部分文字都是绿色文字 - 黑色背景,这是我的首选解决方案。我在BufferedImage中使用了Scalr's方法来增加图像的大小:
BufferedImage bufImg = Scalr.resize(...)
立即在灰色背景上使用黑色文字产生更准确的结果。然后我在创建新的BufferedImage时使用了BufferedImage的选项BufferedImage.TYPE_BYTE_GRAY
和BufferedImage.TYPE_BYTE_BINARY
,分别将图像处理为灰度和黑/白。
按照这些步骤,在黑色背景上处理绿色文本时,Tesseract的准确度从30%提高到85%左右,在白色背景上处理正常的黑色文本时,准确率接近100%。 (有时单词中的字母会被数字弄错,即hel10) 我希望这有帮助!