我试图训练 Tesseract 识别燃气表真实图像中的数字。
由于使用相机拍摄,训练所用的图像存在很多问题:图像分辨率较低、模糊图像、光线不足或过度曝光导致对比度不足、反射、阴影等等...
为了进行训练,我创建了一个大图像,其中包含燃气表图像中的一系列数字,并手动编辑 box 文件以创建 .tr 文件。结果是,只有更清晰和更锐利的图像中的数字被 Tesseract 识别,而模糊图像中的数字则无法被捕捉。
convert \
original.jpg \
-threshold 50% \
result.jpg
(尝试使用较小和较高的值玩弄50%
参数...)
阈值处理基本上只保留每个颜色通道的两个值,零或最大值。低于阈值的值被设置为0,高于它的值被设置为255(如果在16位深度下工作,则为65535)。
根据您的original.jpg,您可能会得到一个可识别OCR、工作正常、对比度非常高的图像。
我建议您使用 Tesseract 的 API 来增强图像(去噪、归一化、锐化等)
例如:Boxa * tesseract::TessBaseAPI::GetConnectedComponents(Pixa** pixa)
(它允许您获取每个字符的边界框)
Pix* pimg = tess_api->GetThresholdedImage();
在这里 您会找到一些示例。
GetComponentImages
的。你能给我一个使用GetConnectedComponents
的例子吗? - yode