【发布时间】:2020-04-21 18:37:01
【问题描述】:
我对@987654324@ 有依赖关系,而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 安装并明确设置java.library.path?至少datavec 图像代码在没有这种显式设置的情况下以某种方式获得它。
我也尝试跟进这个答案:https://stackoverflow.com/a/57515132/1759063 但没有成功(如果我理解正确,他们使用以跨平台方式提供本机库的依赖项,即提供所有平台二进制文件,而需要的是在正确的平台上使用)。如果打包到 maven 依赖项的 open-cv 本机二进制文件附加到项目,我想应该有一种方法可以使 java.library.path 动态更新。但是怎么做呢?
如果 DL4J 的人可以解释如何正确使用那里的 javacv 部分,那就完美了。
【问题讨论】:
-
你给
Loader.load(opencv_java.class)打过电话吗? github.com/bytedeco/javacpp-presets/tree/master/… -
@SamuelAudet 不,我使用了
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);Loader的完整类名是什么?它来自什么库/依赖项? -
@SamuelAudet 抱歉,错过了您附加的链接,知道了,让我检查一下
-
@SamuelAudet 是的,这有帮助。请发表您的评论作为官方答案。 DL4J 代码中没有明确调用此行,可能是因为它在引擎盖下的某处被调用。并且恰好在
System.loadLibrary(Core.NATIVE_LIBRARY_NAME)双重调用的位置使用此Loader.load(opencv_java.class)的双重调用导致如下异常:java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:724)
标签: java opencv javacv deeplearning4j dl4j