将 OpenCV 库链接到 Scala 项目

问题描述 投票:0回答:2

我一直在尝试运行一个使用 OpenCV 库的 Scala 项目。我正在使用 Maven 构建项目,在 pom.xml 文件中我有以下依赖项:

<dependency>
    <groupId>org.openpnp</groupId>
    <artifactId>opencv</artifactId>
    <version>4.9.0</version>
</dependency>

在代码中我还包含以下行:

System.loadLibrary(Core.NATIVE_LIBRARY_NAME)

但是当我运行该项目时,出现以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java490 in java.library.path

另外,我尝试运行的应用程序使用 Spark,我想知道是否有必要在集群的每个节点上加载库,或者一旦加载到主节点中,不同的节点将能够使用 OpenCV 类实施。

如果这个问题可能很愚蠢,我很抱歉,我一直在尝试自己寻找解决方案,但我缺乏知识使我无法理解真正的问题是什么。感谢任何愿意努力回答的人,如果您也能解释问题,我将非常感激。

请注意,我已经尝试通过构建一个胖罐子(带有依赖项的罐子)来解决该问题,但我仍然遇到相同的错误。我一直在尝试寻找解决方案,据我了解,问题可能是 OpenCV 库不在我正在使用的系统中。事实上,我读到人们建议使用绝对路径链接库:

System.loadLibrary("path/to/library.so")

我一直在尝试查找预编译的 .so 文件,但找不到(我无法在我正在使用的计算机上使用 cmake,因为我通过 ssh 连接并且没有下载工具的权限)。我正在考虑在本地计算机上编译源代码,然后将文件传输到远程计算机,但是,正如您可能已经理解的那样,此时我不确定我在做什么。

编辑: 在 @dmytro-mitin 的建议之后,我能够修复之前的错误。但现在我发现添加 System.loadLibrary(Core.NATIVE_LIBRARY_NAME) 并没有解决我之前遇到的运行时错误,即:

Caused by: java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat()J
scala opencv dynamic-library
2个回答
0
投票

您是否考虑过通过 JavaCV 包装器项目使用 OpenCV?

https://github.com/bytedeco/javacv

build.sbt
文件中,您可以执行以下操作:

libraryDependencies += "org.bytedeco" % "javacv-platform" % "1.5.9",

0
投票

起初我认为这并不重要,所以我没有提及它,但我正在使用 Apache Spark 将应用程序分发到不同的节点上。问题是,虽然可以在主节点上找到库,但每个笔记都无法找到 OpenCV 的实现。我添加了以下几行:

nu.pattern.OpenCV.loadShared()
System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME)

在映射到不同节点的函数中,现在它可以工作了。

© www.soinside.com 2019 - 2024. All rights reserved.