OCR - oprogramowanie służące do rozpoznawania tekstów

Mechanizm OCR-owy pozwala aplikacjom na utworzenie z nieedytowalnych obrazów edytowalnych dokumentów. Przedstawiony przeze mnie mechanizm rozpoznawania pisma opiera się na programie Microsoft Office Document Imaging (MODI) dołączonym do pakietu Microsoft Office.

Czym jest MODI

Pomoc techniczna Microsoft-u podaje, że przy użyciu programu Microsoft Office Document Imaging, dołączonego do pakietu Microsoft Office, można używać zeskanowanych dokumentów równie łatwo, jak innych dokumentów programów pakietu Microsoft Office na komputerze. Inaczej mówiąc można pobierać tekst z obrazów i edytować ową zawartość w programach pakietu Office.

Instalacja

Program Microsoft Office Document Imaging (MODI) dostępny jest w pakiecie Microsoft Office Professional Edition 2003, w pakiecie Microsoft Office Enterprise 2007, w pakiecie Microsoft Office Professional Plus 2010 lub w programie Microsoft Office SharePoint Designer 2007.
Opis instalacji dostępny jest na stronie pomocy technicznej: Instalowanie programu MODI

Praktyczne wykorzystanie

Po instalacji należy:

1) Kliknij w menu "Component" → "Import ActiveX control".

2) Z listy dostępnych kontrolek ActiveX-owych wybierz "Microsoft Office Document Imaging XX.0 Type Library",
gdzie XX to wersja kontrolki.

3) Kliknij Install, potwierdź pojawiające się komunikaty klikając na OK we wszystkich kolejnych oknach.
Po poprawnym imporcie kontrolki, jej ikona powinna pojawić się na palecie komponentów w zakładce ActiveX.

4) Dodaj do sekcji uses następujące moduły: ComObj, MODI_TLB, OleCtrls.

5) Formatka zawiera następujące komponenty: miDocView : TMiDocView, memo : TMemo i btn_Skanuj : TButton

1) Utworz projekt, w oknie "Solution Explorer" kliknij prawym przyciskiem myszy na References, z menu wybierz "Add Reference".

2) W oknie przejdź na zakładkę COM, z listy dostępnych kontrolek ActiveX-owych wybierz "Microsoft Office Document Imaging XX.0 Type Library",
gdzie XX to wersja kontrolki.

3) Kliknij Add.

4) Dodaj do sekcji using następujący moduł: using MODI;

5) Formatka zawiera następujące kontrolki: pictureBox : PictureBox, textBox : TextBox i btn_Skanuj : Button

W klasie formularza tworzymy metodę RozpoznajDokument o następującej zawartości:

function TFormOCR.RozpoznajDokument(sciezkaDoPliku : TFileName) : TStringList;
var dokument : IDocument;
    img : IImage;
    layout : ILayout;
begin
if (FileExists(sciezkaDoPliku)) then
  begin
      Result := TStringList.Create();
      try
          dokument := IDispatch(CreateOleObject( 'MODI.Document' )) as IDocument;
          dokument.create(sciezkaDoPliku);
          dokument.OCR(miLANG_ENGLISH, true, true); //język do rozpoznania

          img := IDispatch(dokument.Images[0]) as IImage;
          layout := IDispatch(img.layout) as ILayout;

          Result.Append(layout.Text);
          miDocView.Document := dokument;
          dokument.Close(false);
      finally
          layout := nil;
          img := nil;
          dokument := nil;
      end;
  end
else Result := nil;
end;
private string RozpoznajDokument(string sciezkaDoPliku)
{
    string result = String.Empty;

    if (!String.IsNullOrEmpty(sciezkaDoPliku) && File.Exists(sciezkaDoPliku))
    {
        Document dokument;
        IImage img;
        ILayout layout;

        try
        {
            dokument = new Document();
            dokument.Create(sciezkaDoPliku);
            dokument.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);

            img = dokument.Images[0];
            layout = img.Layout;

            result = layout.Text;
            dokument.Close(false);
        }
        finally
        {
            layout = null;
            img = null;
            dokument = null;
        }
    }

    return result;
}

Nie pozostaje nam już nic innego jak wywołać metodę skanującą dokument (zdarzenie onClick w przycisk):

procedure TFormOCR.btn_SkanujClick(Sender: TObject);
var imgPath : TFileName;
begin
imgPath := 'f:\snap.bmp'; //ścieżka do pliku do rozpoznania, najlepiej BMP
memo.Lines.AddStrings(Self.RozpoznajDokument(imgPath));
end;
private void btn_Skanuj_Click(object sender, EventArgs e)
{
    string imgPath = @"f:\snap.bmp"; //ścieżka do pliku do rozpoznania, najlepiej BMP

    pictureBox.Load(imgPath);
    textBox.Text = this.RozpoznajDokument(imgPath);
}

Ostatecznie wygląda to tak:

Dostępne rozpoznawalne języki:
miLANG_CZECH
miLANG_DANISH
miLANG_GERMAN
miLANG_GREEK
miLANG_ENGLISH
miLANG_SPANISH
miLANG_FINNISH
miLANG_FRENCH
miLANG_HUNGARIAN
miLANG_ITALIAN
miLANG_JAPANESE
miLANG_KOREAN
miLANG_DUTCH
miLANG_NORWEGIAN
miLANG_POLISH
miLANG_PORTUGUESE
miLANG_RUSSIAN
miLANG_SWEDISH
miLANG_TURKISH
miLANG_CHINESE_TRADITIONAL
miLANG_SYSDEFAULT
miLANG_CHINESE_SIMPLIFIED

Etykiety: 

Dodaj nowy komentarz

Filtrowany HTML

  • Adresy internetowe są automatycznie zamieniane w odnośniki, które można kliknąć.
  • Dozwolone znaczniki HTML: <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Znaki końca linii i akapitu dodawane są automatycznie.
  • Tekstowe buźki będą zamieniane na ich graficzne odpowiedniki.

Czysty tekst

  • Znaczniki HTML niedozwolone.
  • Adresy internetowe są automatycznie zamieniane w odnośniki, które można kliknąć.
  • Znaki końca linii i akapitu dodawane są automatycznie.
  • Tekstowe buźki będą zamieniane na ich graficzne odpowiedniki.
CAPTCHA
W celu potwierdzenia, że jesteś człowiekiem, prosimy o wykonanie poniższego zadania
Target Image