Frage

ich brauche tesseract OCR (seine eine Open-Source-Bibliothek in C ++, die optische Zeichenerkennung der Fall ist) aufrufen aus einer Java Application Server. Gerade jetzt ist es einfach genug, um die ausführbare Datei mit Runtime.exec () auszuführen. Die grundlegende Logik wäre

  1. Speicher Bild, das zur Zeit im Speicher gehalten wird, in einer Datei (ein .tif)
  2. passiert in den Bilddateinamen in das Tesserakts Kommandozeilenprogramm.
  3. in der Ausgabetextdatei von Java lesen mit Filereader.

Wie viel Verbesserung in Bezug auf Leistung bin ich wahrscheinlich durch das Schreiben einen JNI-Wrapper für Tesseract zu bekommen? Leider gibt es keine Open-Source-JNI-Wrapper, der in Linux funktioniert. Ich hätte es selbst zu tun und frage mich, ob der Nutzen der Entwicklungskosten wert.

War es hilfreich?

Lösung

Es ist schwer zu sagen, ob es sich lohnen würde. Wenn Sie davon ausgehen, dass im Prozess über JNI, wenn gemacht wird, kann der OCR-Code direkt die Bilddaten zugreifen, ohne sie in eine Datei zu schreiben, dann wäre es sicherlich beseitigt alle Disk-I / O-Einschränkungen gibt.

Ich würde empfehlen, mit dem einfacheren Ansatz zu gehen und nur die JNI Option Unternehmen, wenn die Leistung nicht akzeptabel ist. Zumindest dann werden Sie in der Lage sein, etwas zu tun, das Benchmarking und die Performance-Gewinne schätzen Sie zu erkennen, vielleicht in der Lage.

Andere Tipps

Wenn Sie Ihren eigenen Wrapper verfolgen kann, empfehle ich Ihnen überprüfen JNA . Es ermöglicht Ihnen, die meisten „native“ Bibliotheken nennen nur Java-Code zu schreiben, und werden Sie mehr Hilfe geben als rohe JNI tut es sicher zu tun. JNA ist für die meisten Plattformen verfügbar.

Ich bin einverstanden mit tweakt. Verwenden Sie JNI nicht, wenn es keine perfomance Gründe, dies zu tun. Ihre Anwendung Stabilität ist auch in Gefahr sein könnte, wenn Sie JNI-Aufrufe, wenn es einige Möglichkeiten, Speicherlecks sein wird oder abstürzt, auch in Ihrer JNI-Schicht oder in OCR selbst. Das wird nie passieren, wenn Sie es über die Kommandozeilenschnittstelle (alle Speicher werden am Programmende und alle anormalen Programmabbrüche freigegeben werden können, in dem Anrufercode überprüft werden).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top