Opencv 训练Tesseract 3从煤气表的真实图像中识别数字
我正在训练tesseract从煤气表的真实图像中识别数字 我用于训练的图像是用相机拍摄的,因此存在许多问题:图像分辨率差、图像模糊、照明不良或过度曝光、反射、阴影等导致的对比度低Opencv 训练Tesseract 3从煤气表的真实图像中识别数字,opencv,ocr,tesseract,Opencv,Ocr,Tesseract,我正在训练tesseract从煤气表的真实图像中识别数字 我用于训练的图像是用相机拍摄的,因此存在许多问题:图像分辨率差、图像模糊、照明不良或过度曝光、反射、阴影等导致的对比度低 为了进行培训,我创建了一个大图像,其中包含煤气表图像捕获的一系列数字,并手动编辑文件框以创建.tr文件。结果是,只有更清晰、更清晰图像的数字被识别,而模糊图像的数字不被tesseract捕获 我会先尝试这个简单的ImageMagick命令: convert \ original.jpg \
为了进行培训,我创建了一个大图像,其中包含煤气表图像捕获的一系列数字,并手动编辑文件框以创建.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来增强图像(去噪、规格化、锐化…)
例如:
(它允许您访问每个字符的边界框) Pix*pimg=tess_api->GetThresholdeImage()Boxa*tesseract::TessBaseAPI::GetConnectedComponents(Pixa**Pixa)
您会发现很少有示例Tesseract是一个相当不错的OCR软件包,但它不能正确地预处理图像。我的经验是,如果在将OCR传递给tesseract之前进行一些预处理,就可以获得良好的OCR结果 有几个关键点可以显著提高识别率:
至于第4点,如果您知道将要使用的字体,有一些比使用Tesseract更好的解决方案,比如直接在图像上匹配这些字体。。。基本算法是找到数字并将其与所有可能的字符(只有10个)匹配。。。尽管如此,实现还是很棘手。链接中的示例是关于
getComponentImage
。您能给我一个如何使用GetConnectedComponents
的示例吗?