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
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"], )
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
(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
Avvia Android Studio e vai al tuo progetto.
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/
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/
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" }
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.