OCR Webservice

OCR Schrifterkennung/Texterkennung mit wsclient Bibliothek nutzen:

Wie kann man die Webservices von webPDF mit der wsclient Bibliothek konkret nutzen? Das wollen wir hier an einem konkreten Coding-Beispiel zeigen. Hier soll es konkret um den OCR Webservice gehen.

Wichtiger Hinweis:

Das nun folgende Coding-Beispiel beruht auf der Nutzung der webPDF wsclient Bibliothek. Um das Beispiel zu verstehen und anzuwenden, sollte zunächst folgender Blogbeitrag beachtet werden:

webPDF und Java: mit der „wsclient“ Bibliothek ganz einfach

REST- oder SOAP-Session erzeugen

Um den Webservice so aufrufen, wie wir es hier vorstellen möchten, wird davon ausgegangen, dass Sie bereits eine REST- oder SOAP-Session erzeugt haben und somit über Aufruf der WebserviceFactory entweder ein UrlConverterWebService Objekt (für eine SOAP Session) erzeugen können:

OcrWebService ocrWebService =
    WebServiceFactory.createInstance(
        session, WebServiceType.OCR
    );

Oder ein UrlConverterRestWebService Objekt (für eine REST Session) erzeugen können:

OcrRestWebService ocrWebService =
    WebServiceFactory.createInstance(
        session, WebServiceType.OCR
    );

Und diesem WebService Objekt über Aufruf der Methode setDocument() entweder ein RestDocument oder ein SoapDocument Objekt übergeben haben.

Webservice Parameter

Um ändernden Zugriff auf ein Dokument zu erhalten, müssen Sie dem Webserviceaufruf das aktuelle open und/oder permission Passwort des Dokuments mitgeben. Dies können Sie direkt am erzeugten ocrWebService Objekt tun:

ocrWebService.getPassword().setOpen("password");
ocrWebService.getPassword().setPermission("password");

Verfügt das Dokument nicht über einen entsprechenden Passwortschutz, so können Sie diesen Punkt allerdings überspringen.

Der OCR Webservice

Der OCR Webservice ist ein Endpunkt Ihres webPDF Servers, der es Ihnen ermöglicht in Grafiken Ihres PDF Dokuments Schrift/Text zu erkennen und diese entweder zu extrahieren oder direkt in einem Textlayer des PDF Dokuments zu hinterlegen.

Sie rufen das OcrType Objekt wie folgt an Ihrem OcrWebService Objekt ab, um ihm weitere Parameter zu übergeben:

OcrType ocr = ocrWebService.getOperation();

Am Objekt Ocr lassen sich folgende Parameter setzen:

language (Standardwert: „eng“)

Die Sprache in der Text erkannt werden soll. Folgende Werte sind hier möglich:

  • eng = Englisch
  • fra = Französisch
  • spa = Spanisch
  • deu = Deutsch
  • ita = Italienisch
ocr.setLanguage(OcrLanguageType.DEU);

checkResolution (Standardwert: true)

Wird dieser Wert auf true gesetzt wird geprüft, ob die Auflösung des Dokuments ausreichend für einen Texterkennung ist. Auflösungen unter 200 DPI werden hierbei abgelehnt, da Texterkennungen bei niedrig aufgelösten Grafiken in der Regel zu fehlerhaften Ergebnissen führen.

ocr.setCheckResolution(false);

forceEachPage (Standardwert: false)

Enthält ein PDF-Dokument bereits Seiten mit Textinhalt, so wird eine erneute Texterkennung regulär abgelehnt. Wird dieser Wert auf true gesetzt, so wird die Texterkennung erzwungen und ein Textlayer für sämtliche textfreien Seiten erzeugt.

ocr.setForceEachPage(true);

imageDpi (Standardwert: 200)

Dieser Wert setzt die minimale Auflösung von Ausgangsdokumenten.

ocr.setImageDpi(300);

outputFormat (Standardwert: „pdf“)

Bestimmt über das Ausgabeformat für den erkannten Text. Wird hier ein PDF Dokument gewählt, so werden die erkannten Texte als Textlayer über die Seiten des Ausgangsdokuments gelegt. Folgende Werte sind hier möglich:

• text = Text-Dokument
• hocr = XML (HOCR)
• pdf = PDF Textlayer

ocr.setOutputFormat(OcrOutputType.TEXT);

Das Objekt „page“

Für die Texterkennung werden Bilder der PDF Seiten mit der gewählten Auflösung erzeugt, wenn Sie dem Objekt Ocr ein OcrPageType Objekt hinzufügen, können Sie die Dimensionen der erzeugten Grafiken weiter beeinflussen:

OcrPageType page = new OcrPageType();
ocr.setPage(page);

Am Objekt Page lassen sich folgende Parameter setzen:

width (Standardwert: 210)

Legt die Breite der Seiten unter Nutzung der gewählten Metrics fest.

page.setWidth(800);

height (Standardwert: 297)

Legt die Höhe der Seiten unter Nutzung der gewählten Metrics fest.

page.setHeight(16);

metrics (Standardwert: „mm“)

Die Maßeinheit, in der die Maße angegeben werden sollen. Folgende Werte können hier gesetzt werden:

• mm = Millimeter
• px = Pixel

page.setMetrics(MetricsType.MM);

Ausführlicheres Beispiel für unseren gesamten Webserviceaufruf

Wir wollen jetzt ein Beispiel für den gesamten Webserviceaufruf für die Ansprache der SOAP Schnittstelle geben:

try (
    // Aufbau einer Session mit dem webPDF Server(hier SOAP):
    SoapSession session = SessionFactory.createInstance(
        WebServiceProtocol.SOAP,
        new URL("http://localhost:8080/webPDF/")
    );
    // Bereit stellen des Dokuments, das verarbeitet werden soll
    // und der Datei, in die das Ergebnis geschrieben werden soll:
    SoapDocument soapDocument = new SoapDocument(
        new File("Pfad des Quelldokuments").toURI(),
        new File("Pfad des Zieldokuments")
    )
) {
    // Wahl des Webservices über eine Factory:
    OcrWebService ocrWebService =
        WebServiceFactory.createInstance(
            session, WebServiceType.OCR
        );
    ocrWebService.setDocument(soapDocument);
    ocrWebService.getPassword().setOpen("password");
    ocrWebService.getPassword().setPermission("password");

    OcrType ocr = ocrWebService.getOperation();

    ocr.setLanguage(OcrLanguageType.DEU);
    ocr.setCheckResolution(false);
    ocr.setForceEachPage(true);
    ocr.setImageDpi(300);
    ocr.setOutputFormat(OcrOutputType.TEXT);

    OcrPageType page = new OcrPageType();
    ocr.setPage(page);

    page.setWidth(800);
    page.setHeight(600);
    page.setMetrics(MetricsType.PX);
    // Ausführung.
    ocrWebService.process();
} catch (ResultException | MalformedURLException ex) {
    // Zur Auswertung möglicher aufgetretener Fehler, stellt ihnen die
    // wsclient Bibliothek entsprechende Methoden zur Verfügung:
}

Abschließende Hinweise

  • Mehr Infos zur OCR Parameterstruktur sowie Error-Codes finden Sie in unserem Nutzerhandbuch.
  • Beachten Sie bitte auch: Sämtliche Parameter sind mit gewissen Standardwerten vorbelegt. Ist ein Standardwert angegeben und weicht dieser nicht von Ihrem gewünschten Wert ab, so ist es nicht zwingend nötig diesen Parameter zu setzen.

Weitere Coding-Beispiele für Webservices, welche Sie mit der ws-client Bibliothek nutzen können finden Sie hier.