有没有办法在 maven 中为 javacv 的本机部分设置依赖项,而无需手动安装和设置 java.library.path?



我对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安装到我的 PC 上的某个位置并显式设置java.library.path?至少datavec图像代码在没有这种显式设置的情况下以某种方式获取它。

我也试图跟进这个答案:https://stackoverflow.com/a/57515132/1759063 但没有成功(如果我理解正确,他们使用以跨平台方式交付本机库的依赖项,即交付所有平台二进制文件,并且所需的二进制文件在正确的平台上使用)。我想如果打包到 maven 依赖项的open-cv本机二进制文件附加到项目,应该有一种方法可以使java.library.path动态更新。但是怎么做呢?

如果DL4J的人可以解释如何正确使用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,它会自动加载所有内容,因此它们不需要调用任何东西。

最新更新