针对渲染文本(截图)设计开源OCR引擎
我现在正在做一个个人项目,想要自动从游戏中抓取截图,识别里面的文字,并统计特定单词出现的次数。
我花了整个晚上在寻找不同的文字识别(OCR)解决方案,发现大多数OCR工具都是为了处理扫描的文本而设计的。如果有能可靠读取屏幕文字的工具,那肯定超出了我这个爱好者的预算。
我还看了一些其他的问题,找到的最接近的一个是专为屏幕阅读设计的OCR引擎。
我觉得读取显示的文字应该比读取打印或扫描的文字简单得多。因为显示的文字线条总是很直,而且每个字母的像素表现基本上都是一样的(大多数情况下是这样)。而且,如果你有字体文件,为什么不把它当作识别字符的参考呢?这样我们可能真的能达到100%的准确率。
假设你有字体文件作为参考,并且你的源图像是完美的正方形,没有杂音,那你会怎么从屏幕上识别字符呢?
(我能想到的问题是界面线条和图像可能会让简单的像素猜测变得混乱。)
如果你知道有免费的、开源的、专为屏幕阅读设计的OCR工具,请告诉我。不过我有点怀疑会找到,因为其他提问的人似乎也没有找到相关的信息。
我更希望能找到Python接口,但有需求就得妥协。
编辑:
为了更清楚,我在寻找一种专门设计用于从截图中读取文本的OCR解决方案。像tesseract这样的流行工具(在我提到的问题中有提到)使用起来很困难,因为它们并不是为这种类型的源文件设计的。
3 个回答
这可能不是你想要的,但你可以看看 Sikuli。
如果你的目标是统计游戏中某些事件发生的次数,那么使用OCR(光学字符识别)其实不是最好的方法。不过,如果你还是想用OCR的话,tesseract-OCR是一个很有名的开源工具,可以用来进行光学字符识别。我不太明白你提到的扫描文本和渲染文本有什么区别,但tesseract的表现应该和其他开源工具差不多。需要注意的是,OCR技术还是比较复杂的,所以我不指望它能做到100%的准确率。
我一直在思考这个问题,我觉得最好的方法是计算每个小块/字形/字符中的像素数量。这样可以大大减少我需要进行的测试,以区分不同的字形。
可惜的是,我必须对字体要求非常具体。这个软件只能识别在正确的dpi(每英寸点数)、正确的字体样式和粗细等条件下的字体。
虽然这并不是最理想的情况,我还是希望有更懂这些的人来设计用于渲染文本的OCR(光学字符识别);不过对于我目前的需求来说,这个方法是可行的。