Question

Je dois appeler tesseract OCR (une bibliothèque open source en C ++ qui effectue la reconnaissance optique de caractères) à partir d'un serveur d'applications Java. À l'heure actuelle, il est assez facile d'exécuter le fichier exécutable à l'aide de Runtime.exec (). La logique de base serait

  1. Enregistrer une image actuellement conservée en mémoire dans un fichier (un fichier .tif)
  2. transmettez le nom du fichier image au programme de ligne de commande tesseract.
  3. lit le fichier texte de sortie de Java à l'aide de FileReader.

Quelle amélioration en termes de performances vais-je probablement obtenir en écrivant un wrapper JNI pour Tesseract? Malheureusement, il n’existe pas de wrapper JNI open source fonctionnant sous Linux. Je devrais le faire moi-même et je me demandais si l'avantage rapportait le coût de développement.

Était-ce utile?

La solution

Il est difficile de dire si cela en vaudrait la peine. Si vous supposez que si cette opération est effectuée en mode processus via JNI, le code OCR peut accéder directement aux données d'image sans avoir à l'écrire dans un fichier, cela éliminerait certainement toutes les contraintes d'E / S de disque.

Je recommanderais d’adopter l’approche la plus simple et de n’adopter l’option JNI que si les performances ne sont pas acceptables. Au moins, vous pourrez effectuer des analyses comparatives et estimer les gains de performances que vous pourrez peut-être réaliser.

Autres conseils

Si vous utilisez votre propre wrapper, je vous recommande de consulter la JNA . Cela vous permettra d’appeler la plupart des " natifs " Les bibliothèques écrivant uniquement du code Java et vous apporteront plus d’aide que JNI brut pour le faire en toute sécurité. La JNA est disponible pour la plupart des plateformes.

Je suis d'accord avec tweakt. N'utilisez pas JNI s'il n'y a aucune raison de le faire. La stabilité de votre application pourrait également être en danger si vous utilisez des appels JNI s’il existe des possibilités de fuites de mémoire, voire de blocage, dans votre couche JNI ou dans OCR lui-même. Cela n'arrivera jamais si vous l'utilisez via une interface de ligne de commande (toute la mémoire sera libérée à la sortie du programme et toutes les terminaisons de programme anormales peuvent être vérifiées dans le code de l'appelant).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top