2016-07-27 173 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