【发布时间】:2019-04-06 11:11:52
【问题描述】:
我正在开发一个小型个人应用程序,它应该从一个非常简单的 Android 屏幕截图中读取一些文本(最多 2 个句子)。文本始终是相同的大小、相同的字体和大约。同一个位置。背景非常平淡,通常是 1 种颜色的几种色调(想想就像亮橙色逐渐变成深一点的橙色)。我试图找出最好的方法(最重要的是,最快的方法)来做到这一点。
我的第一次尝试涉及 IronOcr C# 库,公平地说,它运行良好!但我注意到它存在一些问题:
- 这不是 100% 准确的
- 尽管有社区/试用版,但有时会抛出异常,告诉您获取许可证
- 读取约 600x300 像素的图像需要约 400 毫秒,就我的简单图像而言,我认为该图像相当长
虽然听起来很奇怪,但我感觉 IronOcr 和 Tesseract 之类的库可能对我的需求来说太先进了。为了提高速度,我什至编写了一段代码来首先“限制”我的图像,使其完全黑白。
我当前的 IronOcr 设置如下所示:
ImageReader = new AdvancedOcr()
{
CleanBackgroundNoise = false,
EnhanceContrast = false,
EnhanceResolution = false,
Strategy = AdvancedOcr.OcrStrategy.Fast,
ColorSpace = AdvancedOcr.OcrColorSpace.GrayScale,
DetectWhiteTextOnDarkBackgrounds = true,
InputImageType = AdvancedOcr.InputTypes.Snippet,
RotateAndStraighten = false,
ReadBarCodes = false,
ColorDepth = 1
};
而且我完全可以接受使用 IronOcr 所获得的结果,但是许可例外情况毁了它。我也没有 399 美元可以花在一个甚至不会离开我自己的 PC 的私人爱好项目上:(
但我对这个问题的主要目标是找到一种更好、更快或更有效的方法来做到这一点。它不一定是一个现有的库,如果有人能指出我正确的方向,我非常愿意制作我自己的字母检测代码,它可以(仅?)用于像我这样的屏幕截图。
【问题讨论】:
-
如果异常在对象创建时确实是随机的...创建一个循环,并在必要时尝试多次尝试创建对象实例...您将无法改进单独花费数百万构建的 ocr 软件的性能
-
@Ctznkane525 异常不是“真正随机的”,它们很可能只是被抛出,因为我试图“过于频繁”地阅读图像,尽管我还不确定那还没有。至于提高 OCR 软件的性能:我的目的不是编写自己的成熟 OCR 软件。它将仅限于我需要阅读的屏幕截图类型,这无疑使事情变得容易得多。
标签: c# ocr screenshot