我正在开发一个小型个人应用程序,该应用程序应该从一个非常简单的Android屏幕截图中读取一些文本(最多2个句子)。文本始终是相同的大小,相同的字体,并且大约相同。相同的位置。背景非常平淡,通常只有一种颜色的阴影(想像鲜橙色逐渐淡入较暗的橙色)。我正在尝试找出执行此操作的最佳方法(最重要的是,最快的方法)。
我的第一次尝试涉及IronOcr C#库,并且公平地说,它运行得很好!但是我注意到了一些问题:
听起来很奇怪,我感觉像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 USD可以花在一个私人的爱好项目上,甚至不会离开我自己的PC:(
但是我对这个问题的主要目标是找到一种更好,更快或更有效的方法。它不一定必须是现有的库,如果有人可以指出我正确的方向,我将更愿意制作自己的一种字母检测代码,该代码可(仅?)适用于我的屏幕截图。
答案 0 :(得分:0)
我对此主题进行了研究,我能找到的最佳解决方案是Azure认知服务。您可以使用计算机视觉API从图像中读取文本。 Here是完整的文档。
答案 1 :(得分:0)
我也没有$ 399 USD可以花在一个私人的业余项目上,甚至连我自己的PC都没用
您可以使用免费的ocr.space ocr api:https://ocr.space/ocrapi-与屏幕截图配合使用。免费版本是基于云的(在线ocr)。
答案 2 :(得分:0)
必须多快?
如果您使用的是C#,建议您使用Google Cloud Vision API。您可以按请求付费,但每月前1000个是免费的(支票价格here)。 但是,它确实需要一个网络请求,但我认为它非常快捷
using Google.Cloud.Vision.V1;
using System;
namespace GoogleCloudSamples
{
public class QuickStart
{
public static void Main(string[] args)
{
// Instantiates a client
var client = ImageAnnotatorClient.Create();
// Load the image file into memory
var image = Image.FromFile("wakeupcat.jpg");
// Performs label detection on the image file
var response = client.DetectText(image);
foreach (var annotation in response)
{
if (annotation.Description != null)
Console.WriteLine(annotation.Description);
}
}
}
}
我发现它适用于图片和扫描的文档,因此它可以完美地适合您的情况。该SDK也支持其他语言,例如Java,Python和Node