在截图中识别字符的最佳方法是什么?

25
您有什么推荐的方法可以从屏幕截图中识别出所有字符?截图非常清晰(只有黑色文本在白色背景上),我也可以为文本选择任何标准字体(已在Windows上安装)。我尝试过一些OCR方式(如Tesseract等),但是它们在识别某些字符时会出现错误(这让我感到困惑,因为文本没有丝毫噪音,而且字体是一些最常见的字体 - Courier New、Fixedsys等),我需要100%的准确性。是否有针对此特定目的的库、模式识别或其他东西可用?还是应该使用某种等宽字体截屏,并迭代遍历图像,向右移动+字体大小像素,然后将捕获的内容与相同字体和大小的字母和数字的内存表示进行比较?对于这个问题,哪种方法最好?非常感谢您提前的帮助。
更新:我终于通过使用等宽字体(Courier New)的Tesseract进行训练并使用完全相同的大小截屏,达到了100%的准确性。希望这能帮助未来的某人 :)

3
OCR永远不会100%准确。它主要取决于您正在处理的图像/文档的质量。 - Evan Mulawski
5个回答

15

由于这是谷歌上关于 tesseract recognize screenshot 的第一个结果,让我进行一些“尸变术”,并提供一个简单得多的解决方案。

Tesseract 期望图像具有大约300 dpi或更高的分辨率,而 Windows 的标准 dpi 是96。这意味着您需要将图像缩放到300%。之后,结果会显著提高。

100%
1x scale
结果: 你会推荐哪个工具来识别截屏中的所有字符 ?

200%
2x scale
结果: 你会推荐哪个工具来识别屏幕截图中的所有字符?

300%
3x scale
结果: 你会推荐哪个工具来识别屏幕截图中的所有字符?

超过300%的任何缩放比例效果都一样。


2
我很惊讶这个方法的效果如此之好。我截取的大部分屏幕截图确实都是低分辨率的,但在Photoshop中将它们放大到300 ppi,或者确保尺寸更大(最小维度约为4000像素),准确性就会提高。赞!我使用的另一个技巧是将字符白名单限制为常见字母(tessedit_char_whitelist 0123456789-.()qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM)。 - Joshua
这里有一个关于如何使用tessedit_char_whitelist答案 - XoXo
一些图像预处理的其他技巧:https://www.howtoforge.com/tutorial/tesseract-ocr-installation-and-usage-on-ubuntu-16-04/ - XoXo
请问您能否在这里查看一个与Tesseract相关的问题:https://dev59.com/ZGAKtIcB2Jgan1zneSex? - Istiaque Ahmed

1

我知道你已经解决了你的问题,但是如果这能帮助到其他人:在处理截图时,我发现OCR引擎对以下两个问题比较敏感:(1)图像文件头中分辨率设置不正确,以及(2)透明度问题(看起来像白色背景实际上被标记为透明)。由于某种原因,这些问题往往经常出现在截图图像中。

此外,除了Tesseract之外,另一个可能性是尝试基于ABBYY OCR引擎的http://www.wisetrend.com/wisetrend_ocr_cloud.shtml API。(优点是没有安装/配置等需要,只需进行HTTP POST即可尝试它是否适用于您的图像)。免责声明:WiseTrend是我们公司的客户。


2
链接已失效。我尝试了Abby引擎,但它非常昂贵且结果很糟糕! - Elmue
请问您能否在这里查看一个与Tesseract相关的问题:https://dev59.com/ZGAKtIcB2Jgan1zneSex? - Istiaque Ahmed

1

如果OCR在如此高质量的输入上给出如此糟糕的结果,我会感到惊讶。也许你想做的是选择一个有锐利边缘、没有反锯齿、字体大小更大的字体。

另外,如果可以接受的话,可以尝试一下这个SO问题中提供的OCR字体:

这应该会给你最好的可能结果 - 如果这不能达到100%,那我就不知道还有什么能做到了...

除了Tesseract之外,我不知道你尝试过什么,但如果你没有尝试过其他的,那么尝试一些其他的可能是值得的。这些似乎是最近更新的(Tesseract是一年前更新的):

还有一些在线版本,例如:

您可以使用此链接来测试示例文档。

看起来你可能需要商业授权才能得到你想要的。

希望这可以帮到你。


对于阅读此内容的任何人,我使用 GOCR 识别了一段以 FreeMono 字体、字号为 12 的文本块,并将图像保存在 300dpi 下,取得了非常好的结果(基本上是 100%,如果您不考虑 ≡ 被误认为 = 的话)。 - araraonline

0

你可以使用Abby Fine Reader 12.0从PDF或屏幕截图中提取文本,并直接将它们保存为所需的文件格式。

了解更多信息:Abby Fine Reader 15 - 免费试用


0

您是否有更改操作系统级别文本抗锯齿的选项?尝试调整这些设置(甚至尝试关闭它)可能会使现有OCR获得更好的结果。


我已经在Windows中关闭了字体平滑处理。正如我所说,屏幕截图中的文本在黑白模式下非常清晰。Tesseract识别准确率大约为98%,但我这里真的需要100%的准确性。 - Tomek
@Tomek 我正在使用 Tesseract 完成一个任务。我需要 100% 的准确性,但目前还没有达到。 - smwikipedia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接