C++ 基于tesseract的字符识别

C++ 基于tesseract的字符识别,c++,opencv,image-processing,ocr,tesseract,C++,Opencv,Image Processing,Ocr,Tesseract,我正在尝试与tesseractAPI进行交互,而且我对图像处理还很陌生,最近几天我一直在与之斗争。我尝试过简单的算法,我已经达到了70%左右的准确率 我希望它的准确度是90%。图像的问题是它们的分辨率是72 dpi。我也试图提高分辨率,但没有得到很好的结果,我试图被识别的图像都附加了 任何帮助都将不胜感激,如果我问了一些非常基本的问题,我很抱歉 编辑 我忘了提到,我正在尝试在Linux平台上在2-2.5秒内完成所有处理和识别,而检测此答案中提到的文本的方法需要花费大量时间。另外,我不喜欢使

我正在尝试与
tesseract
API进行交互,而且我对图像处理还很陌生,最近几天我一直在与之斗争。我尝试过简单的算法,我已经达到了70%左右的准确率

我希望它的准确度是90%。图像的问题是它们的分辨率是72 dpi。我也试图提高分辨率,但没有得到很好的结果,我试图被识别的图像都附加了

任何帮助都将不胜感激,如果我问了一些非常基本的问题,我很抱歉

编辑

我忘了提到,我正在尝试在
Linux
平台上在2-2.5秒内完成所有处理和识别,而检测此答案中提到的文本的方法需要花费大量时间。另外,我不喜欢使用命令行解决方案,但我更喜欢
Leptonica
OpenCV

大部分图片都是上传的

我试着用下面的方法对门票进行二值化,但没有成功

车票包含

  • 光线有点不好
  • 非文本区
  • 低分辨率
  • 我尝试将图像直接提供给tesseract API,它在平均1秒内为我提供了70%的良好效果。但我想提高注意时间因素的准确性,我已经尝试过了

  • 检测图像的边缘
  • Blob的Blob分析
  • 使用自适应阈值对票据进行二值化

  • 然后我尝试将这些二值化图像提供给tesseract,虽然二值化图像看起来很完美,但精确度降低到50-60%以下。

    一些可能的改进:

  • 该决议至少应为300 dpi
  • 使照明分布更平均。有几个暗区可能会影响结果
  • 试着把你的角色放大一点。目前它们大小不一,有些字母甚至变形了
  • 通过阈值化和二值化对图像进行预处理

  • 您可以通过自己的编程来完成上述操作,或者可能会有所帮助。

    您可以尝试以下几点:

    • 为了能够提高准确性,您应该提高OCR引擎的图像质量,这意味着。我建议为此进行调查

    • OCR引擎的主要问题是它们不像我们这样擅长识别字符。因此,即使不是文本的东西有时也会被错误地识别为它们是文本。因此,为了防止这种情况发生,最好将这些图像发送到Tesseract,而不是像使用image#2那样发送完整图像

    • 另一种提取图像文本区域的方法是使用to

    • 当您从Tesseract获得结果时,您可以通过对其进行改进


      • 我不确定我的帖子是否对你有用,因为我的答案不是关于Tesseract的。但这是关于高精度的,所以我决定让你们看看付费OCR SDK解决方案是如何工作的

        这是使用ABBYY Cloud OCR SDK识别的结果,无需任何其他设置


        免责声明:我为ABBYY工作。

        您可以尝试使用ScanTailor(它还具有CLI接口)对图像进行二值化、反求和去噪。放大图像可能有助于提高识别率。因为对Tesseract识别配置文件进行了优化,可以在至少300 DPI的情况下工作

        另一种可能是对Tesseract进行字体方面的培训,这是您的材料所特有的(更多信息请参见此处:)


        我不认为查字典会有帮助,因为你大部分都是数字

        不确定你的问题是什么,你有没有任何代码可以解释问题所在?有没有关于分布照明的教程?@Muhammamaaz你可以尝试腐蚀图像,然后放大以模仿白纸,减法可以消除不均匀的效果。有关更多详细信息,请参阅本文:如何检测文本区域?