בנה את TensorFlow Lite עבור אנדרואיד

מסמך זה מתאר כיצד לבנות ספריית TensorFlow Lite Android בעצמך. בדרך כלל, אינך צריך לבנות באופן מקומי את ספריית TensorFlow Lite Android. אם אתה רק רוצה להשתמש בו, עיין בהתחלה המהירה של אנדרואיד לקבלת פרטים נוספים על אופן השימוש בהם בפרויקטים של אנדרואיד שלך.

השתמש בצילומי לילה

כדי להשתמש בצילומי מצב ליליים, הוסף את ה-repo הבא לתצורת בניית הבסיס של 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 Studio ו-Android Native Development יהיה כפוף להסכם הרישיון של Android Software Development Kit הזמין בכתובת https://developer.android.com/studio/terms (כתובת אתר כזו עשויה לעדכן או לשנות על ידי גוגל מעת לעת).

עליך לאשר את תנאי השירות כדי להוריד את הקובץ.

  • באפשרותך לשנות את גרסת Android SDK או NDK. שים את קובץ ה- Docker שהורדת בתיקייה ריקה ובנה את תמונת ה- Docker שלך על ידי הפעלת:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • הפעל את הקונטיינר של Docker באופן אינטראקטיבי על ידי הרכבת התיקיה הנוכחית שלך ל-/host_dir בתוך הקונטיינר (שים לב ש-/tensorflow_src הוא מאגר TensorFlow בתוך הקונטיינר):
docker run -it -v $PWD:/host_dir tflite-builder bash

אם אתה משתמש ב-PowerShell ב-Windows, החלף את "$PWD" ב-"pwd".

אם תרצה להשתמש במאגר TensorFlow במארח, התקן את ספריית המארח הזו במקום זאת (-v hostDir:/host_dir).

  • ברגע שאתה בתוך המכולה, אתה יכול להפעיל את הדברים הבאים כדי להוריד כלים וספריות אנדרואיד נוספים (שים לב שייתכן שתצטרך לאשר את הרישיון):
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 נדרש כדי לבנות את הקוד המקורי (C/C++) TensorFlow Lite. הגרסה המומלצת הנוכחית היא 25b, אותה ניתן למצוא כאן .
  3. ניתן להשיג את ה-SDK של Android וכלי ה-build כאן , או לחילופין כחלק מ- Android Studio . Build tools API >= 23 היא הגרסה המומלצת לבניית TensorFlow Lite.

הגדר את WORKSPACE ואת .bazelrc

זהו שלב הגדרה חד פעמי שנדרש לבניית ספריות TF Lite. הפעל את הסקריפט ./configure בספריית התשלום הבסיסית של TensorFlow, וענה "כן" כאשר הסקריפט מבקש להגדיר באופן אינטראקטיבי את ה- ./WORKSPACE ל-Android builds. הסקריפט ינסה להגדיר הגדרות באמצעות משתני הסביבה הבאים:

  • 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 המקומי מותקן, אתה יכול להשתמש בממשקי ה-API הסטנדרטיים של TensorFlow Lite Java מסקנות בקוד האפליקציה שלך.