2015-05-31 1 views
0

Я пытаюсь реализовать простой код распознавания лиц с помощью javaCV. Я получаю сообщение об ошибке и не знаю почему.Ошибка при загрузке библиотек в JavaCV в Android

Я скопировал каждый файл .so почти все каталоги -> приложение/ЛИЭС/armeabi и приложение/SRC/основные/jniLibs также копии javacpp.jar и javacv.jar в каталог приложений/Libs

Вот ошибка:

Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: could not load library "libopencv_contrib.so" needed by "libjniopencv_contrib.so"; caused by could not load library "../../lib/libopencv_legacy.so" needed by "libopencv_contrib.so"; caused by library "../../lib/libopencv_legacy.so" not found at java.lang.Runtime.load(Runtime.java:330) at java.lang.System.load(System.java:511) at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:700) at com.googlecode.javacpp.Loader.load(Loader.java:586) at com.googlecode.javacpp.Loader.load(Loader.java:540) at com.googlecode.javacv.cpp.opencv_contrib.(opencv_contrib.java:97) at com.ifta.face.OpenCVFaceRecognizer.recognise(OpenCVFaceRecognizer.java:102) at com.ifta.face.FinalActivity.testPreviousImage(FinalActivity.java:126) at com.ifta.face.FinalActivity.onTestClicked(FinalActivity.java:50) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at android.view.View$1.onClick(View.java:3809) at android.view.View.performClick(View.java:4421) at android.view.View$PerformClick.run(View.java:17903) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:213) at android.app.ActivityThread.main(ActivityThread.java:5225) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) at dalvik.system.NativeStart.main(Native Method)

функция Java я использую:

public static void recognise(Context context, File sampleDir, File testFile) { 

    // DEBUG-1 
    if(sampleDir!=null) 
     log(context, "1. sampleDir OK. " + testFile.getAbsolutePath()); 
    else { 
     log(context, "1. sampleDir is Null"); 
     return; 
    } 


    FilenameFilter pngFilter = new FilenameFilter() { 
     public boolean accept(File dir, String name) { 
      return name.toLowerCase().endsWith(".png"); 
     } 
    }; 

    File[] imageFiles = sampleDir.listFiles(pngFilter); 

    // DEBUG-2 
    if(imageFiles!=null) { 
     log(context, "2. ImageFile OK, Files :"); 
     for(File imageFile : imageFiles) 
      log(context, "File : " + imageFile.getAbsolutePath()); 
    } 
    else { 
     log(context, "2. ImageFile Array Null"); 
     return; 
    } 

    // DEBUG-.5 
    if(testFile!=null) 
     log(context, "2.5. testFile OK. " + testFile.getAbsolutePath()); 
    else { 
     log(context, "2.5. testFile is Null"); 
     return; 
    } 

    IplImage testImage = cvLoadImage(testFile.getAbsolutePath()); 
    // DEBUG-3 
    if(imageFiles!=null) 
     log(context, "3. testImageIpl OK"); 
    else { 
     log(context, "3. testImageIpl is Null"); 
     return; 
    } 

    MatVector images = new MatVector(imageFiles.length); 

    int[] labels = new int[imageFiles.length]; 

    int counter = 0; 
    int label; 

    IplImage img; 
    IplImage grayImg; 

    for (File image : imageFiles) { 
     // Get image and label: 
     img = cvLoadImage(image.getAbsolutePath()); 
     label = Integer.parseInt(image.getName().split("\\-")[0]); 

     // Convert image to gray scale: 
     grayImg = IplImage.create(img.width(), img.height(), IPL_DEPTH_8U, 1); 
     cvCvtColor(img, grayImg, CV_BGR2GRAY); 
     // Append it in the image list: 
     images.put(counter, grayImg); 
     // And in the labels list: 
     labels[counter] = label; 
     // Increase counter for next image: 
     counter++; 
    } 

    //FaceRecognizer faceRecognizer = createFisherFaceRecognizer(); 
    FaceRecognizer faceRecognizer = createEigenFaceRecognizer(); 
    // FaceRecognizer faceRecognizer = createLBPHFaceRecognizer(); 

    faceRecognizer.train(images, labels); 

    // Load the test image: 
    IplImage greyTestImage = IplImage.create(testImage.width(), testImage.height(), IPL_DEPTH_8U, 1); 
    cvCvtColor(testImage, greyTestImage, CV_BGR2GRAY); 

    // And get a prediction: 
    //int predictedLabel = faceRecognizer.predict(greyTestImage); 
    //System.out.println("Predicted label: " + predictedLabel); 

    int[] imageLabels = new int[1]; 
    double[] confidences = new double[1]; 

    faceRecognizer.predict(greyTestImage, imageLabels, confidences); 

    log(context, "Result : Label - " + imageLabels[0] + " Conf - " + confidences[0]); 


} 

ответ

0

Я решил это после 2-х дней ... Я предполагаю, чтобы загрузить библиотеку вручную. Я добавил несколько строк

System.load("/data/data/com.ifta.face/lib/libopencv_photo.so"); 
    System.load("/data/data/com.ifta.face/lib/libopencv_flann.so"); 
    System.load("/data/data/com.ifta.face/lib/libopencv_features2d.so"); 
    System.load("/data/data/com.ifta.face/lib/libopencv_calib3d.so"); 
    System.load("/data/data/com.ifta.face/lib/libopencv_ml.so"); 
    System.load("/data/data/com.ifta.face/lib/libopencv_video.so"); 
    System.load("/data/data/com.ifta.face/lib/libopencv_legacy.so"); 
    System.load("/data/data/com.ifta.face/lib/libopencv_objdetect.so"); 
    System.load("/data/data/com.ifta.face/lib/libopencv_gpu.so"); 
    System.load("/data/data/com.ifta.face/lib/libopencv_nonfree.so"); 
    System.load("/data/data/com.ifta.face/lib/libopencv_contrib.so"); 

И одна вещь, которую я узнал, что библиотеки, имеющие имена «libjni * .so» загружаются автоматически, и те, как «libopencv _ *. Поэтому» нужно загрузить вручную. Также последовательность загрузки должна быть такой, как указано выше, потому что библиотеки зависят от предыдущих. Кто-нибудь знает, почему это происходит?

+0

Не могли бы вы рассказать мне, какие файлы jar мне нужно добавить: app/libs/armeabi, app/src/main/jniLibs, app/libs. Я использую javacv 1.2. – user1850484

Смежные вопросы