无法识别Tesseract中的数字 - android

时间:2012-04-17 08:56:26

标签: android ocr tesseract

我希望有人能告诉我为什么我的Tesseract无法识别带有数字的图像,如果有什么我可以做的事情。 一切都按照测试工作,因为它只是我需要的数字,我以为我可以用英语模式管理,直到我不得不从7分段显示开始。

虽然我对附加的图像有很多麻烦,但我想知道我是否应该开始使用我自己的识别算法,或者我是否可以为Tesseract做自己的数据集然后它会起作用,是否有人知道Tesseract的局限在哪里?

尝试的事情: 试图将psm设置为one_line,one_word,one_char(并切断图片)。 使用one_line和one_word没有重大变化。 使用one_char它确实识别得更好一些,但有时候,由于间距较大,它会附加一个额外的数字,然后将其搞砸,如果你查看附加的图像zero.jpg,那么它就会产生04。 我自己也试图进行二值化,这导致了较差的识别并且非常耗费资源。 我试图反转图片,这对于tesseract没有任何区别。

我附上了我需要的照片以供处理。

关于图像的解释:

decodethisimage_seven是tesseract无法识别的图像,尽管它是为了方便在工作图像周围构建应用程序而用文字制作的。

decodethisimage_eight是与image_seven匹配的真实图像。但它无法识别这一点。

decodethisimage_four2是我想要识别的另一个图像,是的,我知道它不能被提取,并且在测试时我做了unskrew(想想skrew是这里的术语==“直接”)。 / p>

3 个答案:

答案 0 :(得分:2)

我知道一些可能对您有所帮助的选项:

  1. 在图像边框和文本之间添加额外空间。如果图像中的文字位于边缘,Tesseract会很糟糕。
  2. 复制您的图片。例如,如果您对单词'foobar'执行OCR,请克隆图像并将'foobar foobar foobar foobar foobar'发送到tesseract,结果会更好。
  3. Google为font trainingimage binarization for tesseract。
  4. 请记住,移动设备中的内置摄像头主要产生低质量图像(模糊,噪声,偏斜等).OCR本身是一个资源消耗过程,如果你添加一个有价值的图像预处理,低端和中型移动设备(可能有Android)可能会出现意外缓慢的性能甚至缺乏资源。这对于免费/学习项目是可以的,但如果您正在计划商业应用程序 - 请考虑使用更好的SDK。

    详细了解此问题:OCR for android

答案 1 :(得分:2)

Tesseract不会为您做分段。 Tesseract将在实际的tesseract算法之前对图像进行阈值处理。在阈值处理后,可能会有一些边缘,人工制品留在图像中。

尝试手动将图像修改为黑白颜色,并查看tesseract作为输出返回的内容。

尝试阈值(自动)您的图像并查看tesseract作为输出返回的内容。阈值处理的输出可能太糟糕,导致tesseract输出不良。

您的第4张图片可能因阈值处理而失败(您有3种颜色:黑色背景,灰色背景和白色字母),阈值可能介于(黑色背景,灰色背景)之间。

一般来说,Tesseract想要漂亮的黑白图像。可能需要预处理图像以获得更好的结果。

对于您的第一张图片(结果为“04”),尝试查看框结果(字符+包含已识别字符的框的坐标)。 “0”可能是一个小的人工制品 - 就像一个4乘4的像素。

答案 2 :(得分:1)

你可以试试javaocr(http://sourceforge.net/projects/javaocr/,是的,我是开发人员)

虽然Therre不是非官方版本,你必须寻找资源(好消息:有工作的Android样本,包括采样器,离线训练器和识别器应用程序)

如果你只有一种字体,你可以用它获得相当不错的效果(我达到相同字体数字的识别率99.96)

PS:它是纯java并使用不变矩来执行匹配(因此缩放和旋转没有问题)。还有非常有效的双重化。

看到它的实际效果:

https://play.google.com/store/apps/details?id=de.pribluda.android.ocrcall&feature=search_result#?t=W251bGwsMSwxLDEsImRlLnByaWJsdWRhLmFuZHJvaWQub2NyY2FsbCJd