2 votes

Passer l'image (données matricielles dans Android) d'Android à c++ natif et détecter le visage.

Je donne le cadre de la caméra et lance OpenCV dans un projet Android mais je ne sais pas comment passer le cadre à une méthode C++ et exécuter la détection de visage à partir de là ...

Comment le pourrais-je ?

J'utilise CameraBridgeViewBase.CvCameraViewListener2 et ensuite j'ai un cadre comme celui-ci :

public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
    mRgba = inputFrame.rgba();
    Core.transpose(mRgba, mRgbaT);
    Imgproc.resize(mRgbaT, mRgbaF, mRgbaF.size(), 0,0, 0);
    Core.flip(mRgbaF, mRgba, 1 );
    return mRgba; 
}

Je ne sais pas comment envoyer une image de caméra d'Android à c++ et ensuite renvoyer cette image de caméra de c++ à Android.

3voto

vSomers Points 407

Vous devez installer OpenCV sur Android avec le support du Native Development Kit (NDK). Ce NDK Android vous permet d'implémenter votre pipeline de traitement d'images OpenCV en C++ et d'appeler ce code C++ à partir du code Android Kotlin/Java via JNI (Java Native Interface).

Vous devrez d'abord définir un fichier java native fonction dans MainActivity.java :

public native void processFrame(long matAddrGray);

Vous définirez ensuite un équivalent C++ dans un fichier native-lib.cpp fichier :

void JNICALL Java_com_example_nativeopencvandroidtemplate_MainActivity_processFrame(JNIEnv *env, jobject instance, jlong matAddrGray)

Appeler le processFrame fonction native de java invoquera en fait l'équivalent C++ :

 public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
        Mat matGray = inputFrame.gray();
        processFrame(matGray.getNativeObjAddr());
        return matGray;
    }

Vous pouvez ensuite récupérer votre objet Mat en C++ et le traiter :

void JNICALL Java_com_example_nativeopencvandroidtemplate_MainActivity_processFrame(JNIEnv *env, jobject instance, jlong matAddrGray) {
     Mat &mGr = *(Mat *) matAddrGray;

     // process Mat
     ...
}

Voici un tutoriel sur Github avec un exemple d'application native OpenCV et des instructions sur la façon de configurer OpenCV 4.1.1 pour Android dans Android Studio avec le support NDK.

Disclaimer : J'ai écrit ce tutoriel

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X