1

到目前为止,我的第一个障碍是在 MTG 卡的图像上运行 tesseract vanilla 无法识别卡标题(老实说,这就是我所需要的,因为我可以使用该文本从数据库中提取其余的卡信息)我认为问题可能需要训练 tesseract 以识别 mtg 卡中使用的字体,但我想知道 tesseract 是否可能是一个问题,因为 tesseract 没有查看或没有检测到图像的一部分(特别是标题)中的文本。

编辑:包括一张 MTG 卡的图像以供参考。http://gatherer.wizards.com/Handlers/Image.ashx?multiverseid=175263&type=card

4

2 回答 2

1

好吧,在 reddit 编程论坛上询问之后,我想我找到了一个我要追求的答案:

tesseract 的训练功能确实是为了提高不寻常字体的比率,但这可能不是你成功率低的原因。文本所在的环境没有得到很好的控制 - 卡片背景可以是五种颜色之一的纹理加上文物和土地。Tesseract 在处理之前对图像进行了灰度化处理,因此文本和背景之间的对比度不够。您可以将卡片通过预处理器,将彩色区域静音并增强单调。这应该会增加对比度,以便 tesseract 可以辨认出字符。

如果仍然遵循 thsi 的人认为上述路径是错误的开始,请说出来。

于 2015-07-09T15:45:42.500 回答
0

TLDR

我相信你在正确的轨道上进行预处理。

但是您需要同时进行预处理和训练 Tesseract。

预处理

基本上,您想要获取标题文本,并且只有标题文本,以便 Tesseract 读取。我建议您按照以下步骤操作:

  1. 识别卡片的边界。
  2. 切出标题区域以进行进一步处理。
  3. 将图像转换为黑白。
  4. 使用轮廓来识别确切的文本区域,并将其裁剪掉。
  5. 将您获得的图像发送到 Tesseract。

YouTube 视频自动 MTG 卡片分类:第 2 部分 - 使用 OpenCV 进行自动透视校正显示了如何创建基本预处理。还可以查看该系列的第三部分。

话虽如此,您会遇到许多问题。如何处理拆分卡?您的算法会管理白色边框吗?如果卡片被旋转或倒置怎么办?仅举几个。

培训需求

但即使你设法创建了一个完美的预处理算法,你仍然需要训练 Tesseract。这是由于卡片上使用了特殊的文本字体(根据卡片的年龄,字体恰好是不同的!)。

考虑卡片“Kinjalli 的来电者”。

http://gatherer.wizards.com/Handlers/Image.ashx?multiverseid=435169&type=card

请注意“j”与“i”的相似程度。未经训练的 Tesseract 往往会混淆它们。

结论

考虑到所有这些,我对您的回答是,您需要对卡片图像进行预处理并训练 Tesseract

如果你仍然感兴趣,我建议你看看 GitHub 上的这个 MTG 读卡项目。这样你就不必重新发明轮子了。

https://github.com/klanderfri/ReadMagicCard

于 2018-05-03T11:43:57.450 回答