1. परिचय

ध्यान दें: इस कोडलैब को टेस्ट करने के लिए, किसी डिवाइस की ज़रूरत होती है
TensorFlow, एक मल्टीपर्पज़ मशीन लर्निंग फ़्रेमवर्क है. TensorFlow का इस्तेमाल, क्लाउड में मौजूद क्लस्टर में बड़े मॉडल को ट्रेन करने से लेकर, आपके फ़ोन जैसे एम्बेड किए गए सिस्टम पर मॉडल को स्थानीय तौर पर चलाने तक, कहीं भी किया जा सकता है.
इस कोडलैब में, Android डिवाइस पर इमेज की पहचान करने वाले मॉडल को चलाने के लिए, TensorFlow Lite का इस्तेमाल किया जाता है.
Android Studio 4.1 या इसके बाद का वर्शन इंस्टॉल करना
अगर आपने इसे पहले से इंस्टॉल नहीं किया है, तो TensorFlow Lite मॉडल को ट्रेन करते समय, AndroidStudio 4.1 या इसके बाद का वर्शन डाउनलोड और इंस्टॉल करें.
आपको क्या सीखने को मिलेगा
- TensorFlow Lite Model Maker का इस्तेमाल करके, इमेज क्लासिफ़ायर को अपनी पसंद के मुताबिक ट्रेन करने का तरीका.
- CameraX का इस्तेमाल करके, Android ऐप्लिकेशन में कस्टम मॉडल को इंटिग्रेट करने के लिए, TensorFlow Lite मॉडल को Android Studio में इंपोर्ट करने का तरीका.
- मॉडल को बेहतर बनाने के लिए, फ़ोन पर जीपीयू का इस्तेमाल कैसे करें.
आपको क्या बनाना है
यह एक सामान्य कैमरा ऐप्लिकेशन है. इसमें TensorFlow का इमेज पहचानने वाला प्रोग्राम चलता है. इससे फूलों की पहचान की जाती है.

2. Colab का इस्तेमाल करके, फूलों की पहचान करने वाले मॉडल को ट्रेन करना
मॉडल की ट्रेनिंग शुरू करने से पहले, Android Studio 4.1 या इसके बाद का वर्शन डाउनलोड और इंस्टॉल करें.
Colab खोलें. इसमें बताया गया है कि TensorFlow Lite ट्रांसफ़र लर्निंग का इस्तेमाल करके, फूलों की पहचान करने के लिए Keras की मदद से क्लासिफ़ायर को कैसे ट्रेन किया जाता है.
3. वर्किंग डायरेक्ट्री सेट अप करना
Git रिपॉज़िटरी को क्लोन करना
नीचे दी गई कमांड, Git रिपॉज़िटरी को क्लोन करेगी. इसमें इस कोडलैब के लिए ज़रूरी फ़ाइलें मौजूद हैं:
git clone https://github.com/hoitab/TFLClassify.git
इसके बाद, उस डायरेक्ट्री पर जाएं जहां आपने अभी-अभी डेटा संग्रह स्थान को क्लोन किया है. इस कोडलैब के बाकी बचे हिस्से में, आपको इस पर काम करना होगा:
cd TFLClassify
4. Android का स्केलेटन ऐप्लिकेशन सेट अप करना

Android Studio 4.1 या इसके बाद का वर्शन इंस्टॉल करना
अगर आपने इसे पहले से इंस्टॉल नहीं किया है, तो AndroidStudio 4.1 या इसके बाद का वर्शन इंस्टॉल करें.
Android Studio में प्रोजेक्ट खोलना
Android Studio में कोई प्रोजेक्ट खोलने के लिए, यह तरीका अपनाएं:
- Android Studio
खोलें. लोड होने के बाद, इस पॉप-अप में "मौजूदा प्रोजेक्ट खोलें" को चुनें:

- फ़ाइल चुनने वाले टूल में, अपनी वर्किंग डायरेक्ट्री से
TFLClassify/build.gradleचुनें.
- प्रोजेक्ट को पहली बार खोलने पर, आपको "Gradle Sync" पॉप-अप दिखेगा. इसमें Gradle Wrapper का इस्तेमाल करने के बारे में पूछा जाएगा. "ठीक है" पर क्लिक करें.

- अगर आपने पहले से डेवलपर मोड और यूएसबी डीबगिंग की सुविधा चालू नहीं की है, तो अपने फ़ोन पर इसे चालू करें. इसे सिर्फ़ एक बार सेट अप करना होगा. इन निर्देशों का पालन करें.
- जब आपका प्रोजेक्ट और फ़ोन, दोनों तैयार हो जाएं, तब इसे किसी असली डिवाइस पर चलाया जा सकता है. इसके लिए,
TFL_Classify.startको चुनें और टूलबार पर मौजूद 'चलाएं' बटन
दबाएं:

- अब Tensorflow Demo को कैमरा ऐक्सेस करने की अनुमति दें:

- आपको अपने फ़ोन पर यह स्क्रीन दिखेगी. इसमें, असली नतीजों की जगह पर कोई भी नंबर दिखेगा.

5. Android ऐप्लिकेशन में TensorFlow Lite जोड़ना
- बाईं ओर मौजूद प्रोजेक्ट एक्सप्लोरर में,
startमॉड्यूल चुनें:

startमॉड्यूल पर राइट क्लिक करें याFileपर क्लिक करें. इसके बाद,New>Other>TensorFlow Lite Modelपर क्लिक करें

- मॉडल की वह जगह चुनें जहां आपने पहले कस्टम ट्रेनिंग वाला
FlowerModel.tfliteडाउनलोड किया था.

Finishपर क्लिक करें.- आखिर में, आपको यह दिखेगा. FlowerModel.tflite को इंपोर्ट कर लिया गया है. इसमें मॉडल के बारे में ज़्यादा जानकारी दी गई है. जैसे, इनपुट / आउटपुट और कुछ सैंपल कोड, ताकि आप इसका इस्तेमाल शुरू कर सकें.

6. ज़रूरी नहीं: सभी कामों की सूची देखना
'क्या-क्या करना है' सूची की मदद से, उस जगह पर आसानी से पहुंचा जा सकता है जहां आपको कोडलैब अपडेट करना है. इसका इस्तेमाल अपने Android प्रोजेक्ट में भी किया जा सकता है, ताकि आपको आने वाले समय में किए जाने वाले काम के बारे में याद दिलाया जा सके. कोड में टिप्पणियों का इस्तेमाल करके, 'करने के लिए काम' वाले आइटम जोड़े जा सकते हैं. इसके लिए, TODO कीवर्ड टाइप करें. काम की सूची को ऐक्सेस करने के लिए, यह तरीका अपनाएं:
- हम क्या करने वाले हैं, यह जानने का सबसे अच्छा तरीका है कि आप 'क्या करना है' सूची देखें. इसके लिए, सबसे ऊपर मौजूद मेन्यू बार में जाकर
View>Tool Windows>TODOको चुनें

- डिफ़ॉल्ट रूप से, यह सभी मॉड्यूल में मौजूद 'करना है' टैग किए गए सभी आइटम की सूची दिखाता है. इससे थोड़ी उलझन हो सकती है. हम सिर्फ़ स्टार वाले TODO को क्रम से लगा सकते हैं. इसके लिए, TODO पैनल के साइड में मौजूद 'ग्रुप बनाएं' बटन पर क्लिक करें और
Modulesचुनें

- स्टार्ट मॉड्यूल में मौजूद सभी आइटम को बड़ा करें:

7. TensorFlow Lite की मदद से कस्टम मॉडल चलाना
- TODO सूची में TODO 1 पर क्लिक करें या MainActivity.kt फ़ाइल खोलें और TODO 1 ढूंढें. इसके बाद, यह लाइन जोड़कर मॉडल को शुरू करें:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
ImageAnalysis.Analyzer {
...
// TODO 1: Add class variable TensorFlow Lite Model
private val flowerModel = FlowerModel.newInstance(ctx)
...
}
- CameraX Analyzer के analyze तरीके में, हमें कैमरे के इनपुट
ImageProxyकोBitmapमें बदलना होगा. साथ ही, अनुमान लगाने की प्रोसेस के लिएTensorImageऑब्जेक्ट बनाना होगा.
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 2: Convert Image to Bitmap then to TensorImage
val tfImage = TensorImage.fromBitmap(toBitmap(imageProxy))
...
}
- इमेज को प्रोसेस करें और नतीजे पर ये कार्रवाइयां करें:
scoreएट्रिब्यूट के तहत, संभावना के हिसाब से नतीजों को घटते क्रम में लगाएं. इसमें सबसे ज़्यादा संभावना वाले नतीजे सबसे पहले दिखेंगे.MAX_RESULT_DISPLAYकॉन्स्टेंट के हिसाब से, टॉप k नतीजे लें. ज़्यादा या कम नतीजे पाने के लिए, इस वैरिएबल की वैल्यू में बदलाव किया जा सकता है.
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 3: Process the image using the trained model, sort and pick out the top results
val outputs = flowerModel.process(tfImage)
.probabilityAsCategoryList.apply {
sortByDescending { it.score } // Sort with highest confidence first
}.take(MAX_RESULT_DISPLAY) // take the top results
...
}
- क्रम से लगाए गए और फ़िल्टर किए गए नतीजों को डेटा ऑब्जेक्ट में बदलें
RecognitionताकिRecyclerViewउन्हें डेटा बाइंडिंग के ज़रिए इस्तेमाल कर सके:
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 4: Converting the top probability items into a list of recognitions
for (output in outputs) {
items.add(Recognition(output.label, output.score))
}
...
}
- नीचे दी गई लाइनों को मिटा दें या उन पर टिप्पणी करें. इनकी वजह से हमें पहले फ़र्ज़ी नतीजे दिखते थे:
// START - Placeholder code at the start of the codelab. Comment this block of code out.
for (i in 0..MAX_RESULT_DISPLAY-1){
items.add(Recognition("Fake label $i", Random.nextFloat()))
}
// END - Placeholder code at the start of the codelab. Comment this block of code out.
- असली डिवाइस पर ऐप्लिकेशन चलाने के लिए,
TFL_Classify.startको चुनें. इसके बाद, टूलबार पर मौजूद 'चलाएं' बटन
को दबाएं:

- आपको अपने फ़ोन पर यह स्क्रीन दिखेगी. इसमें असली नतीजों की जगह पर कुछ भी लिखा होगा:

8. ज़रूरी नहीं: जीपीयू डेलिगेट की मदद से अनुमान लगाने की प्रोसेस को तेज़ करना
TensorFlow Lite, आपके फ़ोन या टैबलेट पर अनुमान लगाने की प्रोसेस को तेज़ करने के लिए, कई हार्डवेयर ऐक्सलरेटर के साथ काम करता है. GPU, ऐक्सलरेटर में से एक है. TensorFlow Lite, डेलिगेट मैकेनिज़्म के ज़रिए इसका फ़ायदा ले सकता है. साथ ही, इसे इस्तेमाल करना काफ़ी आसान है.
startमॉड्यूल में जाकर, build.gradle खोलें. इसके अलावा, TODO सूची में जाकर TODO 5 पर क्लिक करके भी यह डिपेंडेंसी जोड़ी जा सकती है:
// TODO 5: Optional GPU Delegates
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
- MainActivity.kt फ़ाइल पर वापस जाएं या TODO की सूची में मौजूद TODO 6 पर क्लिक करें. flowerModel को शुरू करने के सामान्य तरीके को इससे बदलें: जीपीयू के साथ काम करने वाले डिवाइसों की सूची का इंस्टेंस पाएं और जीपीयू को इस आधार पर शुरू करें कि वह सूची में शामिल जीपीयू में से एक है या नहीं. इसके अलावा, मॉडल को चलाने के लिए चार सीपीयू थ्रेड शुरू करें:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
ImageAnalysis.Analyzer {
...
// TODO 1: Add class variable TensorFlow Lite Model
// Initializing the flowerModel by lazy so that it runs in the same thread when the process
// method is called.
private val flowerModel: FlowerModel by lazy{
// TODO 6. Optional GPU acceleration
val compatList = CompatibilityList()
val options = if(compatList.isDelegateSupportedOnThisDevice){
Log.d(TAG, "This device is GPU Compatible ")
Model.Options.Builder().setDevice(Model.Device.GPU).build()
} else {
Log.d(TAG, "This device is GPU Incompatible ")
Model.Options.Builder().setNumThreads(4).build()
}
...
}
- इस सुविधा का इस्तेमाल करने के लिए, मॉडल इनिशियलाइज़र को बदलें. इसके लिए,
optionsको तरीके के इनपुट में जोड़ें:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
ImageAnalysis.Analyzer {
private val flowerModel: FlowerModel by lazy{
...
// Initialize the Flower Model
FlowerModel.newInstance(ctx, options)
}
}
- असली डिवाइस पर ऐप्लिकेशन चलाने के लिए,
TFL_Classify.startको चुनें. इसके बाद, टूलबार पर मौजूद 'चलाएं' बटन
को दबाएं:

9. आगे क्या करें?
ज़्यादा जानकारी के लिए यहां कुछ लिंक दिए गए हैं:
- tfhub.dev से एमएल मॉडल बाइंडिंग के साथ काम करने वाले अन्य TFLite मॉडल आज़माएं.
- tensorflow.org पर मौजूद दस्तावेज़ों और कोड रिपो से, TFLite के बारे में ज़्यादा जानें.
- TFLite के पहले से ट्रेन किए गए कुछ अन्य मॉडल आज़माएं. इनमें, स्पीच हॉटवर्ड डिटेक्टर और स्मार्ट-रिप्लाई का ऑन-डिवाइस वर्शन शामिल है.
- TensorFlow के बारे में सामान्य जानकारी पाने के लिए, शुरू करें दस्तावेज़ पढ़ें.