OpenCVをHadoopで使用しようとしています。以下は私のコードです。私は、OpenCVライブラリがHadoopで正常に動作するかどうか、つまりOpenCVコードをHadoopの関数 public int run(String[] args)
で実行しているかどうかをテストしています。OpenCVライブラリがhadoopにロードされていても動作していません
私はインターネットで検索し、OpenCVネイティブライブラリ(libopencv_java310.so
)をHadoopに追加する方法をいくつか見つけました。私はいくつかの方法を試みたが、うまくいかなかった。たとえば、this tutorialです。
JAVA.LIBRARY.PATH
〜hadoop-config.sh
というファイルが追加されています。 しかし、うまくいかなかった。私は私がこのパスにOpenCVのネイティブライブラリ(libopencv_java310.so
)を加え、最後にこのエラー
Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java310 in java.library.path
at line
System.loadLibrary(Core.NATIVE.LIBRARY.NAME);
を得た
$HADOOP_HOME/lib/native
(インターネットから解決策を得た)そして、働いているようです。上記のエラーは発生しませんでした。 しかし、私は次の行では、このエラーを得た:
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.objdetect.CascadeClassifier.CascadeClassifier_1(Ljava/lang/String;)
このエラーはラインである:OpenCVのネイティブライブラリがロードされていない場合
CascadeClassifier cad = new CascadeClassifier();
は、私の知る限りでは、我々はこのエラーを取得します。しかし今、ライブラリがロードされて、私はこのエラーの理由がわからない。
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;
}
メソッドではなく静的初期化子でライブラリをロードします。 'UnsatisfiedLinkErrors'は、ライブラリが複数回読み込まれる場合にもスローされます。 – user4759923
なぜ[HIPI](http://hipi.cs.virginia.edu/gettingstarted.html)を使用しないのですか? – vzamanillo
いくつかの具体的な方法がありますが、OpenCvにしかありません。 HIPIを使うことは別のことです。お返事をありがとうございます.. –