2009-07-15 13 views
8

Sto provando a utilizzare MODI in OCR per un programma di una finestra. Funziona bene per gli screenshots Afferro programmazione utilizzando win32 interoperabilità in questo modo:.NET OCRing Image

Questa immagine è poi salvata in un file e corse attraverso MODI come questo:

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

Questa parte funziona bene, tuttavia, Non voglio OCR l'intero screenshot, solo alcune parti di esso. Provo a ritagliare l'immagine in modo programmatico come segue:

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

e quindi OCR a questa immagine più piccola, tuttavia MODI lancia un'eccezione; 'Errore di esecuzione OCR', il codice di errore è -959967087.

Perché MODI può gestire la bitmap originale ma non la versione più piccola presa da essa?

risposta

7

sembra come se la risposta è nel dare MODI una tela più grande. Stavo anche cercando di prendere uno screenshot di un controllo e OCR e si è imbattuto nello stesso problema. Alla fine ho preso l'immagine del controllo, copiato l'immagine in una bitmap più grande e OCRed la bitmap più grande.

Un altro problema riscontrato è che è necessario disporre di un'estensione corretta per il file immagine. In altre parole, .tmp non lo taglia.

ho mantenuto il lavoro di creazione di una fonte più grande all'interno del mio metodo di OCR, che sembra qualcosa di simile (mi occupo direttamente con oggetti 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; 
} 

io non sono sicuro di quello che la dimensione minima è , ma sembra che 1024 x 768 faccia il trucco.

+0

qualsiasi codice sorgente completo? – Kiquenet

1

il modo ocr funziona solo con tif. prova a salvare l'immagine in "tif".

dispiace il mio cattivo inglese

0

Ho avuto lo stesso problema "problema di esecuzione OCR" con alcune immagini. Ho ridimensionato l'immagine (nel mio caso del 50%), cioè ridotto le sue dimensioni e voilà! Funziona!

0

Ho avuto lo stesso problema durante l'utilizzo del

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

su un file TIFF 2400x2496. Il ridimensionamento al 50% (riducendo la dimensione) ha risolto il problema e il metodo non generava più eccezioni, tuttavia riconosceva erroneamente il testo come rilevando "reléence" anziché "reference" o "712017" anziché "712517" . Ho continuato a provare diversi formati di immagine, ma tutti avevano lo stesso problema, fino a quando ho cambiato il comando per

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

il che significava che non voglio di rilevare l'orientamento e non fissare alcuna inclinazione. Ora il comando funziona bene su tutte le immagini incluso il tiff 2400x2496.

Spero che questo aiuta persone che affrontano lo stesso problema

3

sì i messaggi in questa discussione mi ha aiutato gettin a lavorare, qui quello che ho da aggiungere:

stava cercando di scaricare le immagini (quelle di piccole dimensioni) poi ocr ...

-Quando si elaborano le immagini, sembra che la loro dimensione deve essere pari a 2! (è stato in grado to OCR immagini: 512x512, 128x128, 256x64 .. altre dimensioni per lo più fallito (come 1103x334))

  • sfondo trasparente guai anche fatti. Ho ottenuto i migliori risultati durante la creazione di un nuovo tif con il confine powerof2, sfondo bianco, incollare l'immagine scaricata in esso, salvare.

  • scalare l'immagine non è riuscito per me, dal momento che OCR sta ottenendo risultati errati, specialmente per i caratteri "tedeschi" come "ü"

  • alla fine ho usato anche: doc.OCR (MODI.MiLANGUAGES .miLANG_ENGLISH, false, false);

  • usando modi da Office 2003

saluti

womd

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

il che significa che io non voglio di rilevare l'orientamento e non fissare alcuna inclinazione. Ora il comando funziona bene su tutte le immagini incluso il tiff 2400x2496.

Ma l'immagine dovrebbe essere in .tif.

Spero che questo aiuti le persone che affrontano lo stesso problema.

0

ciò che ha risolto la mia situazione era usare un editor di foto (Paint.NET) e utilizzare l'effetto nitidezza al massimo.

Ho anche utilizzato: doc.OCR (MODI.MiLANGUAGES.miLANG_ENGLISH, false, false);