2009-07-15 50 views
8

我想用MODI来OCR一个窗口的程序。它工作正常的我抢编程方式使用截图win32的互操作是这样的:.NET OCRing图像

该图像,然后保存到一个文件并运行通过MODI像这样:

private string GetTextFromImage(string fileName) 
    { 

     MODI.Document doc = new MODI.DocumentClass(); 
     doc.Create(fileName); 
     doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true); 
     MODI.Image img = (MODI.Image)doc.Images[0]; 
     MODI.Layout layout = img.Layout; 

     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < layout.Words.Count; i++) 
     { 
      MODI.Word word = (MODI.Word)layout.Words[i]; 
      sb.Append(word.Text); 
      sb.Append(" "); 
     } 

     if (sb.Length > 1) 
      sb.Length--; 

     return sb.ToString(); 
    } 

这部分工作正常,但是,我不想OCR整个屏幕截图,只是它的一部分。我尝试像这样以编程方式裁剪图像:

private string SaveToCroppedImage(Bitmap original) 
    { 
     Bitmap result = original.Clone(new Rectangle(0, 0, 250, 250), original.PixelFormat); 
     var fileName = "c:\\" + Guid.NewGuid().ToString() + ".bmp"; 
     result.Save(fileName, original.RawFormat); 

     return fileName; 
    } 

然后OCRing这个较小的图像,但是MODI会引发异常; 'OCR运行错误',错误代码是-959967087。

为什么MOD​​I可以处理原始位图,而不是从它取得的较小版本?

回答

7

看起来好像答案是给予MODI更大的画布。我也试图抓住一个控制和OCR的截图,并遇到同样的问题。最后,我拍摄了控件的图像,将图像复制到了更大的位图中,并对较大的位图进行了OCR处理。

我发现的另一个问题是,您必须有适当的扩展名为您的图像文件。换句话说,.tmp不会削减它。

我一直在创造我的OCR方法,它看起来像这里面一个较大的信号源(我直接与图像处理的对象)的工作:

public static string ExtractText(this Image image) 
{ 
    var tmpFile = Path.GetTempFileName(); 
    string text; 
    try 
    { 
     var bmp = new Bitmap(Math.Max(image.Width, 1024), Math.Max(image.Height, 768)); 
     var gfxResize = Graphics.FromImage(bmp); 
     gfxResize.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height)); 
     bmp.Save(tmpFile + ".bmp", ImageFormat.Bmp); 
     var doc = new MODI.Document(); 
     doc.Create(tmpFile + ".bmp"); 
     doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true); 
     var img = (MODI.Image)doc.Images[0]; 
     var layout = img.Layout; 
     text = layout.Text; 
    } 
    finally 
    { 
     File.Delete(tmpFile); 
     File.Delete(tmpFile + ".bmp"); 
    } 

    return text; 
} 

我不知道的最小尺寸是什么,但它看起来好像是1024 x 768的伎俩。

+0

任意完整的源代码? – Kiquenet 2012-10-04 14:11:45

1

该modi ocr只与我工作tif。 尝试在“tif”中保存图像。

对不起我的英文不好

0

我有一些问题“OCR运行问题”与一些图像。我重新缩放了图像(在我的例子中为50%),即缩小了它的尺寸,瞧!有用!

0

我,而在这是2400x2496 TIFF文件使用

doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true); 

有同样的问题。将它调整到50%(减小尺寸)解决了问题,并且该方法不再引发异常,但是,它不正确地识别文本,如检测“relerence”而不是“reference”或“712017”而不是“712517” 。我一直在尝试不同的图像大小,但他们都有同样的问题,直到我改变了命令

doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, false, false); 

这意味着我不希望它来检测取向,而不是修复任何倾斜。现在该命令可以在包括2400x2496 tiff在内的所有图像上正常工作。

希望这有助于出面临同样的问题

3

是在这个线程的职位帮助我刚开这工作的人,在这里我要补充:

试图下载图像(小的)然后ocr ...

- 当处理图像时,似乎他们的大小必须是2的幂! (能够OCR图片:512×512,128×128,256×64 ..其他尺寸大多失败(如1103x334))

  • 透明背景也取得了烦恼。在创建带有powerof2边界的白色背景的新tif时,我获得了最佳效果,将下载的图像粘贴到其中,保存。

  • 缩放图像,我没有成功,因为OCR越来越错误的结果,特别是对于像我也用到底“ü”

  • “德”字:doc.OCR(MODI.MiLANGUAGES .miLANG_ENGLISH,false,false);

  • 使用MODI从Office 2003

问候

womd

1
doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, false, false); 

这意味着我不希望它来检测取向,而不是修复任何倾斜。现在该命令可以在包括2400x2496 tiff在内的所有图像上正常工作。

但图像应该在.tif。

希望这可以帮助面临同样问题的人。

0

什么解决了我的情况是使用照片编辑器(Paint.NET)并最大限度地使用锐化效果。我也用过: doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH,false,false);