Question

Je suis en train d'utiliser Modi OCR programme d'une fenêtre. Il fonctionne très bien pour les captures d'écran que je prends à l'aide de programme Interop win32 comme ceci:

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

Cette image est ensuite enregistrée dans un fichier et a couru à travers MODI comme ceci:

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

Cette partie fonctionne très bien, mais je ne veux pas OCR la capture d'écran entier, seulement des parties de celui-ci. J'essaie de recadrer l'image programme comme celui-ci:

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

et puis cette petite après ROC l'image, cependant MODI lance une exception; 'Erreur en cours d'exécution OCR', le code d'erreur est -959967087.

Pourquoi peut MODI gérer le bitmap d'origine, mais pas la version plus petite prise de celle-ci?

Était-ce utile?

La solution

semble que la réponse est à donner MODI une plus grande toile. Je suis également en train de prendre une capture d'écran d'un contrôle et d'OCR et couru dans le même problème. En fin de compte, je pris l'image du contrôle, recopié l'image en bitmap et plus OCRed le bitmap plus.

Une autre question que j'ai trouvé que vous devez avoir une bonne extension pour votre fichier image. En d'autres termes, .tmp ne coupe pas.

Je gardais le travail de créer une plus grande source dans ma méthode OCR, qui ressemble à quelque chose comme ça (je traite directement avec les objets de l'image):

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

Je ne sais pas exactement ce que la taille minimale est, mais il semble que 1024 x 768 le tour est joué.

Autres conseils

oui les messages de ce fil m'a aidé gettin à travailler, voici ce que je dois ajouter:

a été d'essayer de télécharger des images (petits) puis ... ocr

-Lorsque traitement d'images, il semble que la taille theyr doit être une puissance de 2! (A pu ocr images: 512x512, 128x128, 256x64 .. autres tailles pour la plupart ont échoué (comme 1103x334))

  • fond transparent problèmes aussi fait. Je suis les meilleurs résultats lors de la création d'une nouvelle TIF avec limite powerof2, fond blanc, coller l'image téléchargée dans, enregistrez.

  • mise à l'échelle de l'image n'a pas réussi pour moi, car OCR devient mauvais résultats, spécialement pour les caractères "allemand" comme "ü"

  • i à la fin aussi utilisé: doc.OCR (MODI.MiLANGUAGES.miLANG_ENGLISH, faux, faux);

  • à l'aide du bureau 2003 modifié

salutations

womd

le RCO modi ne fonctionne que TIF avec moi. essayez d'enregistrer l'image dans "TIF".

désolé mon mauvais anglais

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

Ce qui signifie que je ne veux pas de détecter l'orientation et ne fixer aucune inclinaison. Maintenant, la commande fonctionne très bien sur toutes les images, y compris le fichier TIFF de 2400x2496.

Mais l'image doit être .tif.

Espérons que cela aide à sortir les personnes confrontées au même problème.

J'ai eu le même problème « OCR problème en cours d'exécution » avec quelques images. Je rééchelonné l'image (dans mon cas de 50%), à savoir réduit sa taille et le tour est joué! ça marche!

J'ai eu le même problème en utilisant la balise

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

sur un fichier tiff qui était 2400x2496. Redimensionnement à 50% (réduction de la taille) a résolu le problème et la méthode ne jetais pas l'exception plus, cependant, il a été reconnaissant de manière incorrecte le texte comme la détection « relerence » au lieu de « référence » ou « 712017 » au lieu de « 712517 » . Je continuais à essayer différentes tailles d'image, mais ils ont tous eu le même problème, jusqu'à ce que je l'ai changé la commande

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

ce qui signifie que je ne veux pas de détecter l'orientation et ne pas fixer de désalignement. Maintenant, la commande fonctionne très bien sur toutes les images, y compris le fichier TIFF de 2400x2496.

Espérons que cela aide à sortir les personnes confrontées au même problème

ce qui a résolu ma situation utilisait un éditeur de photos (Paint.NET) et utiliser l'effet affûter au maximum.

J'ai aussi utilisé: doc.OCR (MODI.MiLANGUAGES.miLANG_ENGLISH, faux, faux);

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top