Запустить скрипт Python (с зависимостью NumPy) из Java - PullRequest
1 голос
/ 25 октября 2011

В Java-приложении мне нужно использовать определенный алгоритм обработки изображений, который в настоящее время реализован в Python. Что было бы лучшим подходом, зная, что этот скрипт использует библиотеку Numpy?

Я уже пытался скомпилировать скрипт в java с помощью компилятора jythonc, но кажется, что он не поддерживает зависимости от нативных библиотек, таких как Numpy. Я также пытался использовать Jepp, но при импорте Numpy также получаю ImportError.

Есть предложения?

Ответы [ 3 ]

3 голосов
/ 25 октября 2011

Если вы используете Numpy, вам, вероятно, придется просто использовать C Python, так как это скомпилированное расширение. Я бы порекомендовал сохранить образ на диск, возможно, как временный файл, а затем вызвать Python как подпроцесс. Если вы имеете дело с двоичными данными, вы можете даже попытаться отобразить данные в Java и передать путь к подпроцессу.

В качестве альтернативы, в зависимости от ваших обстоятельств, вы можете настроить простой сервер обработки данных в Python, который будет принимать запросы и возвращать обработанные данные.

0 голосов
/ 07 апреля 2017

Для использования numpy в Java-процессе Jep теперь поддерживает numpy. Вы также можете использовать jpy или JyNI .

С этими библиотеками вы можете передавать изображения между Java и Python в виде байтовых массивов и ndarrays при выполнении ваших вычислений.

0 голосов
/ 25 октября 2011

Хотя ответ Джо может быть простым, у вас будут проблемы с производительностью, если изображение большое (2 полных записи и чтения).Я не эксперт по Java, но в соответствии с http://wiki.cacr.caltech.edu/danse/index.php/Communication_between_Java_and_Python#Communication_through_bindings, вы можете разрабатывать привязки j <-> java.Вы можете сделать то же самое с python (с ctypes или cython, если вы не хотите изучать python c api).

С их помощью вы можете создать себе красивый python <-> java bridge в cи передайте указатель на данные изображения (это будет быстрее, чем запись и чтение на жестком диске).

...