Вызов через командную строку против JNI - PullRequest
3 голосов
/ 23 января 2009

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

  1. Сохранить изображение, которое в данный момент хранится в памяти, в файл (a .tif)
  2. передать имя файла изображения программе командной строки tesseract.
  3. чтение выходного текстового файла из Java с использованием FileReader.

Насколько я могу улучшить производительность, написав оболочку JNI для Tesseract? К сожалению, в Linux нет оболочки JNI с открытым исходным кодом. Мне пришлось бы сделать это самому, и я хотел бы знать, стоит ли эта выгода стоимости разработки.

Ответы [ 3 ]

4 голосов
/ 23 января 2009

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

4 голосов
/ 23 января 2009

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

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

1 голос
/ 23 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...