OmniPage Capture SDK 20 – RecAPI Beispiel 2   C  C++

Capture SDK Programmbeispiele Dieses zweite Beispiel für die RecAPI Schnittstelle zeigt, wie man Seiten einer Bilddatei einzeln auswertet und wie zusätzlich zum Text auch Barcodes erkannt werden können. Um das Programm zu compilieren, legen Sie ein C++-Projekt an und tragen Sie das Include-Verzeichnis des SDK in die Include-Verzeichnisse des Projekts ein.

Im ersten Abschnitt des Programms müssen Sie den Bin-Pfad des Capture SDK eintragen, der vom gewählten Installationsort abhängt. Für eine "echte" Anwendung müssen Sie später mit Hilfe des Distribution Wizards die zur Ausführung benötigten Programmdateien des SDK in ein Unterverzeichnis der Anwendung kopieren und den Pfadnamen dieses Unterverzeichnisses an RecInitPlusS übergeben.

Im zweiten Abschnitt werden die Erkennungssprache und das Ausgabeformat eingestellt. Es ist zulässig, mehr als eine Sprache zu aktivieren, im Interesse der Erkennungsgenauigkeit sollte man aber nur so wenige Sprachen wie nötig zulassen. Eine Liste aller Ausgabeformate erhalten Sie mit den Funktionen RecGetFirstOutputFormat und RecGetNextOutputFormat.

Im dritten Abschnitt erfolgen die Text- und Barcode-Erkennung sowie die PDF-Ausgabe. Vor dem Aufruf der Erkennungsfunktion kRecRecognize können Sie entweder mit kRecLocateZones eine automatische Layout-Analyse durchführen oder mit kRecInsertZone eine eigene rechteckige Lesezone einfügen. Da Barcodes bei der Layout-Analyse nicht automatisch gefunden werden, bedienen wir uns einer Kombination dieser beiden Methoden. Wir führen erst die Layout-Analyse durch und fügen anschließend eine seitengroße Barcode-Zone an. Das resultierende PDF-Dokument enthält dann in seiner Textebene den erkannten Text und die Barcode-Werte.


#include <Windows.h>
#include <KernelApiS.h>
#include <RecApiPlusS.h>

void main(int argc, char* argv[])
   {
   // SDK-Verzeichnis bestimmen (Bitte an Installation anpassen!)
   #define CSDK_PATH "C:\\Program Files (x86)\\OmniPage Capture SDK 20\\Bin"
   // Bilddatei als Quelle (1. Kommandozeilenparameter oder SAMPLE42_G.tif aus Bin-Pfad)
   PCSTR szInputFileName = (argc>=2) ? argv[1] : CSDK_PATH"\\SAMPLE42_G.tif";
   // Dokumentdatei als Ziel (2. Kommandozeilenparameter oder SAMPLE42_G.pdf in Bin-Pfad)
   PCSTR szOutputFileName = (argc>=3) ? argv[2] : CSDK_PATH"\\SAMPLE42_G.pdf";

   // Capture SDK initialisieren
   RecInitPlusS(CSDK_PATH, "Nuance", "OP_CSDK_Sample");

   // Einstellungen vornehmen
   kRecManageLanguages(0, SET_LANG, LANG_GER);              // Erkennungssprachen: nur Deutsch
   RecSetOutputFormat(0, "Converters.Text.PDFImageOnText"); // Ausgabeformat: PDF Image on Text

   // Bilddatei öffnen
   HIMGFILE hImgFile;
   if (kRecOpenImgFile(szInputFileName, &hImgFile, IMGF_READ, FF_TIFNO) == REC_OK)
      {
      // Temporäre Dokumentdatei anlegen
      HDOC hDoc;
      char szTmpPath[MAX_PATH], szTmpFileName[MAX_PATH];
      GetTempPath(sizeof(szTmpPath), szTmpPath);
      GetTempFileName(szTmpPath, "OPD", 0, szTmpFileName);
      if (RecCreateDoc(0, szTmpFileName, &hDoc, DOC_NORMAL) == REC_OK)
         {
         // Bilddateiseiten laden
         int nPages;
         kRecGetImgFilePageCount(hImgFile, &nPages);
         for (int iPageIdx = 0; iPageIdx<nPages; iPageIdx++)
            {
            HPAGE hPage = NULL;
            if (kRecLoadImg(0, hImgFile, &hPage, iPageIdx) == REC_OK || hPage != NULL)
               {
               // Einzelseiten erkennen
               IMG_INFO imgInfo;
               kRecGetImgInfo(0, hPage, II_CURRENT, &imgInfo);
               kRecPreprocessImg(0, hPage);                     // Bildvorverarbeitung (Ausrichtung usw.)
               kRecLocateZones(0, hPage);                       // Layout-Analyse
               kRecCopyOCRZones(hPage);                         // OCR-Zonen in User-Zonen umwandeln
               // Barcode-Zone initialisieren
               ZONE barZone;
               kRecInitZone(&barZone);
               barZone.fm = FM_BARCODE;
               barZone.rm = RM_BAR;
               barZone.rectBBox.right = imgInfo.Size.cx;
               barZone.rectBBox.bottom = imgInfo.Size.cy;
               kRecInsertZone(hPage, II_CURRENT, &barZone, -1); // Barcode-Zone für gesamte Seite anfügen
               kRecRecognize(0, hPage, NULL);                   // Text- und Barcode-Erkennung durchführen
               RecInsertPage(0, hDoc, hPage, -1);               // Seite an temporäre Datei anfügen
               }
            }
         // Ausgabedatei erzeugen
         DeleteFile(szOutputFileName);                          // Vorhandene Ausgabedatei löschen
         RecConvert2Doc(0, hDoc, szOutputFileName);             // Temporäre Datei in Ausgabedatei wandeln
         RecCloseDoc(0, hDoc);
         }
      DeleteFile(szTmpFileName);                                // Temporäre Datei löschen
      kRecCloseImgFile(hImgFile);                               // Bilddatei schließen
      }

   // Programmende
   RecQuitPlusS();                                              // Capture SDK schließen
   }
	

Zu Beispiel 1      Übersicht Programmierschnittstellen