有没有办法在maven中为javacv的原生部分设置依赖关系,而不需要手动安装和设置java.library.path?

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

我有以下的依赖关系 org.bytedeco:opencv:4.1.2-1.5.2 的项目,再由

        <groupId>org.datavec</groupId>
        <artifactId>datavec-data-image</artifactId>
        <version>${datavec.version}</version>

而为了需要 datavec-data-image open-cv加载良好,所有内部的open-cv动作都被执行。

然后,我想显式地执行一些open cv的动作。我使用了一个来自 https:/github.comrostrovskypdf-table。 做这个东西。

public class PdfTableReader {

    private TableExtractor extractor;
    private PdfTableSettings settings;

    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

而且它失败了

Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java412 in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    at pdftable.PdfTableReader.<clinit>(PdfTableReader.java:32)
    at pdftable.ExtractSyzlekFromPdf.main(ExtractSyzlekFromPdf.java:12)

我应该怎么做才能明确这一点 javacv 部分工作 datavec 图像代码,而不做双显式 open-cv 安装到我的电脑上的某个位置,并设置了 java.library.path 明确提出? 至少是 datavec 图像代码在没有这个明确设置的情况下,以某种方式获取它。

我也试着跟进这个答案。https:/stackoverflow.coma575151321759063。 但是没有成功(如果我理解正确的话,他们使用的依赖关系是以跨平台的方式提供原生库,即提供所有平台的二进制文件,并且在正确的平台上使用所需的那个)。我想应该有一种方法可以让 java.library.path 的情况下动态更新。open-cv 原生的二进制文件打包到maven的依赖关系中,并附加到项目中。但是怎么做呢?

如果DL4J的人能够解释如何正确使用那里的javacv部分,那将是完美的。

java opencv javacv deeplearning4j dl4j
1个回答
1
投票

OpenCV的Java API在 org.opencv 包中没有加载器,所以这些库需要通过外部的其他东西来加载。在JavaCPP Presets for OpenCV的情况下,这些库和封装器都被捆绑在JAR文件中,我们可以调用 Loader.load(opencv_java.class) 来加载这里的所有内容。https:/github.combytedecojavacpp-presetstreemasteropencv#documentation。

JavaCV、Deeplearning4j和DataVec没有使用OpenCV的那个Java API,它们使用的是在 org.bytedeco.opencv 包,自动加载一切,所以他们不需要调用任何东西。

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