可以为非字体符号训练 tesseract 吗?

Posted

技术标签:

【中文标题】可以为非字体符号训练 tesseract 吗?【英文标题】:Can tesseract be trained for non-font symbols? 【发布时间】:2017-09-12 23:56:57 【问题描述】:

我很好奇如何才能更可靠地识别扑克牌图像的价值和花色。这里有两个例子:

图像中可能存在一些噪点,但我有大量图像数据集可用于训练(大约 10k png,包括所有值和套装)。

如果我有一个使用散列方法的已知精确匹配,我可以可靠地识别我手动分类的图像。但是由于我是根据图像的内容对图像进行散列处理,因此最轻微的噪声会改变散列并导致图像被视为未知。这就是我希望通过进一步自动化可靠地解决的问题。

我一直在查看关于训练 tesseract 的 3.05 文档: https://github.com/tesseract-ocr/tesseract/wiki/Training-Tesseract#automated-method

tesseract 只能使用字体中的图像进行训练吗?或者我可以用它来识别这些卡片的花色吗?

我希望我可以说这个文件夹中的所有图像都对应于 4c(例如上面的示例图像),并且 tesseract 会在该图像的任何未来实例中看到相似性(无论噪声如何),并且还读到如 4c。这可能吗?这里有人有这方面的经验吗?

【问题讨论】:

【参考方案1】:

这一直是我的非 tesseract 解决方案,直到有人证明有更好的方法。我已经设置:

咖啡:http://caffe.berkeleyvision.org/install_osx.html 数字:https://github.com/NVIDIA/DIGITS/blob/master/docs/BuildDigits.md

让这些运行起来是最困难的部分。接下来,我使用我的数据集来训练一个新的 caffe 网络。我将我的数据集准备成一个单一的深度文件夹结构:

./card
./card/2c
./card/2d
./card/2h
./card/2s
./card/3c
./card/3d
./card/3h
./card/3s
./card/4c
./card/4d
./card/4h
./card/4s
./card/5c
./card/5d
./card/5h
./card/5s
./card/6c
./card/6d
./card/6h
./card/6s
./card/7c
./card/7d
./card/7h
./card/7s
./card/8c
./card/8d
./card/8h
./card/8s
./card/9c
./card/9d
./card/9h
./card/9s
./card/_noise
./card/_table
./card/Ac
./card/Ad
./card/Ah
./card/As
./card/Jc
./card/Jd
./card/Jh
./card/Js
./card/Kc
./card/Kd
./card/Kh
./card/Ks
./card/Qc
./card/Qd
./card/Qh
./card/Qs
./card/Tc
./card/Td
./card/Th
./card/Ts

在 Digits 中,我选择了:

    数据集选项卡 新数据集图像 分类 我将它指向我的卡片文件夹,例如:/path/to/card 根据此处的讨论,我将验证百分比设置为 13.0%:https://***.com/a/13612921/880837 创建数据集后,我打开了模型选项卡 选择我的新数据集。 在 Standard Networks 下选择 GoogLeNet,然后让它进行训练。

我这样做了好几次,每次我在数据集中有新的图像。每个学习课程需要 6-10 个小时,但在这个阶段,我可以使用我的 caffemodel 以编程方式估计每张图像的预期值,使用以下逻辑: https://github.com/BVLC/caffe/blob/master/examples/cpp_classification/classification.cpp

结果是一张牌(2c、7h 等)、噪音或桌子。任何准确率大于 90% 的估计很可能是正确的。最新运行正确识别了 400 张图像中的 300 张,只有 3 个错误。我正在向数据集添加新图像并重新训练现有模型,进一步调整结果准确性。希望这对其他人有价值!

虽然我想要这里的高级步骤,但这一切都非常感谢 David Humphrey 和他的 github 帖子,如果您有兴趣了解更多信息,我真的建议您阅读并尝试一下:https://github.com/humphd/have-fun-with-machine-learning

【讨论】:

以上是关于可以为非字体符号训练 tesseract 吗?的主要内容,如果未能解决你的问题,请参考以下文章

“添加”新字体到 Tesseract eng.traineddata

如何定义 tesseract 用于识别(而不是训练)的字体类型?

Tesseract-OCR 训练教程

iOS .Tesseract OCR 为啥识别如此纯粹。发动机原理

如何训练 tesseract 识别低 DPI 下的小数字?

我们可以训练一个 haar-cascade 来检测数字和字母吗?