OpenCV库已在hadoop中加载,但无法工作



我正在尝试将OpenCV与Hadoop一起使用。下面是我的代码。我只是在测试OpenCV库是否与Hadoop配合良好,即当我在函数中运行OpenCV代码时Hadoop的CCD_ 1。

我在网上搜索了一下,找到了一些在Hadoop中添加OpenCV原生库(libopencv_java310.so)的方法。我尝试了一些方法,但没有成功。例如本教程。

它说将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本地库来回火prick文件,然后加载库,最后删除临时文件。

相关内容

  • 没有找到相关文章

最新更新