Android के लिए TensorFlow लाइट बनाएं

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

यह दस्तावेज़ बताता है कि अपने दम पर TensorFlow Lite Android लाइब्रेरी कैसे बनाई जाए। आम तौर पर, आपको स्थानीय रूप से TensorFlow Lite Android लाइब्रेरी बनाने की आवश्यकता नहीं होती है। यदि आप केवल इसका उपयोग करना चाहते हैं, तो अपने Android प्रोजेक्ट में उनका उपयोग करने के तरीके के बारे में अधिक विवरण के लिए 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 में स्थानीय परिवर्तन करना चाह सकते हैं।

Docker का उपयोग करके बिल्ड वातावरण सेट करें

  • डॉकर फ़ाइल डाउनलोड करें। डॉकर फ़ाइल डाउनलोड करके, आप सहमति देते हैं कि निम्नलिखित सेवा की शर्तें आपके उपयोग को नियंत्रित करती हैं:

स्वीकार करने के लिए क्लिक करके, आप एतद्द्वारा सहमत हैं कि एंड्रॉइड स्टूडियो और एंड्रॉइड नेटिव डेवलपमेंट किट का सभी उपयोग एंड्रॉइड सॉफ्टवेयर डेवलपमेंट किट लाइसेंस अनुबंध द्वारा नियंत्रित किया जाएगा जो https://developer.android.com/studio/terms पर उपलब्ध है (ऐसा यूआरएल हो सकता है 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}"

अब आपको बिल्ड सेटिंग्स को कॉन्फ़िगर करने के लिए कॉन्फिगर वर्कस्पेस और .bazelrc सेक्शन में जाना चाहिए।

पुस्तकालयों का निर्माण समाप्त करने के बाद, आप उन्हें कंटेनर के अंदर /host_dir पर कॉपी कर सकते हैं ताकि आप उन्हें होस्ट पर एक्सेस कर सकें।

डॉकर के बिना बिल्ड वातावरण सेट करें

Bazel और Android पूर्वापेक्षाएँ स्थापित करें

बेज़ल TensorFlow के लिए प्राथमिक बिल्ड सिस्टम है। इसके साथ निर्माण करने के लिए, आपके पास यह और आपके सिस्टम पर एंड्रॉइड एनडीके और एसडीके स्थापित होना चाहिए।

  1. Bazel बिल्ड सिस्टम का नवीनतम संस्करण स्थापित करें।
  2. Android NDK को मूल (C/C++) TensorFlow Lite कोड बनाने के लिए आवश्यक है। वर्तमान अनुशंसित संस्करण 19c है, जो यहां पाया जा सकता है।
  3. एंड्रॉइड एसडीके और बिल्ड टूल्स यहां या वैकल्पिक रूप से एंड्रॉइड स्टूडियो के हिस्से के रूप में प्राप्त किए जा सकते हैं। बिल्ड टूल्स API>= 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-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

यह 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 लाइट निर्भरता को नई स्थानीय लाइब्रेरी से बदलें, जैसे:

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 inference APIs का उपयोग कर सकते हैं।