यह दस्तावेज़ बताता है कि TensorFlow Lite Android लाइब्रेरी को आप खुद कैसे बना सकते हैं। आम तौर पर, आपको स्थानीय रूप से TensorFlow Lite Android लाइब्रेरी बनाने की आवश्यकता नहीं होती है। यदि आप इसका उपयोग करना चाहते हैं, तो एंड्रॉइड क्विकस्टार्ट को अपने एंड्रॉइड प्रोजेक्ट में उपयोग करने के तरीके के बारे में अधिक जानकारी के लिए देखें।
रात के स्नैपशॉट का प्रयोग करें
रात के स्नैपशॉट का उपयोग करने के लिए, निम्न रेपो को अपने रूट ग्रैडल बिल्ड कॉन्फिग में जोड़ें।
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 में स्थानीय बदलाव करना चाहें।
डॉकर का उपयोग करके बिल्ड वातावरण स्थापित करें
- डॉकर फ़ाइल डाउनलोड करें। डॉकर फ़ाइल डाउनलोड करके, आप सहमत हैं कि निम्नलिखित सेवा की शर्तें आपके उपयोग को नियंत्रित करती हैं:
स्वीकार करने के लिए क्लिक करके, आप इस बात से सहमत हैं कि एंड्रॉइड स्टूडियो और एंड्रॉइड नेटिव डेवलपमेंट किट के सभी उपयोग https://developer.android.com/studio/terms पर उपलब्ध एंड्रॉइड सॉफ्टवेयर डेवलपमेंट किट लाइसेंस समझौते द्वारा नियंत्रित होंगे (ऐसे URL हो सकते हैं) Google द्वारा समय-समय पर अद्यतन या परिवर्तित किया जाना चाहिए)।
फ़ाइल डाउनलोड करने के लिए आपको सेवा की शर्तों को स्वीकार करना होगा।- आप वैकल्पिक रूप से Android SDK या NDK संस्करण को बदल सकते हैं। डाउनलोड की गई डॉकर फ़ाइल को एक खाली फ़ोल्डर में रखें और चलाकर अपनी डॉकर छवि बनाएं:
docker build . -t tflite-builder -f tflite-android.Dockerfile
- अपने वर्तमान फ़ोल्डर को कंटेनर के अंदर /host_dir पर आरोहित करके डॉकटर कंटेनर को अंतःक्रियात्मक रूप से प्रारंभ करें (ध्यान दें कि /tensorflow_src कंटेनर के अंदर TensorFlow रिपॉजिटरी है):
docker run -it -v $PWD:/host_dir tflite-builder bash
यदि आप Windows पर PowerShell का उपयोग करते हैं, तो "$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 में कॉपी कर सकते हैं ताकि आप उन्हें होस्ट पर एक्सेस कर सकें।
डॉकर के बिना बिल्ड वातावरण स्थापित करें
Bazel और Android पूर्वापेक्षाएँ स्थापित करें
Bazel TensorFlow के लिए प्राथमिक बिल्ड सिस्टम है। इसके साथ निर्माण करने के लिए, आपके पास यह और Android NDK और SDK आपके सिस्टम पर स्थापित होना चाहिए।
- Bazel बिल्ड सिस्टम का नवीनतम संस्करण स्थापित करें।
- Android NDK को नेटिव (C/C++) TensorFlow Lite कोड बनाने की आवश्यकता है। वर्तमान अनुशंसित संस्करण 21e है, जो यहां पाया जा सकता है।
- एंड्रॉइड एसडीके और बिल्ड टूल्स यहां प्राप्त किए जा सकते हैं, या वैकल्पिक रूप से एंड्रॉइड स्टूडियो के हिस्से के रूप में प्राप्त किए जा सकते हैं। बिल्ड टूल्स एपीआई> = 23 TensorFlow Lite के निर्माण के लिए अनुशंसित संस्करण है।
वर्कस्पेस और .bazelrc कॉन्फ़िगर करें
यह एक बार का कॉन्फ़िगरेशन चरण है जो TF लाइट लाइब्रेरी बनाने के लिए आवश्यक है। रूट TensorFlow चेकआउट निर्देशिका में ./configure
स्क्रिप्ट चलाएँ, और जब स्क्रिप्ट Android बिल्ड के लिए ./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-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
यह 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 ops का उपयोग कर रहा है, तो उपरोक्त स्क्रिप्ट tensorflow-lite.aar
फ़ाइल और वैकल्पिक रूप से tensorflow-lite-select-tf-ops.aar
फ़ाइल उत्पन्न करेगी। अधिक विवरण के लिए, कृपया 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')
}
स्थानीय मेवेन रिपोजिटरी में एएआर स्थापित करें
अपनी रूट चेकआउट निर्देशिका से निम्न आदेश निष्पादित करें:
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 ops के लिए समर्थन है:
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 अनुमान API का उपयोग कर सकते हैं।