是否可以在不手动安装和设置java.library.path的情况下为maven中的javacv本机部分设置依赖关系?

我对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操作。

然后,我想明确地执行一些打开的cv执行。我使用https://github.com/rostrovsky/pdf-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双重安装并设置{ {1}}明确?至少java.library.path图像代码可以在没有此显式设置的情况下以某种方式获得它。

我也尝试遵循以下答案:https://stackoverflow.com/a/57515132/1759063,但没有成功(如果我理解正确,他们会使用依赖项以跨平台的方式发布本机库,即提供所有平台二进制文件和所需的一种用于正确的平台)。我想如果将打包到Maven依赖项的datavec本机二进制文件附加到项目,应该有一种方法可以使java.library.path动态更新。但是如何?

如果DL4J伙计们可以在那里正确解释如何使用javacv部分,那将是完美的。

ZCR0001 回答:是否可以在不手动安装和设置java.library.path的情况下为maven中的javacv本机部分设置依赖关系?

org.opencv软件包中找到的OpenCV的Java API并未附带加载程序,因此这些库需要由其他外部加载程序加载。对于OpenCV的JavaCPP预设,库和包装器都捆绑在JAR文件中,我们可以调用Loader.load(opencv_java.class)来加载此处记录的所有内容:
https://github.com/bytedeco/javacpp-presets/tree/master/opencv#documentation

JavaCV,Deeplearning4j和DataVec不使用OpenCV的Java API,它们使用org.bytedeco.opencv软件包中的API,该软件包会自动加载所有内容,因此它们不需要调用任何内容。

本文链接:https://www.f2er.com/2389852.html

大家都在问