屏幕截图上的 OCR
Posted
技术标签:
【中文标题】屏幕截图上的 OCR【英文标题】:OCR on a screenshot 【发布时间】:2014-02-25 04:09:48 【问题描述】:我需要将图像转换为文本。但这比看起来要容易一些。
我所说的图像不是扫描的文档,也不是旋转、倾斜和上下颠倒的图像。这是一个干净的游戏截图(类似于在记事本中截取一些文本)。我也知道文字的大小和位置,也很容易去除背景,白底黑。
字体将始终保持不变(但是,我不知道是哪种字体)。所以也许我可以教一些东西来阅读这种特定的字体?
我还需要从 c# 应用程序调用它。所以我正在寻找 C# 中的某种方式来表达:这是位图(或位图的路径),以纯文本形式告诉我它所说的内容。
我已经尝试过 tesseract ocr,但似乎我做错了什么,因为它几乎总是错的。 Capture2Text 唯一取得了不错的结果(“at”变成“at”的小错误),但我不知道如何在 c# 中使用它。
这是它应该能够读取的一小部分示例:
【问题讨论】:
检查这个可以帮助你...***.com/a/21496107/3051661 准确的 OCR 是一个未解决的问题。在打印文本上合理地工作,这种文本以 2400 dpi 渲染并以不低于 600 dpi 的速度扫描。屏幕截图为 96 dpi,通常由于抗锯齿而故意模糊。更少,您的字母只有 6 像素高。像 Capture2Text 这样的程序是专门为截图而设计的,因此很可能会进行足够的调整以进行截图。不要这样做。 【参考方案1】:我使用Tesseract.NET 识别您的示例图像并获得“Evorvze SWOYG”;重新缩放到300DPI后,得到“青铜剑”。
【讨论】:
Tesseract Wiki (FAQ, ImproveQuality) 推荐该分辨率。 300 dpi 是任何 OCR 相关图像处理的一般推荐设置。 更新链接:FAQ, Improving quality【参考方案2】:我实际上强烈建议不要对高达 300 DPI 的重新采样,这会产生大量抖动。这对 OCR 没有好处。 Nuance 和 ABBYY 等一些引擎足够聪明,知道如何处理 72 dpi 图像上的字体。
MODI 库中的 OCR 引擎使用的是旧版本的 Nuance,这将大大优于 Capture2Text 和 Tesseract。
【讨论】:
【参考方案3】:我刚刚添加了将图像缩放两倍的代码,它可以完美地识别数字!
Bitmap b = new Bitmap(width * 2, height * 2);
using (Graphics g1 = Graphics.FromImage((Image)b))
g1.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g1.DrawImage(newBitmap, 0, 0, width * 2, height * 2);
【讨论】:
【参考方案4】:这个想法是每当文件夹中出现新的屏幕截图文件时,对其运行 tesseract OCR 并在文件编辑器中打开。
您可以在 Linux 或带有 WSL(Windows 上的 Ubuntu)的 Windows 中使用以下脚本
你可以把这个运行脚本留在你最喜欢的屏幕截图输出目录的输出目录中
#cat wait_for_it.sh
inotifywait -m . -e create -e moved_to |
while read path action file; do
echo "The file '$file' appeared in directory '$path' via '$action'"
cd "$path"
if [ $file: -4 == ".png" ]; then
tesseract "$file" "$file"
sleep 1
gedit "$file".txt &
fi
done
你需要安装这个
sudo apt install tesseract-ocr
sudo apt install inotify-tools
我将它与 Ubuntu 上的 Shutter 和带有 WSL(Windows 上的 Ubuntu)的 Windows 上的 Greenshot 一起使用
【讨论】:
以上是关于屏幕截图上的 OCR的主要内容,如果未能解决你的问题,请参考以下文章