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