OpenCV + Android - 人脸识别不工作

OpenCV + Android - face recognition not working

我已经实现了这个项目:https://github.com/yaylas/AndroidFaceRecognizer into Android Studio. I included OpenCV using tutorial: https://www.youtube.com/watch?v=OTw_GIQNbD8(这是静态初始化)。此外,我在 Android Studio 设置中设置了正确的 NDK 位置。 问题是,如果我添加这个 Class:

package com.yaylas.sytech.facerecognizer;

import java.util.Vector;

import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;

import android.widget.Toast;

public class DetectionBasedTracker
{
    public DetectionBasedTracker(String cascadeName, int minFaceSize, boolean isFaceDetector) {
        mNativeObj = nativeCreateObject(cascadeName, minFaceSize, isFaceDetector);
    }

    public long getNativeObj(){
        return mNativeObj;
    }

    public void setMinFaceSize(int size) {
        nativeSetFaceSize(mNativeObj, size);
    }

    public void detect(Mat imageGray, MatOfRect faces) {
        nativeDetect(mNativeObj, imageGray.getNativeObjAddr(), faces.getNativeObjAddr());
    }

    public void release() {
        nativeDestroyObject(mNativeObj);
        mNativeObj = 0;
    }
    public static Vector<Mat> imageVector = new Vector<Mat>();
    public static void addElement(Mat m){
        imageVector.add(m);
        System.out.println("--------------------------------- elementAdded: "+imageVector.size());
    }

    public static long getElementAt(int index){
        if(index >= imageVector.size() || index < 0){
            return 0;
        }

        System.out.println("-------------------------***** get element: "+imageVector.size()+"  index: "+index);
        return imageVector.elementAt(index).getNativeObjAddr();
    }

    public static int getImageCount(){
        return imageVector.size();
    }


    private long mNativeObj = 0;

    private static native long nativeCreateObject(String cascadeName, int minFaceSize, boolean faceDetection);
    private static native void nativeDestroyObject(long thiz);
    private static native void nativeStart(long thiz);
    private static native void nativeStop(long thiz);
    private static native void nativeSetFaceSize(long thiz, int size);
    private static native void nativeDetect(long thiz, long inputImage, long faces);

}

返回错误:

Cannot resolve corresponding JNI function

我什么都试过了,还是报错。请问,哪里有问题?

运行时可能无法解析 JNI 函数的原因有多种。检验这些假设:

  • 本机代码库未捆绑到您的 APK 中。在 APK 中查找它。
  • 本机代码库在错误的 APK 目录中。再说一遍,看看。
  • Java class 被 ProGuard 破坏,因此名称不再与本机库匹配。尝试关闭 ProGuard。对于调试版本应该关闭它。
  • 如果您的本机代码库是为 ARM 编译的,但您 运行 在基于 x86 的 Android 模拟器中(反之亦然),它将无法加载该库。
  • 想出更多的假设,然后检验它们。

页面 http://opencv.org/platforms/android.html 在 Android 上有很多关于 OpenCV 的信息,包括教程链接。