एंड्रॉइड के लिए ध्वनि और शब्द पहचान

यह ट्यूटोरियल आपको दिखाता है कि एंड्रॉइड ऐप में ध्वनियों और बोले गए शब्दों को पहचानने के लिए पूर्व-निर्मित मशीन लर्निंग मॉडल के साथ TensorFlow Lite का उपयोग कैसे करें। इस ट्यूटोरियल में दिखाए गए ऑडियो वर्गीकरण मॉडल का उपयोग गतिविधि का पता लगाने, कार्यों की पहचान करने या वॉयस कमांड को पहचानने के लिए किया जा सकता है।

ऑडियो पहचान एनिमेटेड डेमो यह ट्यूटोरियल आपको दिखाता है कि उदाहरण कोड कैसे डाउनलोड करें, प्रोजेक्ट को एंड्रॉइड स्टूडियो में कैसे लोड करें, और कोड उदाहरण के प्रमुख भागों को समझाता है ताकि आप इस कार्यक्षमता को अपने ऐप में जोड़ना शुरू कर सकें। उदाहरण ऐप कोड ऑडियो के लिए टेन्सरफ्लो टास्क लाइब्रेरी का उपयोग करता है, जो अधिकांश ऑडियो डेटा रिकॉर्डिंग और प्रीप्रोसेसिंग को संभालता है। मशीन लर्निंग मॉडल के साथ उपयोग के लिए ऑडियो को पूर्व-संसाधित कैसे किया जाता है, इस बारे में अधिक जानकारी के लिए, ऑडियो डेटा तैयारी और संवर्द्धन देखें।

मशीन लर्निंग के साथ ऑडियो वर्गीकरण

इस ट्यूटोरियल में मशीन लर्निंग मॉडल एंड्रॉइड डिवाइस पर माइक्रोफ़ोन के साथ रिकॉर्ड किए गए ऑडियो नमूनों से ध्वनियों या शब्दों को पहचानता है। इस ट्यूटोरियल में उदाहरण ऐप आपको YAMNet/क्लासिफायर , एक मॉडल जो ध्वनियों को पहचानता है, और एक मॉडल जो विशिष्ट बोले गए शब्दों को पहचानता है, के बीच स्विच करने की अनुमति देता है, जिसे TensorFlow Lite मॉडल मेकर टूल का उपयोग करके प्रशिक्षित किया गया था। मॉडल ऑडियो क्लिप पर भविष्यवाणियां चलाते हैं जिनमें प्रति क्लिप 15600 व्यक्तिगत नमूने होते हैं और लंबाई लगभग 1 सेकंड होती है।

सेटअप और रन उदाहरण

इस ट्यूटोरियल के पहले भाग के लिए, आप GitHub से नमूना डाउनलोड करें और इसे Android Studio का उपयोग करके चलाएं। इस ट्यूटोरियल के निम्नलिखित अनुभाग उदाहरण के प्रासंगिक अनुभागों का पता लगाते हैं, ताकि आप उन्हें अपने एंड्रॉइड ऐप्स पर लागू कर सकें।

सिस्टम आवश्यकताएं

  • एंड्रॉइड स्टूडियो संस्करण 2021.1.1 (भौंरा) या उच्चतर।
  • एंड्रॉइड एसडीके संस्करण 31 या उच्चतर
  • डेवलपर मोड सक्षम के साथ एसडीके 24 (एंड्रॉइड 7.0 - नूगट) के न्यूनतम ओएस संस्करण वाला एंड्रॉइड डिवाइस।

उदाहरण कोड प्राप्त करें

उदाहरण कोड की एक स्थानीय प्रतिलिपि बनाएँ। आप एंड्रॉइड स्टूडियो में एक प्रोजेक्ट बनाने और नमूना एप्लिकेशन चलाने के लिए इस कोड का उपयोग करेंगे।

उदाहरण कोड को क्लोन और सेटअप करने के लिए:

  1. Git रिपॉजिटरी
    git clone https://github.com/tensorflow/examples.git
    
    क्लोन करें
  2. वैकल्पिक रूप से, विरल चेकआउट का उपयोग करने के लिए अपने गिट इंस्टेंस को कॉन्फ़िगर करें, ताकि आपके पास केवल उदाहरण ऐप के लिए फ़ाइलें हों:

    cd examples
    git sparse-checkout init --cone
    git sparse-checkout set lite/examples/audio_classification/android
    

प्रोजेक्ट आयात करें और चलाएं

डाउनलोड किए गए उदाहरण कोड से एक प्रोजेक्ट बनाएं, प्रोजेक्ट बनाएं और फिर उसे चलाएं।

उदाहरण कोड प्रोजेक्ट आयात करने और बनाने के लिए:

  1. एंड्रॉइड स्टूडियो प्रारंभ करें।
  2. एंड्रॉइड स्टूडियो में, फ़ाइल > नया > प्रोजेक्ट आयात करें चुनें।
  3. build.gradle फ़ाइल ( .../examples/lite/examples/audio_classification/android/build.gradle ) वाली उदाहरण कोड निर्देशिका पर नेविगेट करें और उस निर्देशिका का चयन करें।

यदि आप सही निर्देशिका का चयन करते हैं, तो एंड्रॉइड स्टूडियो एक नया प्रोजेक्ट बनाता है और उसे बनाता है। आपके कंप्यूटर की गति और यदि आपने अन्य परियोजनाओं के लिए एंड्रॉइड स्टूडियो का उपयोग किया है, तो इस प्रक्रिया में कुछ मिनट लग सकते हैं। जब निर्माण पूरा हो जाता है, तो एंड्रॉइड स्टूडियो बिल्ड आउटपुट स्थिति पैनल में एक BUILD SUCCESSFUL संदेश प्रदर्शित करता है।

प्रोजेक्ट चलाने के लिए:

  1. एंड्रॉइड स्टूडियो से, रन > रन 'ऐप' का चयन करके प्रोजेक्ट चलाएं।
  2. ऐप का परीक्षण करने के लिए माइक्रोफ़ोन के साथ संलग्न एंड्रॉइड डिवाइस का चयन करें।

अगले अनुभाग आपको संदर्भ बिंदु के रूप में इस उदाहरण ऐप का उपयोग करके, इस कार्यक्षमता को अपने ऐप में जोड़ने के लिए अपने मौजूदा प्रोजेक्ट में किए जाने वाले संशोधनों को दिखाते हैं।

प्रोजेक्ट निर्भरताएँ जोड़ें

अपने स्वयं के एप्लिकेशन में, आपको TensorFlow Lite मशीन लर्निंग मॉडल चलाने के लिए विशिष्ट प्रोजेक्ट निर्भरताएं जोड़नी होंगी, और उपयोगिता फ़ंक्शंस तक पहुंच प्राप्त करनी होगी जो मानक डेटा प्रारूपों, जैसे कि ऑडियो, को टेंसर डेटा प्रारूप में परिवर्तित करते हैं, जिसे आपके द्वारा उपयोग किए जा रहे मॉडल द्वारा संसाधित किया जा सकता है।

उदाहरण ऐप निम्नलिखित TensorFlow Lite लाइब्रेरी का उपयोग करता है:

निम्नलिखित निर्देश दिखाते हैं कि अपने स्वयं के एंड्रॉइड ऐप प्रोजेक्ट में आवश्यक प्रोजेक्ट निर्भरताएँ कैसे जोड़ें।

मॉड्यूल निर्भरताएँ जोड़ने के लिए:

  1. TensorFlow Lite का उपयोग करने वाले मॉड्यूल में, निम्नलिखित निर्भरताओं को शामिल करने के लिए मॉड्यूल की build.gradle फ़ाइल को अपडेट करें। उदाहरण कोड में, यह फ़ाइल यहां स्थित है: .../examples/lite/examples/audio_classification/android/build.gradle

    dependencies {
    ...
        implementation 'org.tensorflow:tensorflow-lite-task-audio'
    }
    
  2. एंड्रॉइड स्टूडियो में, चयन करके प्रोजेक्ट निर्भरता को सिंक करें: फ़ाइल > ग्रैडल फ़ाइलों के साथ प्रोजेक्ट सिंक करें

एमएल मॉडल प्रारंभ करें

अपने एंड्रॉइड ऐप में, आपको मॉडल के साथ पूर्वानुमान चलाने से पहले मापदंडों के साथ TensorFlow Lite मशीन लर्निंग मॉडल को आरंभ करना होगा। ये आरंभीकरण पैरामीटर मॉडल पर निर्भर हैं और इसमें भविष्यवाणियों के लिए डिफ़ॉल्ट न्यूनतम सटीकता सीमा और शब्दों या ध्वनियों के लिए लेबल जैसी सेटिंग्स शामिल हो सकती हैं जिन्हें मॉडल पहचान सकता है।

TensorFlow Lite मॉडल में एक *.tflite फ़ाइल शामिल होती है जिसमें मॉडल होता है। मॉडल फ़ाइल में भविष्यवाणी तर्क होता है और आम तौर पर भविष्यवाणी परिणामों की व्याख्या करने के तरीके के बारे में मेटाडेटा शामिल होता है, जैसे भविष्यवाणी वर्ग के नाम। मॉडल फ़ाइलों को आपके विकास प्रोजेक्ट की src/main/assets निर्देशिका में संग्रहीत किया जाना चाहिए, जैसा कि कोड उदाहरण में है:

  • <project>/src/main/assets/yamnet.tflite

सुविधा और कोड पठनीयता के लिए, उदाहरण एक साथी ऑब्जेक्ट घोषित करता है जो मॉडल के लिए सेटिंग्स को परिभाषित करता है।

अपने ऐप में मॉडल आरंभ करने के लिए:

  1. मॉडल के लिए सेटिंग्स परिभाषित करने के लिए एक सहयोगी ऑब्जेक्ट बनाएं:

    companion object {
      const val DISPLAY_THRESHOLD = 0.3f
      const val DEFAULT_NUM_OF_RESULTS = 2
      const val DEFAULT_OVERLAP_VALUE = 0.5f
      const val YAMNET_MODEL = "yamnet.tflite"
      const val SPEECH_COMMAND_MODEL = "speech.tflite"
    }
    
  2. AudioClassifier.AudioClassifierOptions ऑब्जेक्ट बनाकर मॉडल के लिए सेटिंग्स बनाएं:

    val options = AudioClassifier.AudioClassifierOptions.builder()
      .setScoreThreshold(classificationThreshold)
      .setMaxResults(numOfResults)
      .setBaseOptions(baseOptionsBuilder.build())
      .build()
    
  3. मॉडल युक्त TensorFlow Lite AudioClassifier ऑब्जेक्ट बनाने के लिए इस सेटिंग ऑब्जेक्ट का उपयोग करें:

    classifier = AudioClassifier.createFromFileAndOptions(context, "yamnet.tflite", options)
    

हार्डवेयर गतिवृद्धि चालू करे

अपने ऐप में TensorFlow Lite मॉडल को आरंभ करते समय, आपको मॉडल की भविष्यवाणी गणनाओं को तेज़ करने के लिए हार्डवेयर त्वरण सुविधाओं का उपयोग करने पर विचार करना चाहिए। टेन्सरफ्लो लाइट प्रतिनिधि सॉफ्टवेयर मॉड्यूल हैं जो मोबाइल डिवाइस पर विशेष प्रोसेसिंग हार्डवेयर, जैसे ग्राफिक्स प्रोसेसिंग यूनिट (जीपीयू) या टेन्सर प्रोसेसिंग यूनिट (टीपीयू) का उपयोग करके मशीन लर्निंग मॉडल के निष्पादन में तेजी लाते हैं। मॉडल निष्पादन के हार्डवेयर त्वरण को संभालने के लिए कोड उदाहरण एनएनएपीआई प्रतिनिधि का उपयोग करता है:

val baseOptionsBuilder = BaseOptions.builder()
   .setNumThreads(numThreads)
...
when (currentDelegate) {
   DELEGATE_CPU -> {
       // Default
   }
   DELEGATE_NNAPI -> {
       baseOptionsBuilder.useNnapi()
   }
}

TensorFlow Lite मॉडल चलाने के लिए प्रतिनिधियों का उपयोग करने की अनुशंसा की जाती है, लेकिन इसकी आवश्यकता नहीं है। TensorFlow Lite के साथ डेलीगेट्स का उपयोग करने के बारे में अधिक जानकारी के लिए, TensorFlow Lite डेलीगेट्स देखें।

मॉडल के लिए डेटा तैयार करें

आपके एंड्रॉइड ऐप में, आपका कोड मौजूदा डेटा जैसे ऑडियो क्लिप को टेन्सर डेटा प्रारूप में परिवर्तित करके व्याख्या के लिए मॉडल को डेटा प्रदान करता है जिसे आपके मॉडल द्वारा संसाधित किया जा सकता है। टेंसर में जो डेटा आप किसी मॉडल को पास करते हैं, उसमें विशिष्ट आयाम या आकार होना चाहिए, जो मॉडल को प्रशिक्षित करने के लिए उपयोग किए गए डेटा के प्रारूप से मेल खाता हो।

इस कोड उदाहरण में प्रयुक्त YAMNet/क्लासिफायर मॉडल और अनुकूलित स्पीच कमांड मॉडल टेंसर डेटा ऑब्जेक्ट को स्वीकार करते हैं जो 0.975 सेकंड क्लिप (15600 नमूने) में 16kHz पर रिकॉर्ड किए गए एकल-चैनल, या मोनो, ऑडियो क्लिप का प्रतिनिधित्व करते हैं। नए ऑडियो डेटा पर पूर्वानुमान चलाते हुए, आपके ऐप को उस ऑडियो डेटा को उस आकार और आकृति के टेन्सर डेटा ऑब्जेक्ट में बदलना होगा। TensorFlow Lite टास्क लाइब्रेरी ऑडियो एपीआई आपके लिए डेटा परिवर्तन को संभालता है।

उदाहरण कोड AudioClassificationHelper क्लास में, ऐप एंड्रॉइड ऑडियोरिकॉर्ड ऑब्जेक्ट का उपयोग करके डिवाइस माइक्रोफ़ोन से लाइव ऑडियो रिकॉर्ड करता है। मॉडल के लिए उपयुक्त नमूना दर पर ऑडियो रिकॉर्ड करने के लिए उस ऑब्जेक्ट को बनाने और कॉन्फ़िगर करने के लिए कोड AudioClassifier का उपयोग करता है। कोड रूपांतरित ऑडियो डेटा को संग्रहीत करने के लिए TensorAudio ऑब्जेक्ट बनाने के लिए AudioClassifier का भी उपयोग करता है। फिर TensorAudio ऑब्जेक्ट को विश्लेषण के लिए मॉडल में भेज दिया जाता है।

एमएल मॉडल को ऑडियो डेटा प्रदान करने के लिए:

  • TensorAudio ऑब्जेक्ट और AudioRecord ऑब्जेक्ट बनाने के लिए AudioClassifier ऑब्जेक्ट का उपयोग करें:

    fun initClassifier() {
    ...
      try {
        classifier = AudioClassifier.createFromFileAndOptions(context, currentModel, options)
        // create audio input objects
        tensorAudio = classifier.createInputTensorAudio()
        recorder = classifier.createAudioRecord()
      }
    

पूर्वानुमान चलाएँ

अपने एंड्रॉइड ऐप में, एक बार जब आप एक AudioRecord ऑब्जेक्ट और एक TensorAudio ऑब्जेक्ट को AudioClassifier ऑब्जेक्ट से कनेक्ट कर लेते हैं, तो आप भविष्यवाणी या अनुमान उत्पन्न करने के लिए उस डेटा के विरुद्ध मॉडल चला सकते हैं। इस ट्यूटोरियल का उदाहरण कोड एक विशिष्ट दर पर लाइव-रिकॉर्ड किए गए ऑडियो इनपुट स्ट्रीम से क्लिप पर भविष्यवाणियां चलाता है।

मॉडल निष्पादन में महत्वपूर्ण संसाधनों की खपत होती है, इसलिए एमएल मॉडल भविष्यवाणियों को एक अलग, पृष्ठभूमि थ्रेड पर चलाना महत्वपूर्ण है। उदाहरण ऐप मॉडल प्रोसेसिंग को ऐप के अन्य कार्यों से अलग करने के लिए एक [ScheduledThreadPoolExecutor](https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor) ऑब्जेक्ट का उपयोग करता है।

ऑडियो वर्गीकरण मॉडल जो स्पष्ट शुरुआत और अंत के साथ ध्वनियों को पहचानते हैं, जैसे कि शब्द, ओवरलैपिंग ऑडियो क्लिप का विश्लेषण करके आने वाली ऑडियो स्ट्रीम पर अधिक सटीक भविष्यवाणियां कर सकते हैं। यह दृष्टिकोण मॉडल को क्लिप के अंत में काटे गए शब्दों के लिए गुम पूर्वानुमानों से बचने में मदद करता है। उदाहरण ऐप में, हर बार जब आप कोई भविष्यवाणी चलाते हैं तो कोड ऑडियो रिकॉर्डिंग बफ़र से नवीनतम 0.975 सेकंड की क्लिप लेता है और उसका विश्लेषण करता है। आप मॉडल विश्लेषण थ्रेड निष्पादन पूल interval मान को विश्लेषण किए जा रहे क्लिप की लंबाई से कम लंबाई पर सेट करके मॉडल को ओवरलैपिंग ऑडियो क्लिप का विश्लेषण कर सकते हैं। उदाहरण के लिए, यदि आपका मॉडल 1 सेकंड क्लिप का विश्लेषण करता है और आप अंतराल को 500 मिलीसेकंड पर सेट करते हैं, तो मॉडल हर बार पिछली क्लिप के अंतिम आधे और 500 मिलीसेकंड नए ऑडियो डेटा का विश्लेषण करेगा, जिससे 50% का क्लिप विश्लेषण ओवरलैप बनेगा।

ऑडियो डेटा पर पूर्वानुमान चलाना प्रारंभ करने के लिए:

  1. मॉडल के लिए ऑडियो रिकॉर्डिंग शुरू करने के लिए AudioClassificationHelper.startAudioClassification() विधि का उपयोग करें:

    fun startAudioClassification() {
      if (recorder.recordingState == AudioRecord.RECORDSTATE_RECORDING) {
        return
      }
      recorder.startRecording()
    }
    
  2. ScheduledThreadPoolExecutor ऑब्जेक्ट में एक निश्चित दर interval सेट करके सेट करें कि मॉडल कितनी बार ऑडियो क्लिप से अनुमान उत्पन्न करता है:

    executor = ScheduledThreadPoolExecutor(1)
    executor.scheduleAtFixedRate(
      classifyRunnable,
      0,
      interval,
      TimeUnit.MILLISECONDS)
    
  3. उपरोक्त कोड में classifyRunnable ऑब्जेक्ट AudioClassificationHelper.classifyAudio() विधि को निष्पादित करता है, जो रिकॉर्डर से नवीनतम उपलब्ध ऑडियो डेटा लोड करता है और एक भविष्यवाणी करता है:

    private fun classifyAudio() {
      tensorAudio.load(recorder)
      val output = classifier.classify(tensorAudio)
      ...
    }
    

पूर्वानुमान प्रसंस्करण बंद करें

सुनिश्चित करें कि जब आपके ऐप का ऑडियो प्रोसेसिंग फ्रैगमेंट या गतिविधि फोकस खो देता है तो आपका ऐप कोड ऑडियो वर्गीकरण करना बंद कर देता है। मशीन लर्निंग मॉडल को लगातार चलाने से एंड्रॉइड डिवाइस की बैटरी लाइफ पर महत्वपूर्ण प्रभाव पड़ता है। ऑडियो रिकॉर्डिंग और भविष्यवाणी प्रसंस्करण को रोकने के लिए एंड्रॉइड गतिविधि या ऑडियो वर्गीकरण से जुड़े टुकड़े की onPause() विधि का उपयोग करें।

ऑडियो रिकॉर्डिंग और वर्गीकरण रोकने के लिए:

  • रिकॉर्डिंग और मॉडल निष्पादन को रोकने के लिए AudioClassificationHelper.stopAudioClassification() विधि का उपयोग करें, जैसा कि AudioFragment क्लास में नीचे दिखाया गया है:

    override fun onPause() {
      super.onPause()
      if (::audioHelper.isInitialized ) {
        audioHelper.stopAudioClassification()
      }
    }
    

मॉडल आउटपुट संभालें

आपके एंड्रॉइड ऐप में, एक ऑडियो क्लिप को संसाधित करने के बाद, मॉडल भविष्यवाणियों की एक सूची तैयार करता है जिसे आपके ऐप कोड को अतिरिक्त व्यावसायिक तर्क निष्पादित करके, उपयोगकर्ता को परिणाम प्रदर्शित करके या अन्य कार्रवाई करके संभालना होगा। किसी भी दिए गए TensorFlow Lite मॉडल का आउटपुट उसके द्वारा उत्पादित भविष्यवाणियों की संख्या (एक या कई) और प्रत्येक भविष्यवाणी के लिए वर्णनात्मक जानकारी के संदर्भ में भिन्न होता है। उदाहरण ऐप में मॉडल के मामले में, पूर्वानुमान या तो मान्यता प्राप्त ध्वनियों या शब्दों की एक सूची है। कोड उदाहरण में उपयोग किया गया ऑडियोक्लासिफ़ायर विकल्प ऑब्जेक्ट आपको setMaxResults() विधि के साथ पूर्वानुमानों की अधिकतम संख्या सेट करने देता है, जैसा कि एमएल मॉडल अनुभाग को प्रारंभ में दिखाया गया है।

मॉडल से पूर्वानुमान परिणाम प्राप्त करने के लिए:

  1. AudioClassifier ऑब्जेक्ट की classify() विधि के परिणाम प्राप्त करें और उन्हें श्रोता ऑब्जेक्ट (कोड संदर्भ) में पास करें:

    private fun classifyAudio() {
      ...
      val output = classifier.classify(tensorAudio)
      listener.onResult(output[0].categories, inferenceTime)
    }
    
  2. श्रोता के onResult() फ़ंक्शन का उपयोग करके व्यावसायिक तर्क निष्पादित करके या उपयोगकर्ता को परिणाम प्रदर्शित करके आउटपुट को संभालें:

    private val audioClassificationListener = object : AudioClassificationListener {
      override fun onResult(results: List<Category>, inferenceTime: Long) {
        requireActivity().runOnUiThread {
          adapter.categoryList = results
          adapter.notifyDataSetChanged()
          fragmentAudioBinding.bottomSheetLayout.inferenceTimeVal.text =
            String.format("%d ms", inferenceTime)
        }
      }
    

इस उदाहरण में उपयोग किया गया मॉडल वर्गीकृत ध्वनि या शब्द के लिए एक लेबल के साथ भविष्यवाणियों की एक सूची तैयार करता है, और भविष्यवाणी के आत्मविश्वास का प्रतिनिधित्व करने वाले फ़्लोट के रूप में 0 और 1 के बीच एक भविष्यवाणी स्कोर बनाता है, जिसमें 1 उच्चतम आत्मविश्वास रेटिंग है। सामान्य तौर पर, 50% (0.5) से कम स्कोर वाली भविष्यवाणियों को अनिर्णायक माना जाता है। हालाँकि, आप कम-मूल्य वाले पूर्वानुमान परिणामों को कैसे संभालते हैं यह आप पर और आपके एप्लिकेशन की ज़रूरतों पर निर्भर करता है।

एक बार जब मॉडल भविष्यवाणी परिणामों का एक सेट लौटा देता है, तो आपका एप्लिकेशन आपके उपयोगकर्ता को परिणाम प्रस्तुत करके या अतिरिक्त तर्क निष्पादित करके उन भविष्यवाणियों पर कार्य कर सकता है। उदाहरण कोड के मामले में, एप्लिकेशन ऐप उपयोगकर्ता इंटरफ़ेस में पहचानी गई ध्वनियों या शब्दों को सूचीबद्ध करता है।

अगले कदम

आप TensorFlow हब पर और पूर्व-प्रशिक्षित मॉडल गाइड पेज के माध्यम से ऑडियो प्रोसेसिंग के लिए अतिरिक्त TensorFlow Lite मॉडल पा सकते हैं। TensorFlow Lite के साथ अपने मोबाइल एप्लिकेशन में मशीन लर्निंग लागू करने के बारे में अधिक जानकारी के लिए, TensorFlow Lite डेवलपर गाइड देखें।