在MTG卡上使用tesseract

时间:2015-07-01 18:30:54

标签: image-processing ocr python-tesseract

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

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

2 个答案:

答案 0 :(得分:1)

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

  

tesseract的训练功能确实用于提高不寻常字体的速率,但这可能不是你成功率低的原因。   文本所处的环境控制得不好 - 卡片背景可以是五种颜色中的一种纹理加上工件和土地。 Tesseract在处理之前对图像进行灰度级处理,因此文本和背景之间的对比度不足。   您可以将卡片放入预处理器,将彩色区域静音为白色并增强单调。这应该会增加对比度,因此tesseract可以识别角色。

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

答案 1 :(得分:0)

TLDR

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

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

预处理

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

  1. 识别卡片的边框。
  2. 剪下标题区域以便进一步处理。
  3. 将图像转换为black'n'white。
  4. 使用轮廓识别确切的文本区域,然后将其裁剪掉。
  5. 将您获得的图像发送给Tesseract。
  6. 如何创建基本的预处理功能,请参见YouTube视频Automatic MTG card sorting: Part 2 - Automatic perspective correction with 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