Frage

Ich versuche MODI zu verwenden, um ein Fenster des Programms OCR. Es funktioniert gut für Screenshots ich programmatisch win32 Interop wie dies mit schnappen:

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

Dieses Bild dann in einer Datei gespeichert wird und lief durch MODI wie folgt aus:

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

Dieser Teil funktioniert gut, aber ich will nicht die gesamten Screenshot OCR, nur Teile davon. Ich versuche beschneiden das Bild programmatisch wie folgt aus:

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

und dann OCRing dieses kleinere Bild, wirft jedoch MODI eine Ausnahme; 'OCR Lauffehler', der Fehlercode -959967087.

Warum kann MODI die ursprüngliche Bitmap handhaben, aber nicht die kleinere Version von ihr genommen?

War es hilfreich?

Lösung

Sieht aus, als ob die Antwort zu geben MODI eine größere Leinwand ist. Ich habe versucht, auch einen Screenshot von einer Steuer- und OCR, es zu nehmen und lief in das gleiche Problem. Am Ende habe ich das Bild der Steuerung, kopiert das Bild in eine größere Bitmap und OCRed die größere Bitmap.

Ein weiteres Problem, das ich fand, war, dass Sie eine richtige Erweiterung für Ihre Image-Datei haben. Mit anderen Worten schneidet .tmp nicht.

hielt ich die Arbeit eine größere Quelle in meinem OCR-Verfahren zu schaffen, die etwa wie folgt aussieht (I befassen sich direkt mit Bildobjekten):

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

Ich bin mir nicht sicher, was genau die Mindestgröße ist, aber es scheint, als ob 1024 x 768 funktioniert der Trick.

Andere Tipps

ja die Beiträge zu diesem Thema half mir Gettin es, hier zu arbeiten, was ich hinzufügen:

versuchen, Bilder (kleine) zum Download dann ocr ...

-wenn Verarbeitung von Bildern, so scheint es, dass theyr Größe Potenz von 2 sein müssen! (War in der Lage Bilder ocr: 512x512, 128x128, 256x64 .. andere Größen meist gescheitert (wie 1103x334))

  • transparenter Hintergrund auch gemacht Schwierigkeiten. Ich habe die besten Ergebnisse, wenn eine neue tif mit powerof2 Grenze, weißen Hintergrund erstellen, fügen Sie das heruntergeladene Bild hinein, speichern.

  • , um die Bildskalierung bei mir nicht gelingen, da OCR falsche Ergebnisse zu erzielen, speziell für „Deutsch“ Zeichen wie „ü“

  • Am Ende habe ich auch verwendet: doc.OCR (MODI.MiLANGUAGES.miLANG_ENGLISH, falsch, false);

  • mit modi von Office 2003

Grüße

womd

die modi ocr arbeitet nur tif mit mir. versuchen Bild zu speichern in "tif".

leider mein schlechtes Englisch

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

Was bedeutet, dass ich will es nicht die Orientierung erkennen und keine Schrägstellung zu beheben. Jetzt ist der Befehl funktioniert gut auf alle Bilder einschließlich der 2400x2496 tiff.

Aber Bild sollte in .tif sein.

Hope, das hilft heraus Menschen vor dem gleichen Problem.

Ich hatte das gleiche Problem „OCR läuft Problem“ mit einigen Bildern. Ich neu skaliert das Bild (in meinem Fall um 50%), das heißt reduziert seine Größe und voila! es funktioniert!

Ich hatte das gleiche Problem, während die mit

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

auf einer TIFF-Datei, die 2400x2496 war. Ändern der Größe auf 50% (Verringerung der Größe) festgesetzt wurde, das Problem, und das Verfahren die Ausnahme nicht mehr zu werfen, es wurde jedoch erkennen falsch den Text wie Detektieren „relerence“ anstelle von „reference“ oder „712.017“ anstelle von „712.517“ . Ich hielt verschiedene Bildgrößen versucht, aber sie alle hatten das gleiche Problem, bis ich den Befehl geändert

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

, was bedeutete, dass ich will es nicht die Orientierung erkennen und keine Schrägstellung zu fixieren. Jetzt ist der Befehl funktioniert gut auf alle Bilder einschließlich der 2400x2496 tiff.

Hope, das hilft heraus Menschen vor dem gleichen Problem

, was meine Situation gelöst wurde ein Foto-Editor (Paint.NET) verwenden und den Bildschärfe-Effekt bei maximal nutzen.

ich auch verwendet: doc.OCR (MODI.MiLANGUAGES.miLANG_ENGLISH, falsch, false);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top