Opencv和AWS Lambda

3
我正在使用Java编写lambda函数,希望使用opencv库。我很难理解如何设置它。请帮忙。我可以在本地很好地设置它,但是我真的对lambda部分感到困惑。

修改: 更精确地说,我遇到了System.LoadLibrary()函数的问题。dll文件在项目文件中,但lambda找不到它。


请明确说明您在使用OpenCV和Lambda时想要做什么,以便我们更好地帮助您。Lambda本质上是一个远程代码运行器,当它被触发时,它将执行您想要的任何操作。应用程序实际上是无限的,因此您必须在问题中具体说明。请参考此链接并再次尝试:http://stackoverflow.com/help/how-to-ask - Kevin Le
我不明白的是lambda代码如何加载本地库。我想处理从S3传入的图像。 - JSmith
一个dll是为Windows环境设计的,而Lambda在Linux环境下运行,所以这不会起作用。你看过这篇文章吗?https://aws.amazon.com/blogs/compute/nodejs-packages-in-lambda/ - Mark B
请查看如何创建一个最小、完整和可验证的示例 - 我们需要看到您尝试了什么以及具体问题是什么。 - Will
其实我不知道该怎么说了。我想用Java编写Lambda函数,并使用opencv函数。我已经尝试通过将jar和dll以及.so文件添加到项目结构中来配置项目,但是总是出现UnsatisfiedLinkError错误。 - JSmith
请查看此链接;希望您正在使用其中一个必需的构建工具:http://docs.aws.amazon.com/lambda/latest/dg/lambda-java-how-to-create-deployment-package.html - Kevin Le
2个回答

4
Opencv依赖于底层操作系统库文件。对于Windows,我们需要opencv_javaXXX.dll文件;对于Linux,我们需要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名称:amzn-ami-hvm-2016.03.3.x86_64-gp2在EC2实例中启动了一个机器(这是Amazon上的公共AMI),并在该机器上安装了Java版OpenCV。
一旦您拥有libOpencv_javaXXX.so,将其添加到类路径中(我将其添加到src/main/resources中),然后使用以下代码从JVM进程中加载它。
System.load(new ClassPathResource("/libopencv_javaXXX.so").getFile().getAbsolutePath());

System.LoadLibrary()函数从Java库路径加载库,而System.Load()函数将从绝对路径加载本地库。


-4

我建议使用Node.js而不是Java,因为Lambdas与Node.js更兼容。

你的代码将会像这样:

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

但在运行代码之前,您应该安装OpenCV及其节点包

npm install opencv

这将创建一个node_modules文件夹。一旦在本地运行了您的代码,您需要执行一个额外的步骤,然后将所有内容(即your-code.jsnode_modules文件夹)压缩成lambda-package.zip并上传到AWS Lambda。

Lambda的额外步骤:

Lambda代码在Amazon Linux环境中运行(而不是您的本地环境)。这意味着您应该在该环境中构建节点包。您可以启动EC2实例并在该机器上执行npm install部分,或者您可以使用Docker镜像。

这里有一篇不错的文章:

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


1
这并没有回答问题,问题是关于Java的。 - Luke Worth
1
@povman 最终我选择了Python。在这种情况下,Node.js和Python更容易处理。 - JSmith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接