OmniPage Capture SDK 20 – .NET Objects Beispiel 2  C#

Capture SDK Programmbeispiele Dieses zweite Beispiel für die .NET Objects Schnittstelle zeigt, wie man Seiten einer Bilddatei einzeln auswertet und wie zusätzlich zum Text auch Barcodes erkannt werden. Um das Programm zu compilieren, legen Sie ein C#-Projekt an und fügen Sie als Referenzen System.Drawing sowie aus dem Bin-Verzeichnis des SDK die Dateien Nuance.OmniPage.CSDK.ArgTypes.dll und Nuance.OmniPage.CSDK.Objects.dll ein.

Im ersten Abschnitt des Programms wird wieder der Bin-Pfad des Capture SDK bestimmt, der für die Initialisierung benötigt wird. Der zu diesem Zweck abgefragte Registry-Schlüssel ist nur auf dem Entwickler-PC vorhanden, auf dem das SDK installiert wurde. 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 Engine.Init ü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 der statischen Methode OutputFormats.Formats.

Im dritten Abschnitt erfolgen die Text- und Barcode-Erkennung sowie die PDF-Ausgabe. Vor dem Aufruf der Erkennungsfunktion page.Recognize können Sie entweder mit page.LocateZones eine automatische Layout-Analyse durchführen oder mit page.UserZones.InsertInputZone 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.


using System;
using System.IO;
using Microsoft.Win32;
using Nuance.OmniPage.CSDK.ArgTypes;
using Nuance.OmniPage.CSDK.Objects;

namespace Nuance.OmniPage.CSDK.Samples
  {
  class Program
    {
    static void Main(string[] args)
      {
      // SDK-Verzeichnis bestimmen (Registry-Key nur auf Entwickler-PC vorhanden!)
      string regKey = @"HKEY_LOCAL_MACHINE\Software\Nuance\CSDK20";
      string csdkPath = (string) Registry.GetValue(regKey, "BinPath", "");
      // Bilddatei als Quelle (1. Kommandozeilenparameter oder SAMPLE42_G.tif aus Bin-Pfad)
      string inputFileName = (args.Length>=1) ? args[0] : Path.Combine(csdkPath, "SAMPLE42_G.tif");
      // Dokumentdatei als Ziel (2. Kommandozeilenparameter oder Bilddateiname mit .pdf-Endung)
      string outputFileName = (args.Length>=2) ? args[1] : Path.ChangeExtension(inputFileName, "pdf");
      try
        {
        // Capture SDK initialisieren
        Engine.Init("Nuance", "OP_CSDK_Sample", true, csdkPath);

        // Einstellungen vornehmen
        SettingCollection settings = new SettingCollection();
        settings.Languages.Manage(MANAGE_LANG.SET_LANG, LANGUAGES.LANG_GER); // Sprachen: nur Deutsch
        settings.OutputFormats.Current = "Converters.Text.PDFImageOnText";   // Format: PDF Image on Text

        // Bilddatei öffnen
        using (ImageFile imgFile = new ImageFile(inputFileName, FILEOPENMODE.IMGF_READ, IMF_FORMAT.FF_TIFNO))
          {
          // Temporäre Dokumentdatei anlegen
          string tmpFileName = Path.GetTempFileName();
          using (Document document = new Document(tmpFileName, DOCOPENMODE.DOC_NORMAL, settings))
            {
            // Bilddateiseiten nacheinander laden
            for (int pageIdx = 0; pageIdx<imgFile.PageCount; pageIdx++)
              using (Page page = new Page(imgFile, pageIdx, settings))
                {
                // Einzelseiten erkennen
                page.Preprocess();                       // Bildvorverarbeitung (Ausrichtung, Bereinigung)
                page.LocateZones();                      // Layout-Analyse
                page.OCRZones.CopyToUserZones();         // OCR-Zonen in User-Zonen umwandeln
                SIZE imgSize = page[IMAGEINDEX.II_CURRENT].ImageInfo.Size;
                ZONE barZone = new ZONE() { fm = FILLINGMETHOD.FM_BARCODE,
                                            rm = RECOGNITIONMODULE.RM_BAR,
                                            rectBBox = new RECT (new POINT(), imgSize) };
                page.UserZones.InsertInputZone(barZone); // Barcode-Zone für gesamte Seite anfügen
                page.Recognize();                        // Text- und Barcode-Erkennung durchführen
                document.InsertPage(page, pageIdx);      // Seite an temporäre Datei anfügen
                }
            // Ausgabedatei erzeugen
            File.Delete(outputFileName);                 // Vorhandene Ausgabedatei löschen
            document.Convert(outputFileName);            // Temporäre Datei in Ausgabedatei konvertieren
            }
          File.Delete(tmpFileName);                      // Temporäre Datei löschen
          }
        }
      catch (Exception)
        {
        }
      }
    }
  }
	

Zu Beispiel 1      Übersicht Programmierschnittstellen