복붙노트

[HADOOP] hadoop에로드 된 OpenCV 라이브러리가 작동하지 않습니다.

HADOOP

hadoop에로드 된 OpenCV 라이브러리가 작동하지 않습니다.

OpenCV를 Hadoop과 함께 사용하려고합니다. 아래는 제 코드입니다. OpenCV 라이브러리가 Hadoop과 잘 작동하는지 테스트하고 있습니다. 예를 들어 함수에서 OpenCV 코드를 실행하고 있습니다. Hadoop의 public int run (String [] args)입니다.

인터넷에서 검색 한 결과 Hadoop에서 OpenCV 기본 라이브러리 (libopencv_java310.so)를 추가하는 방법을 발견했습니다. 몇 가지 방법을 시도했지만 작동하지 않았습니다. 예를 들어이 튜토리얼.

hadoop-config.sh 파일에 JAVA.LIBRARY.PATH를 추가합니다. 그러나 그것은 효과가 없었습니다. 이 오류가 있습니다.

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;
}

해결법

  1. ==============================

    1.나는 같은 문제에 직면했다. 다음 해결 방법을 사용했습니다.

    나는 같은 문제에 직면했다. 다음 해결 방법을 사용했습니다.

    JavaCV 도구를 사용하여 시작할 수 있습니다. 완벽하게 작동합니다. 그런 다음 OpenCv를 사용하여 모든 opencv 라이브러리와 jar를 실행 가능한 jar 파일로 묶어서 실행 가능한 jar 파일을 만듭니다. 이제 기본 라이브러리가 운영 체제에 의해로드됩니다. 따라서 실행 가능한 jar 파일 내에서 OpenCv 네이티브 라이브러리를 추출한 코드를 작성하여 라이브러리를로드하고 마지막으로 임시 파일을 삭제하십시오.

  2. from https://stackoverflow.com/questions/36270351/opencv-library-loaded-in-hadoop-but-not-working by cc-by-sa and MIT license