2016-07-27 160 views
3

我在Java廣告中寫了一個lambda函數,希望使用opencv庫。我很難理解如何設置它。請幫忙。我可以在本地設置它,但是我對lambda部分非常困惑。Opencv和AWS Lambda

編輯:準確地說,我遇到了System.LoadLibrary()函數的問題。該DLL在項目文件中,但lambda無法找到它。

+0

請確切地說明你正在試圖用OpenCV和Lambda做什麼,這樣我們可以更好地幫助你。 Lambda本質上是一個遠程代碼運行器,可以在觸發時做任何你想做的事情。應用程序真的是無窮無盡的,所以你必須在你的問題中具體。 請參閱此並再試一次http://stackoverflow.com/help/how-to-ask –

+0

我沒有得到的是lambda代碼將如何加載本機庫。我想處理來自S3的圖像。 – JSmith

+0

一個dll用於Windows環境,而Lambda在Linux環境下運行,所以這不起作用。你看過這篇文章嗎? HTTPS://aws.amazon。com/blogs/compute/nodejs-packages-in-lambda/ –

回答

0

我推薦使用Node.js而不是Java,因爲Lambdas更適合Node.js。

您的代碼將是這樣的:

cv = require('opencv'); 
//do something with cv... 

但是能夠運行的代碼之前,你應該安裝OpenCV及其node package

npm install opencv 

這將創建一個文件夾node_modules。一旦在本地運行您的代碼,您需要執行一個額外步驟,然後將所有內容(即your-code.jsnode_modules文件夾)壓縮爲lambda-package.zip並將其上傳到AWS Lambda。對於LAMBDA

額外的步驟:

LAMBDA代碼在亞馬遜的Linux環境下運行(不是你的本地環境)。這意味着您應該在該環境中構建節點包。您可以啓動EC2實例並在該機器上執行npm install部件,或者您可以使用泊塢窗圖像。

下面是關於這一個很好的文章:

https://aws.amazon.com/blogs/compute/nodejs-packages-in-lambda/

+0

這不會回答問題,這是關於Java – povman

+1

@povman我最終必須使用python。在這種情況下Nodejs和python更容易處理。 – JSmith

2

opencv的是依賴於底層操作系統的庫文件。對於Windows,我們需要opencv_javaXXX.dll文件,對於Windows我們需要libOpencv_javaXXX.so文件(其中XXX是opencv版本)。如果您沒有這些文件,請使用此鏈接生成http://docs.opencv.org/2.4/doc/tutorials/introduction/desktop_java/java_dev_intro.html

AWS lambda基本上使用AMI名稱:amzn-ami-hvm-2016.03.3.x86_64-gp2。這是一個64位的Linux機器。要獲得libOpencv_javaXXX.so,我使用AMI名稱創建了一個EC2實例:amzn-ami-hvm-2016.03.3.x86_64-gp2(這是一個亞馬遜上的公共AMI),並在該機器上安裝了java的opencv。

將libOpencv_javaXXX.so添加到classpath(我將它添加到src/main/resources),然後使用以下代碼從JVM進程加載它。

System.load(new ClassPathResource("/libopencv_javaXXX.so").getFile().getAbsolutePath()); 

System.LoadLibrary()從java lib路徑加載庫並且System.Load()將從絕對路徑加載本地庫。

+0

非常感謝。 :) – JSmith