Android के लिए TensorFlow Lite बनाएँ

यह दस्तावेज़ बताता है कि आप स्वयं 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'
        }
    }
}

अपने बिल्ड.ग्रेडल में निर्भरता के लिए रात्रिकालीन स्नैपशॉट जोड़ें (या आवश्यकतानुसार संपादित करें)।

...
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 में स्थानीय परिवर्तन करना चाह सकते हैं।

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

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

स्वीकार करने के लिए क्लिक करके, आप इस बात से सहमत हैं कि एंड्रॉइड स्टूडियो और एंड्रॉइड नेटिव डेवलपमेंट किट का सभी उपयोग https://developer.android.com/studio/terms पर उपलब्ध एंड्रॉइड सॉफ्टवेयर डेवलपमेंट किट लाइसेंस अनुबंध द्वारा नियंत्रित किया जाएगा (ऐसा यूआरएल हो सकता है) समय-समय पर Google द्वारा अद्यतन या परिवर्तित किया जाना चाहिए)।

आपको फ़ाइल डाउनलोड करने के लिए सेवा की शर्तों को स्वीकार करना होगा।

  • आप वैकल्पिक रूप से एंड्रॉइड एसडीके या एनडीके संस्करण बदल सकते हैं। डाउनलोड की गई डॉकर फ़ाइल को एक खाली फ़ोल्डर में रखें और चलाकर अपनी डॉकर छवि बनाएं:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • अपने वर्तमान फ़ोल्डर को कंटेनर के अंदर /host_dir पर माउंट करके डॉकर कंटेनर को इंटरैक्टिव रूप से प्रारंभ करें (ध्यान दें कि /tensorflow_src कंटेनर के अंदर TensorFlow रिपॉजिटरी है):
docker run -it -v $PWD:/host_dir tflite-builder bash

यदि आप विंडोज़ पर पॉवरशेल का उपयोग करते हैं, तो "$PWD" को "pwd" से बदलें।

यदि आप होस्ट पर TensorFlow रिपॉजिटरी का उपयोग करना चाहते हैं, तो इसके बजाय उस होस्ट निर्देशिका को माउंट करें (-vhostDir:/host_dir)।

  • एक बार जब आप कंटेनर के अंदर होते हैं, तो आप अतिरिक्त एंड्रॉइड टूल और लाइब्रेरी डाउनलोड करने के लिए निम्नलिखित चला सकते हैं (ध्यान दें कि आपको लाइसेंस स्वीकार करने की आवश्यकता हो सकती है):
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

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

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

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

बेज़ेल और एंड्रॉइड पूर्वापेक्षाएँ स्थापित करें

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

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

वर्कस्पेस और .bazenrc कॉन्फ़िगर करें

यह एक बार का कॉन्फ़िगरेशन चरण है जो टीएफ लाइट लाइब्रेरी बनाने के लिए आवश्यक है। रूट TensorFlow चेकआउट निर्देशिका में ./configure स्क्रिप्ट चलाएँ, और जब स्क्रिप्ट एंड्रॉइड बिल्ड के लिए ./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-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"

बनाएं और स्थापित करें

एक बार बेज़ल ठीक से कॉन्फ़िगर हो जाने पर, आप निम्नानुसार रूट चेकआउट निर्देशिका से 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

यह 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 Lite बाइनरी आकार को कम करें अनुभाग देखें।

AAR को सीधे प्रोजेक्ट में जोड़ें

tensorflow-lite.aar फ़ाइल को अपने प्रोजेक्ट में libs नामक निर्देशिका में ले जाएँ। नई निर्देशिका को संदर्भित करने और मौजूदा TensorFlow Lite निर्भरता को नई स्थानीय लाइब्रेरी से बदलने के लिए अपने ऐप की build.gradle फ़ाइल को संशोधित करें, उदाहरण के लिए:

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 ऑप्स के लिए समर्थन है:

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