Вопрос

Мне нужно вызвать tesseract OCR (это библиотека с открытым исходным кодом на C ++, которая выполняет оптическое распознавание символов) с сервера приложений Java. Сейчас достаточно легко запустить исполняемый файл с помощью Runtime.exec (). Основная логика будет

<Ол>
  • Сохранить изображение, которое в данный момент хранится в памяти, в файл (.tif)
  • передайте имя файла изображения программе командной строки tesseract.
  • чтение выходного текстового файла из Java с помощью FileReader.
  • Какое улучшение производительности я могу получить, написав JNI-оболочку для Tesseract? К сожалению, в Linux нет оболочки JNI с открытым исходным кодом. Я должен был бы сделать это сам, и мне интересно, стоит ли эта выгода стоимости разработки.

    Это было полезно?

    Решение

    Трудно сказать, стоило ли это того. Если вы предполагаете, что если это выполняется внутри процесса через JNI, код OCR может напрямую обращаться к данным изображения без необходимости записывать их в файл, то он, безусловно, устранит все ограничения дискового ввода-вывода.

    Я бы рекомендовал придерживаться более простого подхода и использовать параметр JNI только в том случае, если производительность не приемлема. По крайней мере, тогда вы сможете провести сравнительный анализ и оценить прирост производительности, который вы могли бы реализовать.

    Другие советы

    Если вы занимаетесь своей собственной оболочкой, я рекомендую вам ознакомиться с JNA . Это позволит вам вызывать большинство & Quot; native & Quot; библиотеки, пишущие только код Java, и окажут вам большую помощь, чем необработанный JNI, чтобы сделать это безопасно. JNA доступна для большинства платформ.

    Я согласен с твиктом. Не используйте JNI, если нет причин для этого. Стабильность вашего приложения также может быть в опасности, если вы используете вызовы JNI, если будут некоторые утечки памяти или даже сбои на вашем уровне JNI или в самом OCR. Этого никогда не произойдет, если вы используете его через интерфейс командной строки (вся память будет освобождена при выходе из программы, и все аварийные завершения программы могут быть проверены в коде вызывающего абонента).

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top