我试图训练tesseract以识别燃气表的真实图像中的数字。训练Tesseract 3识别燃气表的实际图像中的数字
我用于训练的图像是用相机制作的,因此存在很多问题:由于曝光过度,反射,阴影等原因,图像分辨率差,图像模糊,照明不良或对比度低。 ..
为了进行培训,我创建了一个大图像,其中包含燃气表图像捕获的一系列数字,我手动编辑了文件框以创建.tr文件。结果是只有清晰和清晰图像的数字被识别,而模糊图像的数字未被tesseract捕获。
我试图训练tesseract以识别燃气表的真实图像中的数字。训练Tesseract 3识别燃气表的实际图像中的数字
我用于训练的图像是用相机制作的,因此存在很多问题:由于曝光过度,反射,阴影等原因,图像分辨率差,图像模糊,照明不良或对比度低。 ..
为了进行培训,我创建了一个大图像,其中包含燃气表图像捕获的一系列数字,我手动编辑了文件框以创建.tr文件。结果是只有清晰和清晰图像的数字被识别,而模糊图像的数字未被tesseract捕获。
我先试试这个简单的ImageMagick命令:
convert \
original.jpg \
-threshold 50% \
result.jpg
(玩了一下与50%
参数 - 尝试用更小,更高的价值......)
阈值基本上留下了只有2值,零或最大值,为每个颜色通道。低于阈值的值被设置为0,高于阈值的值被设置为255(或者如果工作在16位深度,则为65535)。
根据您的original.jpg,您可能会有OCR功能,工作效果非常好的对比度图像。
据我可以告诉你需要OpenCV识别数字所在的盒子,但OpenCV不是OCR的上帝。在找到盒子后,只需裁剪该部分,进行图像处理,然后将其交给tesseract进行OCR。
我需要OpenCV帮助,因为我不知道如何在OpenCV中编程。
这里有几个真实世界的例子。
我建议你:
我建议你自己使用Tesseract的API来增强图像(去噪,标准化,锐化...) 例如:Boxa * tesseract::TessBaseAPI::GetConnectedComponents(Pixa** pixa)
(它允许您获取每个字符的边界框)
Pix * pimg = tess_api-> GetThresholdedImage();
Here你找到一些例子
链接中的这些示例与“GetComponentImages”有关。你能给我一个如何使用'GetConnectedComponents'的例子吗? – yode
正方体是一个相当不错的OCR包,但不正确预先处理的图像。我的经验是,如果您在将其传递到tesseract之前进行一些预处理,您可以获得良好的OCR结果。
有一对夫妇的显著提高识别关键指针:
至于第4点,如果您知道将要使用的字体,有比使用Tesseract更好的解决方案,例如直接在图像上匹配这些字体......基本算法是找到数字和将它们匹配到所有可能的字符(它们只有10个)......但实现起来很棘手。
你能张贴一个示例图片吗? –