训练Tesseract 3识别燃气表真实图像中的数字

时间:2011-07-18 13:21:23

标签: opencv ocr tesseract

我正在尝试训练tesseract来识别燃气表真实图像中的数字。

我用于训练的图像是用相机拍摄的,因此存在许多问题:由于曝光过度,反射,阴影等原因,图像分辨率低,图像模糊,光线不足或对比度低。 。

对于训练,我创建了一个大图像,其中包含由燃气表图像捕获的一系列数字,我手动编辑文件框以创建.tr文件。结果是,只有更清晰和更清晰的图像的数字被识别,而模糊图像的数字不被tesseract捕获。

4 个答案:

答案 0 :(得分:2)

据我所知,你需要OpenCV来识别数字所在的框,但OpenCV不是OCR的上帝。找到方框后,只需裁剪该部分,进行图像处理,然后将其交给tesseract进行OCR。

我需要OpenCV的帮助,因为我不知道如何在OpenCV中编程。

以下是一些现实世界的例子。

  • 第一张图像是原始图像(弯曲的功率计数字)
  • 第二张图像在GIMP中略微清理图像,在tesseract中约为50%OCR准确度
  • 第三张图片是完全清洁的图像 - 未经任何培训即可识别100%OCR!

first image second image third image

答案 1 :(得分:1)

我会首先尝试这个简单的ImageMagick命令:

 convert          \
    original.jpg  \
   -threshold 50% \
    result.jpg

(使用50%参数稍微玩一下 - 尝试使用越来越小的值......)

对于每个颜色通道,阈值处理基本上只留下2个值,零或最大值。低于阈值的值设置为0,高于它的值设置为255(如果工作在16位深度,则为65535)。

根据您的original.jpg,您可能会有一张OCR,工作,非常高对比度的图像。

答案 2 :(得分:1)

我建议你:

  • 使用工具编辑框,例如jTessBoxEditor,它非常有帮助,让您赢得时间。您可以从here
  • 轻松安装
  • 训练实际情况的字母(嘈杂,模糊)是个好主意。您的训练集仍然有限,您可以添加更多训练样本。
  • 我建议你自己使用Tesseract的API来增强图像(去噪,标准化,锐化......) 例如:Boxa * tesseract::TessBaseAPI::GetConnectedComponents(Pixa** pixa)(它允许你到达每个角色的边界框)

    Pix * pimg = tess_api-> GetThresholdedImage();

Here你找到了一些例子

答案 3 :(得分:1)

Tesseract是一个相当不错的OCR包,但没有正确预处理图像。我的经验是,如果您在将其传递给tesseract之前进行一些预处理,就可以获得良好的OCR结果。

有几个关键指针可以显着提高识别率:

  1. 消除背景噪音。基本上这意味着使用平均自适应阈值处理。我还要确保角色为黑色,背景为白色。
  2. 使用正确的分辨率。如果结果不佳,请向上或向下缩放图像,直到获得良好效果。你想瞄准约。字体大小14 at 300 dpi;在我的软件中处理最有效的发票。
  3. 不要将图像存储为JPEG格式;使用BMP或PNG或其他不会使图像产生噪音的内容。
  4. 如果您只使用一种或两种字体,请尝试使用这些字体训练tesseract。
  5. 对于第4点,如果您知道要使用的字体,有一些比使用Tesseract更好的解决方案,比如直接在图像上匹配这些字体......基本算法是找到数字并将它们与所有可能的字符(只有10个)匹配......但是,实现起来很棘手。