C# 是否可以使tesseract ocr直接读取屏幕?

C# 是否可以使tesseract ocr直接读取屏幕?,c#,ocr,tesseract,C#,Ocr,Tesseract,所以,我在使用tesseract,这个实现 从图像中获取文本的代码是 Bitmap img = new Bitmap("image.JPG"); TesseractEngine engine = new TesseractEngine("tessdata", "eng", EngineMode.Default); Page page = engine.Process(img, PageSegMode.Auto); string resu

所以,我在使用tesseract,这个实现

从图像中获取文本的代码是

Bitmap img = new Bitmap("image.JPG");
TesseractEngine engine = new TesseractEngine("tessdata", "eng", EngineMode.Default);
Page page = engine.Process(img, PageSegMode.Auto);
string result = page.GetText(); 
Console.WriteLine(result);         
这就像预期的一样,但我想要的是,这个程序能够持续地观看屏幕,并获得实时出现的任何文本

现在,我能做的,我想,就是在我要做的理论循环的每一次迭代中,截取一个屏幕截图,替换旧图像,然后扫描新图像中的文本

由于不断地创建新的屏幕截图并替换旧的屏幕截图,这似乎效率很低

所以,我想知道的是。。。是否有任何方法可以随时扫描屏幕,而不必进行屏幕截图


也许可以通过某种方式将屏幕内容直接转换为位图,这样
Bitmap img=new Bitmap(“image.JPG”)吗?

这听起来非常特定于实现。最终你必须给Tesseract一个位图,对吗?问题是如何始终获取位图?例如,如果使用DirectX,则可以随时访问帧缓冲区,并可以将其复制到RAM中,并根据需要随时将其馈送给Tesseract。我想那不是你的情况。这个应用程序是什么?它运行在什么平台上?“直接将屏幕内容转换为位图”是的,这是可能的,您不必浏览文件。看@BenVoigt没错,这似乎很有效,但我面临一个新问题。我需要在某种叠加上显示文本,但如果我这样做,它会读取它已经读取的文本,我想。那么有没有办法让它只扫描一个特定的窗口呢?你可以从一个窗口进行blit,但是根据窗口管理器和设置,窗口可能不会被其他窗口覆盖。因此,如果你把OCR结果放在首位,你可能就没有什么可抓取的了。从
Graphics.FromHwnd
开始,但您可能会很快发现您需要一些p/invoke。