我正在尝试将 OpenCV 与 Hadoop 一起使用。下面是我的代码。我只是在测试 OpenCV 库是否适用于 Hadoop,即当我在
public int run(String[] args)
Hadoop 功能中运行 OpenCV 代码时。
我在网上搜索,发现了一些如何libopencv_java310.so
在 Hadoop 中添加 OpenCV 原生库()的方法。我尝试了一些方法,但没有奏效。例如本教程。
它说添加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
) 添加到此路径(从 Internet 获取解决方案)
$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;
}