2011-10-25 41 views
1

在java應用程序中,我需要使用當前在python中實現的特定圖像處理算法。 什麼是最好的方法,知道這個腳本使用Numpy庫?從java中運行python腳本(使用numpy依賴項)

我alreayd試圖使用jythonc編譯器將腳本編譯爲java,但它似乎不支持像Numpy這樣的本機庫的依賴關係。 我也嘗試過使用Jepp,但是導入Numpy時我也得到一個ImportError。

有什麼建議嗎?

回答

2

如果你使用的是Numpy,你可能不得不使用C Python,因爲它是一個編譯擴展。我建議將圖像保存到磁盤,也許將其作爲臨時文件,然後將Python作爲子進程調用。如果你正在處理二進制數據,你甚至可以嘗試內存映射Java中的數據並將路徑傳遞給子進程。

或者,根據您的情況,您可以在Python中設置一個簡單的數據處理服務器,它接受請求並返回處理後的數據。

0

儘管Joe的回答可能很簡單,但如果圖像很大(2次完整寫入和讀取),則會出現性能問題。我不是Java專家,但根據http://wiki.cacr.caltech.edu/danse/index.php/Communication_between_Java_and_Python#Communication_through_bindings,您可以開發Java庫的綁定。你可以用python做同樣的事(如果你不想學習python c api,可以用ctypes或cython)。通過這些,你可以自己構建一個不錯的python < - > java bridge in c,並傳遞一個指向圖像數據的指針(這將比在硬盤上寫入和讀取更快)。

+0

你是否建議將指向Java進程中的內存緩衝區的指針傳遞給本機Python函數?你確定你能做到嗎?而且,Python C API不會更好! – Joe

+0

正如我所說,我不是一個Java開發人員,我不太瞭解這個平臺。我知道python C API很好,而numpy API也是如此。但爲了編寫一個用於numpy數組處理的python C擴展,Cython更容易學習。 – Simon

0

對於在Java進程中使用numpy,Jep現在支持numpy。您也可以使用jpyJyNI

使用這些庫,您可以在執行計算時將Java和Python之間的圖像作爲字節數組和ndarrays傳遞。