识别屏幕截图中字符的最佳方法?

Posted

技术标签:

【中文标题】识别屏幕截图中字符的最佳方法?【英文标题】:Best way to recognize characters in screenshot? 【发布时间】:2011-05-11 16:35:56 【问题描述】:

对于识别屏幕截图中的所有字符,您有什么建议?截图非常清晰(只有白色背景上的黑色文本),我也可以为文本选择任何标准字体(安装在 Windows 上)。我尝试了一些 OCR 方法(Tesseract 等),但它在识别某些字符时出错(这让我感到困惑,因为文本没有丝毫噪音,而且字体是一些最常见的字体 - Courier New、Fixedsys 等),我需要它是 100% 准确的。是否有一些库可用于此特定目的,一些模式识别或其他什么?或者我应该使用一些等宽字体获取屏幕截图,并遍历图像移动到右侧 +font_size 像素,然后将捕获的内容与相同大小的字母和相同字体数量的内存表示进行比较?解决这个问题的最佳方法是什么?非常感谢您。

更新:通过使用等宽字体 (Courier New) 训练 Tesseract,我终于设法获得了 100% 的准确度,我正在截屏。希望对未来的人有所帮助:)

【问题讨论】:

OCR 永远不会 100% 准确。这主要取决于您使用的图像/文档的质量。 【参考方案1】:

您是否可以选择在操作系统级别更改文本抗锯齿?使用这些设置(甚至尝试将其关闭)也可能会给您现有的 OCR 带来更好的结果。

【讨论】:

我在 Windows 中关闭了字体平滑。正如我所说,屏幕截图中的文本在黑白中非常清晰。 Tesseract 的准确率接近 98%,但我真的需要 100%。 @Tomek 我正在使用 Tesseract 完成一项任务。我还需要 100% 的准确率。但目前还没有。【参考方案2】:

如果 OCR 在如此高质量的输入上给出如此糟糕的结果,我会感到惊讶。可能你想要做的是选择一种边缘锐利的字体,没有抗锯齿,更大的字体也会有帮助。

另外,如果可以接受,试试这个 SO 问题中给出的 OCR 字体:

What is the ideal font for OCR?

这应该会给你最好的结果 - 如果这不是 100%,那么我不知道会发生什么......

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

http://en.wikipedia.org/wiki/Ocrad http://en.wikipedia.org/wiki/GOCR http://en.wikipedia.org/wiki/OCRopus(这个也有点老了,没用的可以试试)

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

http://www.cvisiontech.com/reference/ocr/top-ocr-software.html?lang=eng http://www.makeuseof.com/tag/3-online-ocr-services-intelligently-scan-documents/

可用于测试示例文档。从这个链接:

http://www.makeuseof.com/tag/top-5-free-ocr-software-tools-to-convert-your-images-into-text-nb/

看来你可能需要去商业化才能得到你想要的东西。

希望这会有所帮助。

【讨论】:

对于任何阅读本文的人,我使用 GOCR 识别用FreeMono 编写的文本块,得到了非常好的结果(基本上 100%,如果你不认为 = 被 ≡ 搞砸了),字体大小为 12,图像以 300dpi 保存。【参考方案3】:

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

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

【讨论】:

链接已失效。我尝试了 Abby 引擎。艾比很贵。结果很糟糕! 我可以请您在这里查看一个与 Tesseract 相关的问题:***.com/questions/66946835/… 吗?【参考方案4】:

由于这是tesseract recognize screenshot 在 Google 上的第一个结果,所以让我做一些死灵术并添加一个更简单的解决方案。

Tesseract 需要图像at around 300 dpi or more,Windows 的标准 dpi 为 96。这意味着您需要将图像重新缩放到 300%。之后,结果显着提高。

100% 结果:Whal would you recommend for recognizing all characters from a screensnor 7

200% 结果:What would you recommend for recognizing all chamcters from a screenth ?

300% 结果:What would you recommend for recognizing all characters from a screenshot ?

任何高于 300% 的值都可以。

【讨论】:

我很惊讶它的效果如何。我抓取的大多数屏幕截图确实是低分辨率的,当在 Photoshop 中将它们放大到 300 ppi 时,或者确保尺寸更大(最小尺寸约为 4000 像素)时,精度会上升.荣誉。我使用的另一个技巧是将字符白名单限制为普通字母 (tessedit_char_whitelist 0123456789-.()qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM) 这里有一个answer,关于如何使用tessedit_char_whitelist 其他一些图片预处理技巧:howtoforge.com/tutorial/… 我可以请您在这里查看一个与 Tesseract 相关的问题:***.com/questions/66946835/… 吗?【参考方案5】:

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

识破:Abby Fine Reader 15 - Free Trial

【讨论】:

以上是关于识别屏幕截图中字符的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

从视频游戏屏幕截图中提取尽可能多的文本的最佳方法是啥?

光学字符识别

用于屏幕文本的 OCR(光学字符识别)

截取 iFrame 的屏幕截图

XCTEST - 如何从屏幕截图中提取文本并将其与预期字符串进行比较

屏幕截图中低分辨率文本的 OCR