قم ببناء TensorFlow Lite لنظام Android

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

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

لاستخدام اللقطات الليلية ، أضف الريبو التالي إلى جذر Gradle build config.

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'
        }
    }
}

قم ببناء TensorFlow Lite محليًا

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

قم بإعداد بيئة البناء باستخدام Docker

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

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

يجب أن تقر بشروط الخدمة لتنزيل الملف.

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

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

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

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

الآن يجب أن تنتقل إلى تكوين مساحة العمل وقسم .bazelrc لتكوين إعدادات البناء.

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

قم بإعداد بيئة البناء بدون Docker

قم بتثبيت Bazel و Android

Bazel هو نظام البناء الأساسي لـ TensorFlow. للبناء معه ، يجب أن يكون لديك وتثبيت Android NDK و SDK على نظامك.

  1. قم بتثبيت أحدث إصدار من نظام Bazel build .
  2. يلزم توفر Android NDK لإنشاء كود TensorFlow Lite (C / C ++) الأصلي. الإصدار الحالي الموصى به هو 21e ، والذي يمكن العثور عليه هنا .
  3. يمكن الحصول على Android SDK وأدوات الإنشاء هنا ، أو بدلاً من ذلك كجزء من Android Studio . أدوات البناء API> = 23 هو الإصدار الموصى به لبناء TensorFlow Lite.

قم بتكوين مساحة العمل و 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-r21e"
build --action_env ANDROID_NDK_API_LEVEL="26"
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 --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
  --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
  --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 .

أضف AAR مباشرة إلى المشروع

انقل ملف 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')
}

قم بتثبيت 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 في كود التطبيق الخاص بك.