ארכיון MediaPipe Framework ל-Android

הספרייה MediaPipe Framework Android Archive (AAR) היא דרך נוחה להשתמש MediaPipe Framework עם Android Studio ו-Gradle. אי אפשר לבצע את הפעולה הזו במסגרת MediaPipe Framework לפרסם AAR כללי שיכול לשמש בכל הפרויקטים. במקום זאת, מפתחים צריכים כדי ליצור יעד mediapipe_aar() כדי ליצור קובץ AAR מותאם אישית פרויקטים. השלב הזה נדרש כדי לכלול משאבים ספציפיים כגון מחשבונים של MediaPipe נדרשים לכל פרויקט.

שלבים לפיתוח AAR של MediaPipe Framework

  1. יוצרים יעד mediapipe_aar() .

    בספריית MediaPipe, יוצרים יעד חדש של mediapipe_aar() ב-BUILD חדש. צריך להבין באילו מחשבונים משתמשים בתרשים מספקים את יחסי התלות של המחשבון ל-mediapipe_aar(). לדוגמה, כדי בניית AAR לתרשים של זיהוי פנים, אפשר להזין את הקוד הבא 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. מריצים את פקודת ה-build של Bazel כדי ליצור את ה-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
    

    כדי להשתמש ביעד AAR לזיהוי פנים שיצרנו בשלב 1, מפעילים את:

    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. (אופציונלי) שומרים את ה-AAR במיקום המועדף.

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

שלבים לשימוש ב-AAR של MediaPipe Framework ב-Android Studio עם Gradle

  1. מפעילים את Android Studio ועוברים לפרויקט.

  2. מעתיקים את ה-AAR לאפליקציה או ל-libs.

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

    צילום מסך

  3. הפיכת app/src/main/assets ונכסי טקסט (תרשים, מודל וכו') ב- app/src/main/assets.

    יוצרים את התרשים הבינארי של MediaPipe ומעתיקים את הנכסים אל app/src/main/assets, למשל, עבור תרשים זיהוי הפנים, צריך ליצור ומעתיקים את הקובץ הבינארי תרשים ומודל ה-tflite לזיהוי הפנים.

    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/
    

    צילום מסך

  4. משנים את האפליקציה/build.gradle כדי להוסיף יחסי תלות של MediaPipe ו-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. יש לפעול לפי הדוגמאות שלנו לאפליקציות ל-Android כדי להשתמש ב-MediaPipe ב-Android Studio תרחיש לדוגמה. אם אתם מחפשים דוגמה, נמצא כאן ו ניתן למצוא דוגמה למעקב עם כמה ידיים כאן.