Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 训练Tesseract 3从煤气表的真实图像中识别数字_Opencv_Ocr_Tesseract - Fatal编程技术网

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

Opencv 训练Tesseract 3从煤气表的真实图像中识别数字,opencv,ocr,tesseract,Opencv,Ocr,Tesseract,我正在训练tesseract从煤气表的真实图像中识别数字 我用于训练的图像是用相机拍摄的,因此存在许多问题:图像分辨率差、图像模糊、照明不良或过度曝光、反射、阴影等导致的对比度低 为了进行培训,我创建了一个大图像,其中包含煤气表图像捕获的一系列数字,并手动编辑文件框以创建.tr文件。结果是,只有更清晰、更清晰图像的数字被识别,而模糊图像的数字不被tesseract捕获 我会先尝试这个简单的ImageMagick命令: convert \ original.jpg \

我正在训练tesseract从煤气表的真实图像中识别数字

我用于训练的图像是用相机拍摄的,因此存在许多问题:图像分辨率差、图像模糊、照明不良或过度曝光、反射、阴影等导致的对比度低


为了进行培训,我创建了一个大图像,其中包含煤气表图像捕获的一系列数字,并手动编辑文件框以创建.tr文件。结果是,只有更清晰、更清晰图像的数字被识别,而模糊图像的数字不被tesseract捕获

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

 convert          \
    original.jpg  \
   -threshold 50% \
    result.jpg
(使用
50%
参数播放一段时间——尝试使用更小和更高的值…)

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


根据您的原创.jpg,您可能会有一个能够进行OCR的、可工作的、对比度非常高的图像。

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

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

这里有几个真实的例子

  • 第一个图像是原始图像(交叉功率表编号)
  • 第二幅图像在GIMP中是经过轻微清理的图像,在tesseract中大约有50%的OCR精度
  • 第三张图像是完全清洁的图像-100%OCR识别,无需任何培训
我建议您:

  • 使用一个工具来编辑框,这样,它是如此的有用,让你赢得一个时间。您可以从中轻松安装它
  • 训练实际情况(嘈杂、模糊)的字母是个好主意。您的训练集仍然有限,您可以添加更多训练样本
  • 我建议您使用Tesseract的API来增强图像(去噪、规格化、锐化…) 例如:
    Boxa*tesseract::TessBaseAPI::GetConnectedComponents(Pixa**Pixa)
    (它允许您访问每个字符的边界框)

    Pix*pimg=tess_api->GetThresholdeImage()


您会发现很少有示例

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

有几个关键点可以显著提高识别率:

  • 去除背景噪音。基本上这意味着使用平均自适应阈值。我还要确保角色是黑色的,背景是白色的
  • 使用正确的分辨率。如果结果不好,请放大或缩小图像,直到获得好结果。您希望在300 dpi时将字体大小定为14左右;在我的软件中,处理发票效果最好
  • 不要将图像存储为JPEG格式;使用BMP或PNG或其他不会使图像产生噪声的东西
  • 如果您只使用一种或两种字体,请尝试在这些字体上训练tesseract

  • 至于第4点,如果您知道将要使用的字体,有一些比使用Tesseract更好的解决方案,比如直接在图像上匹配这些字体。。。基本算法是找到数字并将其与所有可能的字符(只有10个)匹配。。。尽管如此,实现还是很棘手。

    链接中的示例是关于
    getComponentImage
    。您能给我一个如何使用
    GetConnectedComponents
    的示例吗?