【问题标题】:Opencv and AWS LambdaOpencv 和 AWS Lambda
【发布时间】:2017-04-28 15:25:37
【问题描述】:

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

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

【问题讨论】:

  • 请准确说明您正在尝试使用 OpenCV 和 Lambda 做什么,以便我们更好地帮助您。 Lambda 本质上是一个远程代码运行器,当它被触发时,它会做任何你想做的事情。应用程序真的是无穷无尽的,所以你必须具体地提出你的问题。参考这个再试一次stackoverflow.com/help/how-to-ask
  • 我不明白 lambda 代码将如何加载本机库。我想处理来自 S3 的图像。
  • 一个 dll 是用于 Windows 环境的,而 Lambda 是在 Linux 环境中运行的,所以这是行不通的。你看过这篇文章吗? aws.amazon.com/blogs/compute/nodejs-packages-in-lambda
  • 请查看How to create a Minimal, Complete, and Verifiable example - 我们需要查看您尝试了什么以及具体问题是什么。
  • 其实我也不知道怎么说。我正在用 java 编写 Lambda 函数,并希望将 opencv 函数与它一起使用。我尝试通过将 jar 和 dll 以及 .so 文件添加到项目结构中来配置项目,但总是出现 Unsatisfiedlink 错误。

标签: opencv aws-lambda


【解决方案1】:

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)并在这台机器上安装了 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() 将从绝对路径加载本机库。

【讨论】:

    【解决方案2】:

    我建议使用 Node.js 而不是 Java,因为 Lambda 与 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 代码在 Amazon Linux 环境(不是您的本地环境)中运行。这意味着您应该在该环境中构建节点包。您可以启动 EC2 实例并在该机器上执行 npm install 部分,或者您可以使用 docker 映像。

    这是一篇很好的文章:

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

    【讨论】:

    • 这没有回答问题,它是关于 Java 的
    • @povman 我最终不得不使用 python。 Nodejs 和 python 在这种情况下更容易处理。
    猜你喜欢
    • 2016-02-08
    • 2021-08-01
    • 2017-01-28
    • 2017-11-04
    • 2018-03-08
    • 2016-06-23
    • 2020-04-20
    • 2017-01-31
    • 1970-01-01
    相关资源
    最近更新 更多