Opencv 和 AWS Lambda

Opencv and AWS Lambda

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

编辑:准确地说,我在使用 System.LoadLibrary() 函数时遇到了问题。该 dll 在项目文件中,但 lambda 找不到它。

我建议使用 Node.js 而不是 Java,因为 Lambda 与 Node.js 配合使用效果更好。

您的代码将如下所示:

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

但在能够 运行 代码之前,您应该安装 OpenCV and its node package:

npm install opencv

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

Lambda 的额外步骤:

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

这是一篇关于此的好文章:

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

Opencv 依赖于底层 OS 库文件。对于 windows 我们需要 opencv_javaXXX.dll 文件,对于 windows 我们需要 libOpencv_javaXXX.so 文件(其中 XXX 是 opencv 版本)。如果您没有这些文件,请使用此 link http://docs.opencv.org/2.4/doc/tutorials/introduction/desktop_java/java_dev_intro.html

生成

A​​WS 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(这是亚马逊上的 public AMI)并安装了 opencv java 在这台机器上。

获得 libOpencv_javaXXX.so 后,将其添加到类路径(我将其添加到 src/main/resources),然后使用以下代码从 JVM 进程加载它。

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

System.LoadLibrary() 从 java 库路径加载库,System.Load() 将从绝对路径加载本机库。