从Java运行带有numpy依赖的Python脚本

1 投票
3 回答
2533 浏览
提问于 2025-04-17 04:58

在一个Java应用程序中,我需要使用一个特定的图像处理算法,而这个算法目前是用Python实现的。考虑到这个脚本使用了Numpy库,最好的解决办法是什么呢?

我已经尝试过用jythonc编译器把这个脚本编译成Java,但似乎它不支持像Numpy这样的本地库依赖。我也尝试过使用Jepp,但在导入Numpy时也遇到了ImportError错误。

有什么建议吗?

3 个回答

0

如果你想在Java程序中使用numpy,现在可以通过Jep来实现。你也可以使用jpy或者JyNI

使用这些库,你可以在Java和Python之间传递图像,像传递字节数组和ndarray一样,进行计算。

0

虽然Joe的回答很简单,但如果图片很大,你可能会遇到性能问题(需要进行两次完整的写入和读取)。我不是Java专家,但根据这个链接,你可以开发C和Java之间的连接。你也可以用Python来做同样的事情(如果你不想学习Python的C接口,可以使用ctypes或cython)。

通过这些方法,你可以自己在C语言中搭建一个Python和Java之间的桥梁,这样就可以直接传递图片数据的指针(这样比在硬盘上写入和读取要快得多)。

3

如果你在用Numpy,可能需要用C语言的Python,因为它是一个编译过的扩展。我的建议是把图片保存到硬盘上,可能可以先存成一个临时文件,然后再通过子进程来调用Python。如果你在处理二进制数据,甚至可以尝试在Java中进行内存映射,然后把数据的路径传给子进程。

另外,根据你的具体情况,你也可以在Python中搭建一个简单的数据处理服务器,接受请求并返回处理后的数据。

撰写回答