如何提高Tesseract结果质量?

时间:2018-08-17 13:59:53

标签: ios swift tesseract

我正在尝试使用Tesseract的OCR从法国重要卡中读取NIRPP号码(社会安全号码)(我正在使用TesseractOCRiOS 4.0.0)。所以这就是我在做什么:

首先,我要求提供一张整张卡片的照片:

enter image description here

然后,我使用自定义裁剪器,要求用户专门放大卡号:

enter image description here

然后我捕获到此图像( 1291 x 202 px),然后使用Tesseract尝试读取数字:

let tesseract = G8Tesseract(language: "eng")
tesseract?.image = pickedImage
tesseract?.recognize()
print("\(tesseract?.recognizedText ?? "")")

但是我得到的结果非常糟糕……仅在30%的时间内Tesseract能够找到正确的数字,在这些情况下,有时我需要修剪一些字符(例如字母,点,破折号。) )。

那么我有解决方案来改善这些结果吗?

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

要改善您的结果:

  • 将图像缩放到适当的水平。适当的缩放比例将大大提高您的准确性。
  • 配置tesseract,以便仅将数字列入白名单。我是 假设您要提取的内容仅包含数字。 您只将数字列入白名单,这将增加您的机会 识别0为0而不是O字符。
  • 如果提取的文本与正则表达式匹配,则应配置 tesseract也要使用该正则表达式。

  • 预处理图像以去除背景色并应用 诸如腐蚀之类的形态效应会增加您之间的空间 字符/数字。如果它们太近,则tesseract将具有 很难正确识别它们。大部分图像处理 库带有这些效果。

  • 使用tiff作为图像格式。

一旦您拥有针对tesseract的正确的预处理管道和配置,通常将获得非常好的且一致的结果。

答案 1 :(得分:0)

您需要做几件事。...

1。您需要在图像上应用黑白或灰度。 您将使用默认功能(例如图形框架)或第三方库(例如openCV或GPUImage)来应用黑白或灰度。

2。然后使用Vision框架应用文本检测。 通过视觉文本检测,您可以根据视觉文本检测到的坐标裁剪文本。 3.将此裁剪后的图像(检测到文本)传递到TesseractOCRiOS ...

我希望它适用于您的用例。

谢谢

答案 2 :(得分:0)

我有一个类似的问题。我发现Tesseract仅在给定图像包含感兴趣区域的情况下才能识别文本。 我使用Apple' Vision framework解决了问题。它具有VNDetectTextRectanglesRequest,可根据图像返回CGRect的检测到的文本。然后,您可以将图像裁剪到存在文本的区域,然后将其发送到Tesseract进行检测。

Ray Smith说:

  

由于HP具有独立开发的产品使用的页面布局分析技术,因此Tesseract从未需要自己的页面布局分析。因此,Tesseract假定其输入是已定义可选多边形文本区域的二进制图像。

Vision-Tesserat