训练 Tesseract 3 从燃气表的真实图像中识别数字
Posted
技术标签:
【中文标题】训练 Tesseract 3 从燃气表的真实图像中识别数字【英文标题】:Training Tesseract 3 to recognize numbers from real images of gas meters 【发布时间】:2011-10-07 16:37:06 【问题描述】:我正在尝试训练 tesseract 从燃气表的真实图像中识别数字。
我用于训练的图像是用相机拍摄的,因此存在很多问题:图像分辨率差、图像模糊、光线不足或由于过度曝光、反射、阴影等导致的低对比度。 .
为了训练,我创建了一个大图像,其中包含由燃气表图像捕获的一系列数字,我手动编辑了文件框以创建 .tr 文件。结果是只有更清晰和更清晰的图像的数字被识别,而模糊图像的数字未被 tesseract 捕获。
【问题讨论】:
【参考方案1】:据我所知,您需要 OpenCV 来识别数字所在的框,但 OpenCV 不是 OCR 的神。找到框后,只需裁剪该部分,进行图像处理,然后将其交给 tesseract 进行 OCR。
我需要 OpenCV 方面的帮助,因为我不知道如何在 OpenCV 中编程。
这里有几个真实的例子。
第一张图片是原始图片(裁剪后的功率计编号) 第二张图片在 GIMP 中经过略微清理,在 tesseract 中的 OCR 准确率约为 50% 第三张图像是完全清洁的图像 - 100% OCR 识别,无需任何培训!【讨论】:
【参考方案2】:我会先试试这个简单的 ImageMagick 命令:
convert \
original.jpg \
-threshold 50% \
result.jpg
(使用50%
参数试一试——尝试使用更小和更高的值...)
阈值基本上只为每个颜色通道留下 2 个值,零或最大值。低于阈值的值设置为 0,高于阈值的值设置为 255(如果工作在 16 位深度,则设置为 65535)。
根据您的 original.jpg,您可能会得到一个支持 OCR、工作的、对比度非常高的图像。
【讨论】:
【参考方案3】:我建议你:
使用工具编辑框,例如jTessBoxEditor,它很有帮助,让您赢得一次。您可以从here 轻松安装它 训练实际情况(嘈杂、模糊)的字母是个好主意。您的训练集仍然有限,您可以添加更多训练样本。我建议您自己使用 Tesseract 的 API 来增强图像(去噪、归一化、锐化...)
例如:Boxa * tesseract::TessBaseAPI::GetConnectedComponents(Pixa** pixa)
(它允许您到达每个字符的边界框)
Pix* pimg = tess_api->GetThresholdedImage();
Here你找几个例子
【讨论】:
链接中的示例是关于GetComponentImages
。能否举个例子说明如何使用GetConnectedComponents
?【参考方案4】:
Tesseract 是一个相当不错的 OCR 包,但不能正确预处理图像。我的经验是,如果您在将其传递给 tesseract 之前进行一些预处理,就可以获得良好的 OCR 结果。
有几个关键点可以显着提高识别率:
-
去除背景噪音。基本上这意味着使用平均自适应阈值。我还要确保字符是黑色的,背景是白色的。
使用正确的分辨率。如果你得到不好的结果,放大或缩小图像,直到你得到好的结果。你想瞄准大约。字体大小 14,300 dpi;在我处理发票的软件中效果最好。
不要将图像存储为 JPEG;使用 BMP 或 PNG 或其他不会使图像嘈杂的东西。
如果您只使用一种或两种字体,请尝试使用这些字体训练 tesseract。
至于第 4 点,如果您知道要使用的字体,有一些比使用 Tesseract 更好的解决方案,例如直接在图像上匹配这些字体......基本算法是找到数字并将它们匹配到所有可能的字符(只有 10 个)...不过,实现起来很棘手。
【讨论】:
以上是关于训练 Tesseract 3 从燃气表的真实图像中识别数字的主要内容,如果未能解决你的问题,请参考以下文章