إنشاء TensorFlow Lite لنظام Android

يوضّح هذا المستند كيفية إنشاء مكتبة TensorFlow Lite Android على جهازك. عادةً، لا تحتاج إلى إنشاء مكتبة TensorFlow Lite لنظام التشغيل Android محليًا.

استخدام ميزة "اللقطات الليلية"

لاستخدام اللقطات الليلية، أضِف الريب التالي التالي إلى إعدادات إصدار Gradle الجذري.

allprojects {
    repositories {      // should be already there
        mavenCentral()  // should be already there
        maven {         // add this repo to use snapshots
          name 'ossrh-snapshot'
          url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
    }
}

إضافة لقطات ليلية إلى التبعيات (أو تعديلها حسب الحاجة) إلى Build.gradle

...
dependencies {
    ...
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
    implementation 'org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly-SNAPSHOT'
    implementation 'org.tensorflow:tensorflow-lite-support:0.0.0-nightly-SNAPSHOT'
    ...
}
...

إنشاء TensorFlow Lite على الجهاز

في بعض الحالات، قد ترغب في استخدام إصدار محلي من TensorFlow Lite. على سبيل المثال، قد تنشئ برنامجًا ثنائيًا مخصّصًا يتضمّن عمليات محددة من TensorFlow أو يمكنك إجراء تغييرات محلية على TensorFlow Lite.

إعداد بيئة الإصدار باستخدام Docker

  • نزِّل ملف Docker. من خلال تنزيل ملف Docker، أنت توافق على أنّ بنود الخدمة التالية تحكم استخدامك له:

يشير النقر على القبول إلى موافقتك بموجب هذه الوثيقة على أنّ كل استخدامات "استوديو Android" و"مجموعة أدوات تطوير البرامج من Android" تخضع لـ "اتفاقية ترخيص أدوات تطوير برامج Android" المتوفّرة على https://developer.android.com/studio/terms (قد تعدّل Google عنوان URL هذا أو تغيّره من حين لآخر).

لتنزيل الملف، عليك الموافقة على بنود الخدمة.

  • يمكنك اختياريًا تغيير إصدار حزمة تطوير البرامج (SDK) لنظام التشغيل Android أو إصدار NDK. ضع ملف Docker الذي تم تنزيله في مجلد فارغ وأنشئ صورة Docker عن طريق تشغيل:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • شغِّل حاوية Docker بشكل تفاعلي من خلال تثبيت المجلد الحالي على /host_dir داخل الحاوية (يُرجى العلم أنّ /thenorflow_src هو مستودع TensorFlow داخل الحاوية):
docker run -it -v $PWD:/host_dir tflite-builder bash

إذا كنت تستخدم PowerShell على نظام التشغيل Windows، فاستبدل "$PWD" بـ "pwd".

إذا كنت ترغب في استخدام مستودع TensorFlow على المضيف، يمكنك تحميل دليل المضيف هذا بدلاً من ذلك (-vhostDir:/host_dir).

  • بعد الدخول إلى الحاوية، يمكنك تشغيل ما يلي لتنزيل أدوات ومكتبات إضافية من Android (يُرجى العلم أنّه قد يلزمك قبول الترخيص):
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

يجب الآن المتابعة إلى القسم ضبط Workspace. وbazelrc. لضبط إعدادات الإصدار.

بعد الانتهاء من إنشاء المكتبات، يمكنك نسخها إلى /host_dir داخل الحاوية بحيث يمكنك الوصول إليها على المضيف.

إعداد بيئة الإصدار بدون Docker

تثبيت المتطلّبات الأساسية Bazel وAndroid

Bazel هو نظام التصميم الأساسي لمنصة TensorFlow. لإنشاء المحتوى باستخدامه، يجب أن يكون مثبتًا وتثبيت NDK وحزمة تطوير البرامج (SDK) على نظام التشغيل Android على نظامك.

  1. ثبِّت أحدث إصدار من نظام إصدار Bazel.
  2. يلزم توافر Android NDK لإنشاء التعليمات البرمجية الأصلية (C/C++) TensorFlow Lite. الإصدار الحالي المقترَح هو 25b، ويمكن العثور عليه هنا.
  3. يمكن الحصول على حزمة تطوير البرامج (SDK) لنظام التشغيل Android وأدوات الإنشاء هنا، أو بدلاً من ذلك كجزء من استوديو Android. Build tools API >= 23 هو الإصدار الموصى به لإنشاء TensorFlow Lite.

إعداد WORKSPACE و .bazelrc

هذه خطوة إعداد لمرة واحدة مطلوبة لإنشاء مكتبات TF Lite. شغِّل النص البرمجي ./configure في دليل الدفع والجذر TensorFlow وأجب بـ "نعم" عندما يطلب النص البرمجي إعداد ./WORKSPACE لإصدارات Android بشكل تفاعلي. سيحاول النص البرمجي ضبط الإعدادات باستخدام متغيرات البيئة التالية:

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

إذا لم يتم ضبط هذه المتغيرات، يجب تقديمها بشكل تفاعلي في رسالة طلب النص. من المفترض أن تؤدي عملية الإعداد الناجحة إلى ظهور إدخالات مشابهة لما يلي في ملف .tf_configure.bazelrc في المجلد الجذر:

build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r25b"
build --action_env ANDROID_NDK_API_LEVEL="21"
build --action_env ANDROID_BUILD_TOOLS_VERSION="30.0.3"
build --action_env ANDROID_SDK_API_LEVEL="30"
build --action_env ANDROID_SDK_HOME="/usr/local/android/android-sdk-linux"

الإنشاء والتثبيت

بعد إعداد Bazel بشكل صحيح، يمكنك إنشاء TensorFlow Lite AAR من دليل الدفع الجذري على النحو التالي:

bazel build -c opt --cxxopt=--std=c++17 --config=android_arm64 \
  --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
  --define=android_dexmerger_tool=d8_dexmerger \
  --define=android_incremental_dexing_tool=d8_dexbuilder \
  //tensorflow/lite/java:tensorflow-lite

سيؤدي هذا الإجراء إلى إنشاء ملف AAR في bazel-bin/tensorflow/lite/java/. تجدر الإشارة إلى أنّ هذا الأمر يؤدي إلى إنشاء تقنية AAR "دهنية" باستخدام عدّة بُنى مختلفة، وفي حال لم تكن بحاجة إليها جميعًا، يمكنك استخدام المجموعة الفرعية المناسبة لبيئة النشر.

يمكنك إنشاء ملفات AAR أصغر تستهدف مجموعة فقط من النماذج على النحو التالي:

bash tensorflow/lite/tools/build_aar.sh \
  --input_models=model1,model2 \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

أعلى النص البرمجي سيتم إنشاء ملف tensorflow-lite.aar واختياريًا ملف tensorflow-lite-select-tf-ops.aar إذا كان أحد النماذج يستخدم عمليات Tensorflow لمزيد من التفاصيل، يُرجى الاطّلاع على قسم تقليل حجم برنامج TensorFlow Lite الثنائي.

إضافة الاقتراحات المطبّقة تلقائيًا إلى المشروع مباشرةً

انقل ملف tensorflow-lite.aar إلى دليل يُسمى libs في مشروعك يمكنك تعديل ملف build.gradle الخاص بتطبيقك للإشارة إلى الدليل الجديد واستبدال تبعية TensorFlow Lite الحالية بالمكتبة المحلية الجديدة، مثلاً:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    compile(name:'tensorflow-lite', ext:'aar')
}

تثبيت ميزة "الاقتراحات المطبّقة تلقائيًا" في مستودع Maven المحلي

نفِّذ الأمر التالي من دليل الدفع الجذر:

mvn install:install-file \
  -Dfile=bazel-bin/tensorflow/lite/java/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar

في build.gradle الخاصة بتطبيقك، تأكَّد من أنّ لديك الاعتمادية mavenLocal() واستبدِل الاعتمادية العادية على TensorFlow Lite بتلك التي تتوافق مع عمليات TensorFlow المحدَّدة.

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        mavenLocal()
    }
}

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.1.100'
}

يُرجى العِلم أنّ الإصدار 0.1.100 هنا مخصّص فقط للاختبار/التطوير. بعد تثبيت AAR المحلي، يمكنك استخدام TensorFlow Lite Java API العادية في رمز التطبيق.