我试图使用莫迪OCR一窗口的程序。它工作正常的截图我抓住编程方式使用win32互操作这样的:

public string SaveScreenShotToFile()
{
    RECT rc;
    GetWindowRect(_hWnd, out rc);

    int width = rc.right - rc.left;
    int height = rc.bottom - rc.top;

    Bitmap bmp = new Bitmap(width, height);
    Graphics gfxBmp = Graphics.FromImage(bmp);
    IntPtr hdcBitmap = gfxBmp.GetHdc();

    PrintWindow(_hWnd, hdcBitmap, 0);

    gfxBmp.ReleaseHdc(hdcBitmap);
    gfxBmp.Dispose();

    string fileName = @"c:\temp\screenshots\" + Guid.NewGuid().ToString() + ".bmp";
    bmp.Save(fileName);
    return fileName;
}

这个图像然后被保存到一个文件并通过莫迪是这样的:

    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这个较小的图像,但是莫迪抛出的一个例外;'OCR运行错误,错误代码是-959967087.

为什么可以MODI处理原来的位但不是较小的版本取自吗?

有帮助吗?

解决方案

看起来好像答复是给莫迪的一个更大的画布上。我也在试图采取的截图控制和OCR就和遇到的相同的问题。在结束我把图像的控制、复制图象成一个更大的位和Ocr较大的位图。

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

我不停的工作创造一个更大的源在我的OCR方法,这看起来像这样的东西(I直接处理的图像对象):

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;
}

我不知道什么最小尺寸,但它似乎1024x768会的伎俩。

其他提示

是的员额在这一线帮助我刚开了它的工作,在这里我有什么要补充:

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

-当处理的图像,它似乎theyr尺寸必须是权力的2!(能够ocr图像:512×512,128×128,256x64..其他尺寸的大多是失败的(像1103x334))

  • 透明的背景,也作了麻烦。我得到了最好的结果,当创建一个新的时效与powerof2边界,白色的背景,贴上下载的图像进入,保存。

  • 缩图像没有成功对我来说,由于OCR到了错误的结果,特别是对于"德国"字样的"u"

  • 在结束我还用于:医生。OCR(莫迪。MiLANGUAGES.miLANG_ENGLISH,false,false);

  • 用莫迪从办公室2003年

问候

womd

莫迪ocr是唯一的工作tif我。试图拯救像在"时效".

对不起我英语不好

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

这意味着我不想要检测的方向和未解决的任何倾斜。现在该命令正常工作的所有图像包括2400x2496tiff。

但图像应用。tif.

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

我有同样的问题"OCR运行问题",与一些图像。我重新定标的对象(在我的情况下通过50%),即减其大小,瞧!它的工作!

我有同样的问题,同时使用

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

在tiff文件,该文件是2400x2496.调整到50%(减小)中固定的问题和方法是不扔除了,但是,它被错误地认识到文本的样检测"relerence"而不是"参考"或"712017"而不是"712517".我一直在尝试不同的图像大小,但它们都有同样的问题,直到我改变了命令

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

这意味着我不想要检测的方向和未解决的任何倾斜。现在该命令正常工作的所有图像包括2400x2496tiff。

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

什么解决我的情况是使用一个照片编辑(Paint.NET)和使用的突影响最大。

我还用于:医生。OCR(莫迪。MiLANGUAGES.miLANG_ENGLISH,false,false);

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top