OpenCV + Android - kasvojentunnistus ei toimi

Pitter 09/05/2015. 1 answers, 1.029 views
android android opencv android-ndk android-ndk

Olen toteuttanut tämän projektin: https://github.com/yaylas/AndroidFaceRecognizer Android Studio. Sisällys OpenCV: n opetusohjelman kautta: https://www.youtube.com/watch?v=OTw_GIQNbD8 (tämä on staattinen alustus). Lisäksi asetan Android Studio -asetuksiin oikean NDK-sijainnin. Ongelmana on, että jos lisään tämän luokan:

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 imageVector = new Vector();
    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);

} 

Virhe palautetaan:

Ei voida ratkaista vastaavaa JNI-toimintoa

Yritin kaiken, mutta virhe on edelleen olemassa. Haluaisin kysyä, missä voi olla ongelma?

1 Answers


Jerry101 09/06/2015.

On useita syitä, miksi runtime ei ehkä pysty ratkaisemaan JNI-toimintoa. Testaa nämä hypoteesit:

  • Alkuperäinen koodikirjasto ei ole mukana APK: ssa. Katso APK: n sisälle.
  • Alkuperäinen koodikirjasto on APK: n väärässä hakemistossa. Jälleen katsokaa ja näe.
  • ProGuardin haavoittunut Java-luokka, joten nimet eivät enää vastaa natiivi kirjastoa. Kokeile katkaista ProGuard käytöstä. Sen pitäisi olla pois virheenkorjausrakenteista.
  • Jos alkuperäinen koodikirjasto on koottu ARM: lle, mutta käytät x86-pohjaista Android-emulaattoria (tai päinvastoin), se ei voi ladata kyseistä kirjastoa.
  • Ajattele enemmän hypoteeseja, kokeile sitten niitä.

Sivulla http://opencv.org/platforms/android.html on paljon tietoa OpenCV: stä Androidista, mukaan lukien linkit opetusohjelmiin.

Related questions

Hot questions

Language

Popular Tags