OpenCV 库在 hadoop 中加载但不工作
OpenCV library loaded in hadoop but not working
我正在尝试将 OpenCV 与 Hadoop 结合使用。下面是我的代码。我只是在测试 OpenCV 库是否可以与 Hadoop 一起正常工作,即当我在函数中 运行 OpenCV 代码时
public int run(String[] args)
的 Hadoop。
我在网上搜索了一下,找到了一些在Hadoop中添加OpenCV原生库(libopencv_java310.so
)的方法。我尝试了一些方法,但没有用。例如 this tutorial.
它说将 JAVA.LIBRARY.PATH
添加到 hadoop-config.sh
文件。
但它没有用。我收到这个错误
Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java310 in java.library.path
at line
System.loadLibrary(Core.NATIVE.LIBRARY.NAME);
最后,我将 OpenCV 本机库 (libopencv_java310.so
) 添加到此路径(从互联网获得解决方案)
$HADOOP_HOME/lib/native
它似乎奏效了。我没有收到上述错误。
但是我在下一行收到了这个错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.objdetect.CascadeClassifier.CascadeClassifier_1(Ljava/lang/String;)
此错误位于行:
CascadeClassifier cad = new CascadeClassifier();
据我所知,如果未加载 OpenCV 本机库,我们会收到此错误。但是现在加载库了,不知道这个错误是什么原因。
public int run(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf);
job.setJarByClass(readVideoFile.class);
job.setJobName("smallfilestoseqfile");
job.setInputFormatClass(readVideoInputFormat.class);
job.setNumReduceTasks(1);
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.setMapperClass(readVideoMapper.class);
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
CascadeClassifier cad = new CascadeClassifier();
return job.waitForCompletion(true) ? 0 : 1;
}
我遇到了同样的问题。我使用了以下解决方法。
您可以从使用 JavaCV 工具开始,因为它与 hadoop 完美配合。
然后使用 OpenCv,通过将所有 opencv 库和 jar 包装在可执行 jar 中来制作可执行 jar。现在本机库由操作系统加载。所以在可执行jar文件中,编写提取OpenCv原生库的代码来temper pry文件,然后加载库,最后删除临时文件。
我正在尝试将 OpenCV 与 Hadoop 结合使用。下面是我的代码。我只是在测试 OpenCV 库是否可以与 Hadoop 一起正常工作,即当我在函数中 运行 OpenCV 代码时
public int run(String[] args)
的 Hadoop。
我在网上搜索了一下,找到了一些在Hadoop中添加OpenCV原生库(libopencv_java310.so
)的方法。我尝试了一些方法,但没有用。例如 this tutorial.
它说将 JAVA.LIBRARY.PATH
添加到 hadoop-config.sh
文件。
但它没有用。我收到这个错误
Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java310 in java.library.path
at line
System.loadLibrary(Core.NATIVE.LIBRARY.NAME);
最后,我将 OpenCV 本机库 (libopencv_java310.so
) 添加到此路径(从互联网获得解决方案)
$HADOOP_HOME/lib/native
它似乎奏效了。我没有收到上述错误。 但是我在下一行收到了这个错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.objdetect.CascadeClassifier.CascadeClassifier_1(Ljava/lang/String;)
此错误位于行:
CascadeClassifier cad = new CascadeClassifier();
据我所知,如果未加载 OpenCV 本机库,我们会收到此错误。但是现在加载库了,不知道这个错误是什么原因。
public int run(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf);
job.setJarByClass(readVideoFile.class);
job.setJobName("smallfilestoseqfile");
job.setInputFormatClass(readVideoInputFormat.class);
job.setNumReduceTasks(1);
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.setMapperClass(readVideoMapper.class);
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
CascadeClassifier cad = new CascadeClassifier();
return job.waitForCompletion(true) ? 0 : 1;
}
我遇到了同样的问题。我使用了以下解决方法。
您可以从使用 JavaCV 工具开始,因为它与 hadoop 完美配合。 然后使用 OpenCv,通过将所有 opencv 库和 jar 包装在可执行 jar 中来制作可执行 jar。现在本机库由操作系统加载。所以在可执行jar文件中,编写提取OpenCv原生库的代码来temper pry文件,然后加载库,最后删除临时文件。