MediaPipe Framework Android Archive

کتابخانه MediaPipe Framework Android Archive (AAR) یک راه راحت برای استفاده از MediaPipe Framework با Android Studio و Gradle است. MediaPipe Framework AAR عمومی را منتشر نمی کند که بتواند برای همه پروژه ها استفاده شود. در عوض، توسعه دهندگان باید یک هدف mediapipe_aar() ایجاد کنند تا یک فایل AAR سفارشی برای پروژه های خود تولید کنند. این برای گنجاندن منابع خاصی مانند ماشین حساب MediaPipe مورد نیاز برای هر پروژه ضروری است.

مراحل ساخت یک MediaPipe Framework AAR

  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. دستور ساخت 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
    

مراحل استفاده از MediaPipe Framework AAR در 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. برنامه/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. برای افزودن وابستگی های MediaPipe و MediaPipe AAR، app/build.gradle را تغییر دهید.

    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. برای استفاده از MediaPipe در Android Studio برای مورد استفاده خود، مثال های برنامه اندروید ما را دنبال کنید. اگر به دنبال یک مثال هستید، یک نمونه تشخیص چهره را می‌توانید در اینجا پیدا کنید و یک نمونه ردیابی چند دستی را می‌توانید در اینجا پیدا کنید.