我正在用Java编写一个lambda函数,希望使用opencv库。我很难理解如何设置它。请帮忙。我可以在本地设置它,但我真的对lambda部分感到困惑。
编辑:准确地说,我在使用System.LoadLibrary()函数时遇到了问题。dll在项目文件中,但lambda找不到它。
Opencv依赖于底层操作系统库文件。对于windows,我们需要opencv_javaXXX.dll文件,对于windows,需要libOpencv_javaXXXX.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.0.3.x86_64-gp2。这是一台64位linux机器。为了获得libOpencv_javaXXX.so,我使用AMI名称:amzn-AMI-hvm-2016.0.3.x86_64-gp2(这是亚马逊上的公共AMI)创建了一个EC2实例,并在这台机器上安装了opencv for java。
一旦您有了libOpencv_javaXXX.so,就将其添加到类路径(我将其添加至src/main/resources),然后使用以下代码从JVM进程加载它。
System.load(new ClassPathResource("/libopencv_javaXXX.so").getFile().getAbsolutePath());
System.LoadLibrary()从java lib路径加载库,System.Load()将从绝对路径加载本机库。
我建议使用Node.js而不是Java,因为Lambdas与Node.js的配合更好。
您的代码将如下所示:
cv = require('opencv');
//do something with cv...
但在能够运行代码之前,您应该安装OpenCV及其节点包:
npm install opencv
这将创建一个node_modules
文件夹。在本地运行代码后,您需要额外执行一步,然后将所有内容(即your-code.js
和node_modules
文件夹)压缩到lambda-package.zip
中,并将其上传到AWS Lambda。
Lambda的额外步骤:
Lambda代码运行在AmazonLinux环境(而不是您的本地环境)中。这意味着您应该在该环境中构建节点包。您可以启动EC2实例并在该机器中执行npm安装部分,也可以使用docker映像。
这里有一篇关于这个的好文章:
https://aws.amazon.com/blogs/compute/nodejs-packages-in-lambda/