#java #python #numpy #jython
#java #python #numpy #jython
Вопрос:
В приложении Java мне нужно использовать определенный алгоритм обработки изображений, который в настоящее время реализован на python. Каков был бы наилучший подход, зная, что этот скрипт использует библиотеку Numpy?
Я уже пытался скомпилировать скрипт на Java с помощью компилятора jythonc, но, похоже, он не поддерживает зависимости от собственных библиотек, таких как Numpy. Я также пытался использовать Jepp, но при импорте Numpy я также получаю ImportError.
Есть предложения?
Ответ №1:
Если вы используете Numpy, вам, вероятно, придется просто использовать C Python, поскольку это скомпилированное расширение. Я бы рекомендовал сохранить изображение на диск, возможно, как временный файл, а затем вызвать Python как подпроцесс. Если вы имеете дело с двоичными данными, вы можете даже попробовать сопоставить данные в памяти на Java и передать путь к подпроцессу.
В качестве альтернативы, в зависимости от ваших обстоятельств, вы можете настроить простой сервер обработки данных на Python, который принимает запросы и возвращает обработанные данные.
Ответ №2:
Хотя ответ Джо может быть простым, у вас возникнут проблемы с производительностью, если изображение большое (2 полных записи и чтения). Я не эксперт по Java, но согласно http://wiki.cacr.caltech.edu/danse/index.php/Communication_between_Java_and_Python#Communication_through_bindings , вы можете разработать привязки c <—> java. Вы можете сделать то же самое с python (с помощью ctypes или cython, если вы не хотите изучать python c api).
С их помощью вы можете создать себе хороший python <—> java bridge на c и передать указатель на данные изображения (что будет быстрее, чем запись и чтение его на жестком диске).
Комментарии:
1. Вы предлагаете передать указатель на буфер памяти в процессе Java в собственную функцию Python? Вы уверены, что сможете это сделать? И, черт возьми, API Python C не может быть лучше!
2. Как я уже сказал, я не разработчик Java и не очень хорошо знаю платформу. Я знаю, что API python C хорош, как и API numpy. Но чтобы написать расширение python C для обработки массива numpy, Cython намного проще в освоении.