Archivio Android del framework MediaPipe

La libreria Android Archive (AAR) di MediaPipe Framework è un modo pratico per utilizzare MediaPipe Framework con Android Studio e Gradle. MediaPipe Framework non pubblica un AAR generale che può essere utilizzato da tutti i progetti. Gli sviluppatori devono invece creare un target mediapipe_aar() per generare un file AAR personalizzato per i propri progetti. Ciò è necessario per includere risorse specifiche, come i calcolatori MediaPipe necessari per ogni progetto.

Passaggi per creare un AAR framework MediaPipe

  1. Crea un target mediapipe_aar().

    Nella directory MediaPipe, crea un nuovo target mediapipe_aar() in un file Build. Devi capire quali calcolatrici vengono utilizzate nel grafico e fornire le dipendenze della calcolatrice a mediapipe_aar(). Ad esempio, per creare un AAR per un grafico di rilevamento dei volti, puoi inserire il seguente codice in mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example/Build.

    load("//mediapipe/java/com/google/mediapipe:mediapipe_aar.bzl", "mediapipe_aar")
    
    mediapipe_aar(
        name = "mediapipe_face_detection",
        calculators = ["//mediapipe/graphs/face_detection:mobile_calculators"],
    )
    
  2. Esegui il comando di build Bazel per generare l'AAR.

    bazel build -c opt --strip=ALWAYS \
        --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
        --fat_apk_cpu=arm64-v8a,armeabi-v7a \
        --legacy_whole_archive=0 \
        --features=-legacy_whole_archive \
        --copt=-fvisibility=hidden \
        --copt=-ffunction-sections \
        --copt=-fdata-sections \
        --copt=-fstack-protector \
        --copt=-Oz \
        --copt=-fomit-frame-pointer \
        --copt=-DABSL_MIN_LOG_LEVEL=2 \
        --linkopt=-Wl,--gc-sections,--strip-all \
        //path/to/the/aar/build/file:aar_name.aar
    

    Per il target AAR per il rilevamento dei volti che abbiamo definito nel passaggio 1, esegui:

    bazel build -c opt --strip=ALWAYS \
        --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
        --fat_apk_cpu=arm64-v8a,armeabi-v7a \
        --legacy_whole_archive=0 \
        --features=-legacy_whole_archive \
        --copt=-fvisibility=hidden \
        --copt=-ffunction-sections \
        --copt=-fdata-sections \
        --copt=-fstack-protector \
        --copt=-Oz \
        --copt=-fomit-frame-pointer \
        --copt=-DABSL_MIN_LOG_LEVEL=2 \
        --linkopt=-Wl,--gc-sections,--strip-all \
        //mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example:mediapipe_face_detection.aar
    
    # It should print:
    # Target //mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example:mediapipe_face_detection.aar up-to-date:
    # bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example/mediapipe_face_detection.aar
    
  3. (Facoltativo) Salva l'AAR nella posizione che preferisci.

    cp bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example/mediapipe_face_detection.aar
    /absolute/path/to/your/preferred/location
    

Passaggi per utilizzare un AAR Framework MediaPipe in Android Studio con Gradle

  1. Avvia Android Studio e vai al tuo progetto.

  2. Copia l'AAR in app/librerie.

    cp bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example/mediapipe_face_detection.aar
    /path/to/your/app/libs/
    

    Screenshot

  3. Crea app/src/main/assets e copia gli asset (grafico, modello e così via) in app/src/main/assets.

    Crea il grafico binario MediaPipe e copia gli asset in app/src/main/assets; ad esempio, per il grafico di rilevamento dei volti, devi creare e copiare il grafico binario e il modello tflite di rilevamento dei volti.

    bazel build -c opt mediapipe/graphs/face_detection:face_detection_mobile_gpu_binary_graph
    cp bazel-bin/mediapipe/graphs/face_detection/face_detection_mobile_gpu.binarypb /path/to/your/app/src/main/assets/
    cp mediapipe/modules/face_detection/face_detection_short_range.tflite /path/to/your/app/src/main/assets/
    

    Screenshot

  4. Modifica app/build.gradle per aggiungere dipendenze MediaPipe e AAR MediaPipe.

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
        implementation 'androidx.appcompat:appcompat:1.0.2'
        implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'androidx.test.ext:junit:1.1.0'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
        // MediaPipe deps
        implementation 'com.google.flogger:flogger:latest.release'
        implementation 'com.google.flogger:flogger-system-backend:latest.release'
        implementation 'com.google.code.findbugs:jsr305:latest.release'
        implementation 'com.google.guava:guava:27.0.1-android'
        implementation 'com.google.protobuf:protobuf-javalite:3.19.1'
        // CameraX core library
        def camerax_version = "1.0.0-beta10"
        implementation "androidx.camera:camera-core:$camerax_version"
        implementation "androidx.camera:camera-camera2:$camerax_version"
        implementation "androidx.camera:camera-lifecycle:$camerax_version"
        // AutoValue
        def auto_value_version = "1.8.1"
        implementation "com.google.auto.value:auto-value-annotations:$auto_value_version"
        annotationProcessor "com.google.auto.value:auto-value:$auto_value_version"
    }
    
  5. Segui i nostri esempi di app per Android per utilizzare MediaPipe in Android Studio per il tuo caso d'uso. Per un esempio, puoi trovare un esempio di rilevamento dei volti qui, mentre un esempio di monitoraggio con più mani è disponibile qui.