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

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

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

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

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

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

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

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

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

من خلال النقر على قبول، فإنك توافق أن جميع استخدام أدوات تطوير الروبوت ستوديو والروبوت الأصلية سيتم تحكمها اتفاقية الترخيص الروبوت أدوات تطوير برامج متوفرة في 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 إضافية (لاحظ أنك قد تحتاج إلى قبول الترخيص):
android update sdk --no-ui -a --filter tools,platform-tools,android-${ANDROID_API_LEVEL},build-tools-${ANDROID_BUILD_TOOLS_VERSION}

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

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

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

قم بتثبيت Bazel و Android

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

  1. تثبيت أحدث إصدار من نظام بناء بازل .
  2. يلزم توفر Android NDK لإنشاء كود TensorFlow Lite (C / C ++) الأصلي. النسخة الموصى الحالي هو 19C، الذي يمكن الاطلاع عليه هنا .
  3. أدوات بناء الروبوت SDK ويمكن الحصول على هنا ، أو بدلا من ذلك كجزء من الروبوت ستوديو . أدوات البناء API> = 23 هو الإصدار الموصى به لبناء TensorFlow Lite.

قم بتكوين مساحة العمل و

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

  • 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-r19c"
build --action_env ANDROID_NDK_API_LEVEL="21"
build --action_env ANDROID_BUILD_TOOLS_VERSION="28.0.3"
build --action_env ANDROID_SDK_API_LEVEL="23"
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 \
  //tensorflow/lite/java:tensorflow-lite

وهذا إنشاء ملف AAR في bazel-bin/tensorflow/lite/java/ . لاحظ أن هذا يبني 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 لايت حجم ثنائي الحد القسم.

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

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

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'http://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 لايت مع واحدة لديها دعم لالتقاط TensorFlow مختارة:

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

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

علما بأن 0.1.100 النسخة هنا هو محض من أجل اختبار / التنمية. مع AAR المحلية المثبتة، يمكنك استخدام معيار TensorFlow لايت جافا الاستدلال واجهات برمجة التطبيقات في شفرة التطبيق.