أرشيف Android لإطار عمل MediaPipe

ومكتبة أرشيف Android (AAR) التابع لإطار عمل MediaPipe طريقة سهلة لاستخدام إطار عمل MediaPipe مع "استوديو Android" وأداة Gradle ولا يعتمد إطار عمل MediaPipe نشر تقنية AAR عامة يمكن استخدامها في جميع المشروعات. بدلاً من ذلك، يحتاج المطورون لإنشاء هدف mediapi_aar() لإنشاء ملف AAR مخصص مماثلة. وهذا ضروري لتضمين موارد محددة مثل حاسبات MediaPipe مطلوبة لكل مشروع.

خطوات إنشاء ميزة "الاقتراحات المطبّقة تلقائيًا" لإطار عمل MediaPipe

  1. إنشاء هدف mediapi_aar() .

    في دليل MediaPipe، أنشئ هدفًا جديدًا ()mediape_aar() في BUILD الملف. تحتاج إلى معرفة الحاسبات المستخدمة في الرسم البياني توفير تبعيات الحاسبة إلى mediapi_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. شغِّل أمر إصدار 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. (اختياري) احفظ ميزة "التطبيق التلقائي للاقتراحات" في موقعك الجغرافي المفضّل.

    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 في "استوديو Android" مع Gradle

  1. شغِّل "استوديو Android" وانتقِل إلى مشروعك.

  2. انسخ AAR إلى app/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. تحويل التطبيق/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. عدِّل app/build.gradle لإضافة تبعيات MediaPipe وMediaPipe AAR.

    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" وحالة الاستخدام. إذا كنت تبحث عن مثال، يمكنك تحديد مثال على ميزة "التعرّف على الوجوه" تم العثور على هنا يمكن العثور على مثال للتتبع متعدد اليد هنا