این سند نحوه ساخت کتابخانه Android TensorFlow Lite را به تنهایی توضیح می دهد. به طور معمول، نیازی به ساخت محلی TensorFlow Lite کتابخانه اندروید ندارید. اگر فقط میخواهید از آن استفاده کنید، برای جزئیات بیشتر در مورد نحوه استفاده از آنها در پروژههای Android خود ، شروع سریع Android را ببینید.
از Nightly Snapshot استفاده کنید
برای استفاده از اسنپ شات های شبانه، مخزن زیر را به پیکربندی بیلد Gradle root خود اضافه کنید.
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، موافقت می کنید که شرایط خدمات زیر بر استفاده شما از آن حاکم است:
با کلیک بر روی پذیرش، بدینوسیله موافقت میکنید که تمام استفاده از Android Studio و Android Native Development Kit تحت موافقتنامه مجوز کیت توسعه نرمافزار Android موجود در https://developer.android.com/studio/terms (چنین URL ممکن است هر چند وقت یکبار توسط گوگل به روز یا تغییر کند).
برای دانلود فایل باید شرایط خدمات را بپذیرید.- شما می توانید به صورت اختیاری نسخه Android SDK یا NDK را تغییر دهید. فایل داکر دانلود شده را در یک پوشه خالی قرار دهید و با اجرای:
docker build . -t tflite-builder -f tflite-android.Dockerfile
- با نصب پوشه فعلی خود در /host_dir در داخل کانتینر، کانتینر docker را به صورت تعاملی شروع کنید (توجه داشته باشید که /tensorflow_src مخزن TensorFlow در داخل ظرف است):
docker run -it -v $PWD:/host_dir tflite-builder bash
اگر از PowerShell در ویندوز استفاده می کنید، «$PWD» را با «pwd» جایگزین کنید.
اگر می خواهید از یک مخزن TensorFlow در هاست استفاده کنید، به جای آن دایرکتوری میزبان را مونت کنید (-v hostDir:/host_dir).
- هنگامی که داخل کانتینر هستید، میتوانید موارد زیر را برای دانلود ابزارها و کتابخانههای اضافی Android اجرا کنید (توجه داشته باشید که ممکن است لازم باشد مجوز را بپذیرید):
sdkmanager \
"build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
"platform-tools" \
"platforms;android-${ANDROID_API_LEVEL}"
اکنون باید به قسمت Configure WORKSPACE و .bazelrc بروید تا تنظیمات ساخت را پیکربندی کنید.
پس از اتمام ساخت کتابخانه ها، می توانید آنها را در /host_dir داخل کانتینر کپی کنید تا بتوانید در هاست به آنها دسترسی داشته باشید.
محیط ساخت را بدون داکر تنظیم کنید
پیش نیازهای Bazel و Android را نصب کنید
Bazel سیستم ساخت اولیه برای TensorFlow است. برای ساخت با آن، باید آن را داشته باشید و Android NDK و SDK را روی سیستم خود نصب کنید.
- آخرین نسخه سیستم ساخت Bazel را نصب کنید.
- Android NDK برای ساخت کد بومی (C/C++) TensorFlow Lite مورد نیاز است. نسخه پیشنهادی فعلی 21e است که می توانید در اینجا پیدا کنید.
- Android SDK و ابزارهای ساخت را می توان در اینجا یا به عنوان بخشی از Android Studio به دست آورد. Build tools API >= 23 نسخه توصیه شده برای ساخت TensorFlow Lite است.
WORKSPACE و bazelrc. را پیکربندی کنید
این یک مرحله پیکربندی یک بار است که برای ساخت کتابخانههای TF Lite لازم است. اسکریپت ./configure
را در دایرکتوری root TensorFlow Checkout اجرا کنید و زمانی که اسکریپت خواستار پیکربندی تعاملی ./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="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 را از پوشه پرداخت root به صورت زیر بسازید:
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 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 نصب کنید
دستور زیر را از دایرکتوری root checkout خود اجرا کنید:
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 در کد برنامه خود استفاده کنید.