我需要将图片转换为文字。但它比看起来容易一些。
我所说的图像不是扫描文档,也不是旋转,倾斜和上下颠倒的图像。这是一个来自游戏的干净屏幕截图(类似于在记事本中截取一些文本的屏幕截图)。我也确切地知道文本的大小和位置,也很容易删除背景并使白色变黑。
字体将始终保持不变(但是,我不知道哪种字体)。所以也许我可以教一些东西来阅读这个特定的字体?
我还需要从c#应用程序中调用它。所以我在c#中寻找一些方法来说:这是Bitmap(或位图的路径),用纯文本说明它。
我已经尝试过tesseract ocr,但似乎我做错了,因为它几乎总是错的。唯一一个有好结果的人(只有一个小小的错误就是“at”变成“t”)是Capture2Text,但我不知道如何在c#中使用它。
这是一个应该能够阅读的小样本:
答案 0 :(得分:5)
我使用Tesseract.NET来识别您的样本图像并获得“Evorvze SWOYG”;将它重新调整为300DPI后,得到了“青铜剑”。
答案 1 :(得分:1)
我实际上强烈建议不要重新采样高达300 DPI,这会产生很多抖动。这对OCR没有好处。像Nuance和ABBYY这样的引擎非常聪明,知道如何处理72 dpi图像上的字体。
MODI库中的OCR引擎使用的是旧版本的Nuance,它比Capture2Text和Tesseract要好得多。
答案 2 :(得分:0)
我刚刚添加了将图像缩放两倍的代码,它可以完美识别数字!
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);
}
答案 3 :(得分:0)
这个想法是,只要有新的屏幕截图文件出现在运行tesseract OCR的文件夹中,然后在文件编辑器中打开它即可。
您可以在Linux或带WSL的Windows中使用以下脚本(在Windows上为Ubuntu)
您可以将此运行脚本保留在您喜欢的屏幕截图输出目录的输出目录中
format_data()
您将需要对此进行说明
#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
我在Ubuntu上与Shutter一起使用它,在Windows上与WSL(在Windows上是Ubuntu)一起使用Greenshot