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

يصف هذا المستند كيفية إنشاء مكتبة TensorFlow Lite Android بنفسك. عادةً، لا تحتاج إلى إنشاء مكتبة TensorFlow Lite Android محليًا. إذا كنت تريد استخدامها فقط، فراجع البدء السريع لنظام Android للحصول على مزيد من التفاصيل حول كيفية استخدامها في مشاريع 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، فإنك توافق على أن شروط الخدمة التالية تحكم استخدامك له:

بالنقر على "قبول"، فإنك توافق بموجبه على أن جميع استخدامات Android Studio وAndroid Native Development Kit ستخضع لاتفاقية ترخيص Android Software Development Kit المتوفرة على 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}"

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

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

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

تثبيت متطلبات Bazel وAndroid

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

  1. قم بتثبيت أحدث إصدار من نظام بناء Bazel .
  2. مطلوب Android NDK لإنشاء كود TensorFlow Lite الأصلي (C/C++). الإصدار الحالي الموصى به هو 25b، والذي يمكن العثور عليه هنا .
  3. يمكن الحصول على Android SDK وأدوات البناء هنا ، أو بدلاً من ذلك كجزء من Android Studio . واجهة برمجة تطبيقات أدوات البناء >= 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-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 ops. لمزيد من التفاصيل، يرجى الاطلاع على قسم تقليل الحجم الثنائي 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 Java للاستدلال في كود التطبيق الخاص بك.