Sto cercando di utilizzare OpenCV con Hadoop. Di seguito è il mio codice. Sto solo testando se le librerie OpenCV funzionano bene con Hadoop, cioè quando eseguo codice OpenCV nella funzione public int run(String[] args)
di Hadoop.La libreria OpenCV è caricata in hadoop ma non funziona
Ho cercato su Internet e ho trovato alcuni modi per aggiungere la libreria nativa OpenCV (libopencv_java310.so
) in Hadoop. Ho provato alcuni modi, ma non ha funzionato. Ad esempio this tutorial.
Si dice aggiungi JAVA.LIBRARY.PATH
a hadoop-config.sh
file. Ma non ha funzionato. Ho ottenuto questo errore
Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java310 in java.library.path
at line
System.loadLibrary(Core.NATIVE.LIBRARY.NAME);
Infine, ho aggiunto la libreria nativa OpenCV (libopencv_java310.so
) a questo percorso (ottenuto soluzione da internet)
$HADOOP_HOME/lib/native
E sembra aver funzionato. Non ho ricevuto l'errore sopra riportato. Ma ho ottenuto questo errore alla riga successiva:
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.objdetect.CascadeClassifier.CascadeClassifier_1(Ljava/lang/String;)
Questo errore è alla riga:
CascadeClassifier cad = new CascadeClassifier();
Per quanto ne so, si ottiene questo errore se OpenCV libreria nativa non è stato caricato. Ma ora la libreria è caricata, non so qual è la ragione di questo errore.
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;
}
Non caricare le librerie in un metodo, ma in un inizializzatore statico. 'UnsatisfiedLinkErrors' vengono lanciati anche se si tenta di caricare una libreria più di una volta. – user4759923
Perché non utilizzare [HIPI] (http://hipi.cs.virginia.edu/gettingstarted.html)? – vzamanillo
Ci sono alcuni metodi specifici, che ci sono solo in OpenCv. Usare HIPI è una cosa diversa. Grazie per la tua risposta.. –