Android पर TensorFlow Lite की मदद से, फूलों की पहचान करें

1. परिचय

657431be3173fa86.png android.png

ध्यान दें: इस कोडलैब की जांच के लिए, किसी फ़िज़िकल डिवाइस की ज़रूरत होती है

TensorFlow, एक मल्टीपर्पज़ मशीन लर्निंग फ़्रेमवर्क है. TensorFlow का इस्तेमाल, क्लाउड में मौजूद क्लस्टर में बड़े मॉडल को ट्रेनिंग देने से लेकर आपके फ़ोन जैसे एम्बेड किए गए सिस्टम पर स्थानीय तौर पर मॉडल चलाने के लिए किया जा सकता है.

यह कोडलैब, Android डिवाइस पर इमेज पहचानने वाले मॉडल को चलाने के लिए, TensorFlow Lite का इस्तेमाल करता है.

Android Studio 4.1 या इसके बाद का वर्शन इंस्टॉल करें

अगर आपने इसे पहले से इंस्टॉल नहीं किया है, तो अपने TensorFlow Lite मॉडल को ट्रेनिंग देने के दौरान, AndroidStudio 4.1 या इसके बाद का वर्शन डाउनलोड करके इंस्टॉल करें.

आप इन चीज़ों के बारे में जानेंगे

  • TensorFlow Lite Model Maker का इस्तेमाल करके, अपनी पसंद के मुताबिक इमेज की कैटगरी तय करने वाले टूल को ट्रेनिंग देने का तरीका.
  • CameraX का इस्तेमाल करके, किसी Android ऐप्लिकेशन में कस्टम मॉडल को इंटिग्रेट करने के लिए, Android Studio का इस्तेमाल करके TensorFlow Lite मॉडल को इंपोर्ट करने का तरीका जानें.
  • अपने मॉडल को तेज़ी से आगे बढ़ाने के लिए, अपने फ़ोन पर जीपीयू इस्तेमाल करने का तरीका जानें.

आपको क्या बनाना होगा

एक सामान्य कैमरा ऐप्लिकेशन, जो फूलों की पहचान करने के लिए TensorFlow इमेज पहचान प्रोग्राम चलाता है.

f11c2821f2c8311d.png

लाइसेंस: बिना किसी शुल्क के इस्तेमाल किया जा सकता है

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.png

Android Studio 4.1 या इसके बाद का वर्शन इंस्टॉल करें

अगर आपने इसे पहले से इंस्टॉल नहीं किया है, तो AndroidStudio 4.1 या इसके बाद वाला वर्शन इंस्टॉल करें.

Android Studio में प्रोजेक्ट खोलें

यह तरीका अपनाकर Android Studio में कोई प्रोजेक्ट खोलें:

  1. Android Studio 7f2480ded53a193b.png खोलें. इसके लोड होने के बाद, "मौजूदा प्रोजेक्ट खोलें" को चुनें इस पॉप-अप से:

f3b8bea7e3b39376.png

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

d68b4d7189e6c1e4.png

  1. अगर आपने पहले से अपने फ़ोन पर डेवलपर मॉडल और USB डीबगिंग को सक्षम नहीं किया है, तो उसे सक्षम करें. इसे एक बार के लिए सेट अप किया जा सकता है. इन निर्देशों का पालन करें.
  2. जब आपका प्रोजेक्ट और फ़ोन, दोनों तैयार हो जाएं, तो TFL_Classify.start को चुनकर इसे किसी असली डिवाइस पर चलाया जा सकता है. इसके बाद, टूलबार पर मौजूद 'चलाएं' बटन 86934b7b01ad7565.png को दबाएं:

60a77ef126c1373d.png

  1. अब Tensorflow डेमो को अपना कैमरा ऐक्सेस करने की अनुमति दें:

b63cba02bb36b7e3.png

  1. आपको अपने फ़ोन पर नीचे दी गई स्क्रीन पर रैंडम नंबर दिखेंगे. ये नंबर उस जगह पर होंगे जहां असल नतीजे दिखेंगे.

82c603596afa35f1.png

5. TensorFlow Lite को Android ऐप्लिकेशन में जोड़ें

  1. बाईं ओर मौजूद प्रोजेक्ट एक्सप्लोरर में, start मॉड्यूल को चुनें:

cede7f2b8b23c1a7.png

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

bf243d9fdd27e20a.png

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

cfee18cc6674a408.png

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

82840065f0d59def.png

6. ज़रूरी नहीं: सभी कामों की सूची देखी जा रही है

TODO की सूची की मदद से आप आसानी से उस सटीक जगह पर जा सकते हैं जहां आपको कोडलैब अपडेट करने की ज़रूरत है. इसे अपने Android प्रोजेक्ट में भी इस्तेमाल किया जा सकता है. इससे आपको आने वाले समय में किए जाने वाले काम को याद रखने में मदद मिलती है. आप कोड टिप्पणियों का इस्तेमाल करके और कीवर्ड TODO टाइप करके, काम की सूची जोड़ सकते हैं. काम की सूची की सूची ऐक्सेस करने के लिए:

  1. हम क्या करने वाले हैं, यह देखने का सबसे अच्छा तरीका यह है कि आप TODO की सूची देखें. ऐसा करने के लिए, सबसे ऊपर मौजूद मेन्यू बार View > से चुनें Tool Windows TODO

5de29b413574f25c.png

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

5d8fe7b102340208.png

  1. शुरुआती मॉड्यूल के तहत मौजूद सभी आइटम को बड़ा करें:

8d0f14a039995b20.png

7. TensorFlow Lite की मदद से, अपने हिसाब से मॉडल चलाएं

  1. 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)

  ...
}
  1. CameraX ऐनालाइज़र के विश्लेषण के तरीके के अंदर, हमें कैमरा इनपुट ImageProxy को Bitmap में बदलना होगा. साथ ही, अनुमान लगाने की प्रोसेस के लिए TensorImage ऑब्जेक्ट बनाना होगा.
override fun analyze(imageProxy: ImageProxy) {
  ...
  // TODO 2: Convert Image to Bitmap then to TensorImage
  val tfImage = TensorImage.fromBitmap(toBitmap(imageProxy))
  ...
}
  1. इमेज को प्रोसेस करें और नतीजे पर ये कार्रवाइयां करें:
  • सबसे ज़्यादा संभावना वाली 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

  ...
}
  1. डेटा बाइंडिंग की मदद से, क्रम से लगाए गए और फ़िल्टर किए गए नतीजों को 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))
  }
  ...
}
  1. नीचे दी गई लाइनों पर टिप्पणी करें या उन्हें मिटाएं. इससे, हमें पहले दिखाए गए नकली नतीजे जनरेट करने में मदद मिलती है:
// 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.
  1. TFL_Classify.start को चुनकर ऐप्लिकेशन को किसी असल डिवाइस पर चलाएं. इसके बाद, टूलबार पर 'चलाएं' बटन 86934b7b01ad7565.png दबाएं:

60a77ef126c1373d.png

  1. आपको अपने फ़ोन पर नीचे दी गई स्क्रीन पर रैंडम नंबर दिखेंगे. ये नंबर उस जगह पर दिखेंगे जहां असल नतीजे दिखाए जाएंगे:

f11c2821f2c8311d.png

8. ज़रूरी नहीं: जीपीयू डेलिगेट की मदद से अनुमान में तेज़ी लाएं

TensorFlow Lite आपके मोबाइल डिवाइस पर अनुमान को तेज़ करने के लिए, कई हार्डवेयर ऐक्सेलरेटर के साथ काम करता है. GPU, उन एक्सेलरेटर में से एक है जिनका इस्तेमाल TensorFlow Lite में डेलिगेट सिस्टम के ज़रिए किया जा सकता है. साथ ही, इस टूल का इस्तेमाल करना काफ़ी आसान है.

  1. start मॉड्यूल में build.gradle खोलें या TODO सूची में TODO 5 पर क्लिक करके इस डिपेंडेंसी को जोड़ें:
// TODO 5: Optional GPU Delegates    
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
  1. 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()
    }

  ...
}
  1. तरीके के इनपुट में 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)
  }
}
  1. TFL_Classify.start को चुनकर ऐप्लिकेशन को किसी असल डिवाइस पर चलाएं. इसके बाद, टूलबार पर 'चलाएं' बटन 86934b7b01ad7565.png दबाएं:

60a77ef126c1373d.png

9. आगे क्या करें?

ज़्यादा जानकारी के लिए यहां कुछ लिंक दिए गए हैं: