ऑडियो क्लासिफ़िकेशन के लिए एक बेसिक ऐप्लिकेशन बनाना

1. शुरू करने से पहले

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

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

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

  • इस्तेमाल करने के लिए तैयार पहले से प्रशिक्षित मशीन लर्निंग मॉडल को ढूंढने का तरीका.
  • रीयल टाइम में रिकॉर्ड किए गए ऑडियो में ऑडियो की कैटगरी तय करने का तरीका.
  • मॉडल इनपुट और पोस्टप्रोसेस मॉडल के आउटपुट के लिए, TensorFlow Lite सहायता लाइब्रेरी का इस्तेमाल करने का तरीका.
  • ऑडियो से जुड़े सभी काम करने के लिए, ऑडियो टास्क लाइब्रेरी का इस्तेमाल करने का तरीका.

आप क्या बनाएंगे #39;

एक ऐसा सामान्य ऑडियो पहचानकर्ता ऐप्लिकेशन जो रीयल-टाइम में माइक्रोफ़ोन से ऑडियो की पहचान करने के लिए, TensorFlow Lite की आवाज़ की पहचान करने वाला मॉडल चलाता है

33af0fdb0a027fa8.png

आपको इनकी ज़रूरत होगी

  • Android Studio का नया वर्शन (v4.1.2+)
  • एपीआई 23 (Android 6.0) के साथ Android वर्शन वाला फ़िज़िकल Android डिवाइस
  • सैंपल कोड
  • Kotlin में Android डेवलपमेंट की बुनियादी जानकारी

2. सैंपल कोड पाएं

कोड डाउनलोड करें

इस कोडलैब के सभी कोड डाउनलोड करने के लिए, इस लिंक पर क्लिक करें:

डाउनलोड की गई zip फ़ाइल को अनपैक करें. यह एक रूट फ़ोल्डर (odml-pathways) को ज़रूरत के मुताबिक सभी संसाधनों से अनपैक कर देगा. इस कोडलैब के लिए, आपको सिर्फ़ audio_classification/codelab1/android सबडायरेक्ट्री के सोर्स की ज़रूरत होगी.

ध्यान दें: अगर आप डेटा स्टोर करने की जगह को क्लोन करना चाहते हैं, तो:

git clone https://github.com/googlecodelabs/odml-pathways.git

audio_classification/codelab1/android रिपॉज़िटरी में android सबडायरेक्ट्री में दो डायरेक्ट्री होती हैं:

  • android_studio_folder.pngस्टार्टर—इस कोडलैब के लिए बनाया गया शुरुआती कोड.
  • android_studio_folder.pngफ़ाइनल—खत्म हो चुके सैंपल ऐप्लिकेशन के लिए पूरा कोड.

स्टार्टर ऐप्लिकेशन इंपोर्ट करना

Android Studio में स्टार्टर ऐप्लिकेशन इंपोर्ट करके, शुरू करें'

  1. Android Studio खोलें और प्रोजेक्ट इंपोर्ट करें (Gradle, Eclipse ADT वगैरह) चुनें.
  2. पहले डाउनलोड किए गए सोर्स कोड में से starter फ़ोल्डर (audio_classification/codelab1/android/starter) खोलें.

7c0f27882a2698ac.png

यह पक्का करने के लिए कि आपके ऐप्लिकेशन में सभी डिपेंडेंसी उपलब्ध हों, आपको प्रोजेक्ट को Gradle फ़ाइलों के साथ सिंक करना चाहिए. ऐसा तब करें, जब इंपोर्ट की प्रोसेस पूरी हो जाए.

  1. Android Studio टूलबार से प्रोजेक्ट प्रोजेक्ट को Gradle फ़ाइलों के साथ सिंक करें (b451ab2d04d835f9.png) चुनें.

स्टार्टर ऐप्लिकेशन चलाना

अब जब आपने Android Studio में प्रोजेक्ट इंपोर्ट कर लिया है, तो आप #39;पहली बार ऐप्लिकेशन चलाने के लिए तैयार हैं.

अपने Android डिवाइस को कंप्यूटर से यूएसबी के ज़रिए कनेक्ट करें और Android Studio टूलबार में चलाएं (shortcuts.png) पर क्लिक करें.

5518972c21705945.png

3. पहले से प्रशिक्षित मॉडल ढूंढना

ऑडियो क्लासिफ़िकेशन करने के लिए, आपको एक मॉडल की ज़रूरत होगी. पहले से तैयार मॉडल की मदद से ट्रेनिंग लें, ताकि आपको खुद को ट्रेनिंग न देनी पड़े.

पहले से प्रशिक्षित मॉडल ढूंढने के लिए, आपको TensorFlow हब ( www.tfhub.dev) का इस्तेमाल करना होगा.

91e39900ff58818c.png

मॉडल, डोमेन के हिसाब से बनाए जाते हैं. आपको अभी ऑडियो प्रॉब्लम डोमेन की ज़रूरत है.

9D44d38c297bf3dc.png

अपने ऐप्लिकेशन के लिए, आप YAMNet मॉडल के साथ इवेंट की कैटगरी बनाएंगे.

YAMNet एक ऑडियो इवेंट क्लासीफ़ायर है जो इनपुट के तौर पर ऑडियो वेवफ़ॉर्म लेता है और हर 521 ऑडियो इवेंट के लिए इंडिपेंडेंट अनुमान लगाता है.

मॉडल yamnet/classify को पहले ही TensorFlow Lite में बदल दिया गया है. साथ ही, इसमें खास मेटाडेटा है, जो मॉडल के लिए TFLite टास्क लाइब्रेरी को चालू करता है, ताकि मोबाइल डिवाइसों पर इस मॉडल को इस्तेमाल करने में आसानी हो.

65dc0f610eb27762.png

दायां टैब चुनें: TFLite (yamnet/classify/tflite) और डाउनलोड करें पर क्लिक करें. आप सबसे नीचे मॉडल का ## मेटाडेटा भी देख सकते हैं.

cfb3cfeb310e1f51.png

इस मॉडल फ़ाइल (lite-model_yamnet_classification_tflite_1.tflite) का इस्तेमाल अगले चरण में किया जाएगा.

4. नए मॉडल को आधार ऐप्लिकेशन में आयात करें

सबसे पहले, डाउनलोड किए गए मॉडल को अपने ऐप्लिकेशन में एसेट फ़ोल्डर में ले जाएं.

Android Studio में, प्रोजेक्ट एक्सप्लोरर में एसेट फ़ोल्डर पर दायां क्लिक करें.

7ca2c22ed8cf4c8.png

आपको विकल्पों की सूची के साथ एक पॉप-अप दिखेगा. इनमें से एक फ़ोल्डर, आपके फ़ाइल सिस्टम में खोलना होगा. Mac पर यह फ़ाइंडर में दिखाएं होगा, Windows पर यह एक्सप्लोरर में खोलें होगा और Ubuntu पर यह फ़ाइलों में दिखाएं होगा. अपने ऑपरेटिंग सिस्टम के हिसाब से सही सिस्टम चुनें और उसे चुनें.

95e0eca881d35f6b.png

इसके बाद, डाउनलोड किए गए मॉडल को उसमें कॉपी करें.

एक बार यह काम #39; हो जाने पर, Android Studio पर वापस जाएं और आपको अपनी फ़ाइल एसेट फ़ोल्डर में दिखेगी.

703b1842fb09e893.png

5. बेस ऐप्लिकेशन पर नया मॉडल लोड करें

अब आप #39 कुछ टास्क का पालन करेंगे और पिछले चरण में प्रोजेक्ट में अभी-अभी जोड़े गए मॉडल के साथ ऑडियो वर्गीकरण सक्षम करेंगे.

Android Studio में, टास्क आसानी से ढूंढने के लिए, मेन्यू में जाएं: > टूल Windows > टास्क देखें. इससे सूची के साथ एक विंडो खुलेगी और आप सीधे कोड पर जाने के लिए उस पर क्लिक कर सकते हैं.

build.gradle (मॉड्यूल वर्शन) फ़ाइल में आपको पहला टास्क मिलेगा.

टास्क 1, Android की डिपेंडेंसी जोड़ना है:

implementation 'org.tensorflow:tensorflow-lite-task-audio:0.2.0'

बाकी के कोड बदलाव MainActivity को किए जाएंगे

टास्क 2.1 वैरिएबल और #39; के नाम वाला वैरिएबल बनाता है, ताकि अगले चरणों पर लोड किया जा सके.

var modelPath = "lite-model_yamnet_classification_tflite_1.tflite"

सलाह 2.2 जिसमें आप #&939; मॉडल की मदद से अनुमान स्वीकार करने के लिए, कम से कम थ्रेशोल्ड तय करेंगे. इस वैरिएबल का इस्तेमाल बाद में किया जाएगा.

var probabilityThreshold: Float = 0.3f

काम की जगह 2.3 वह जगह है जहां आप एसेट फ़ोल्डर से मॉडल लोड करेंगे. ऑडियो टास्क लाइब्रेरी में बताई गई ऑडियो क्लासीफ़ायर क्लास, मॉडल को लोड करने और ऑडियो चलाने के लिए अनुमान लगाने के सभी ज़रूरी तरीके उपलब्ध कराने के लिए तैयार है.

val classifier = AudioClassifier.createFromFile(this, modelPath)

6. ऑडियो कैप्चर करें

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

टास्क 3.1: ट्यूनर वैरिएबल बनाएं, जो अनुमान के लिए रिकॉर्डिंग को स्टोर करेगा और रिकॉर्डर के लिए फ़ॉर्मैट की खास बातें बनाएगा.

val tensor = classifier.createInputTensorAudio()

टास्क 3.2: वे ऑडियो रिकॉर्डर की विशेषताएं दिखाएं जिन्हें पिछले चरण में मॉडल' के मेटाडेटा ने तय किया था.

val format = classifier.requiredTensorAudioFormat
val recorderSpecs = "Number Of Channels: ${format.channels}\n" +
       "Sample Rate: ${format.sampleRate}"
recorderSpecsTextView.text = recorderSpecs

92e81894674a5b0.png

टास्क 3.3: ऑडियो रिकॉर्डर बनाएं और रिकॉर्ड करना शुरू करें.

val record = classifier.createAudioRecord()
record.startRecording()

फ़िलहाल, आपका ऐप्लिकेशन आपके फ़ोन के माइक्रोफ़ोन पर सुन रहा है. हालांकि, इस पर अब भी कोई अनुमान नहीं लगाया जा रहा है. आप अगले चरण में इसे ठीक करेंगे.

7. अपने मॉडल में अनुमान जोड़ें

इस चरण में'अपने ऐप्लिकेशन में अनुमान कोड जोड़ें और उसे स्क्रीन पर दिखाएं. कोड में पहले से ही एक टाइमर थ्रेड होता है, जिसे हर आधे सेकंड में लागू किया जाता है. साथ ही, यह भी होता है कि यहां #39; अनुमान लगाया जाएगा.

scheduleAtFixedRate तरीके के लिए पैरामीटर, हर 500 मिलीसेकंड के बाद कोड में, एक्ज़ीक्यूशन को शुरू करने और इंतज़ार के समय के बीच इंतज़ार करने का समय है.

Timer().scheduleAtFixedRate(1, 500) {
...
}

टास्क 4.1 के मॉडल का इस्तेमाल करने के लिए कोड जोड़ें. पहले रिकॉर्डिंग को ऑडियो टेंशनर पर लोड करें और उसे क्लासीफ़ायर के पास भेजें:

tensor.load(record)
val output = classifier.classify(tensor)

बेहतर अनुमान के नतीजे पाने के लिए 4.2 का इस्तेमाल करें. इससे आप ऐसे किसी भी क्लासिफ़िकेशन को फ़िल्टर कर पाएंगे जिसकी संभावना बहुत कम है. यहां आप पिछले # (probabilityThreshold) में बनाए गए वैरिएबल का इस्तेमाल करेंगे:

val filteredModelOutput = output[0].categories.filter {
   it.score > probabilityThreshold
}

टास्क 4.3: नतीजे को और आसानी से पढ़ने के लिए, फ़िल्टर किए गए नतीजों के साथ एक स्ट्रिंग बनाएं:

val outputStr = filteredModelOutput.sortedBy { -it.score }
   .joinToString(separator = "\n") { "${it.label} -> ${it.score} " }

टास्क 4.4 यूज़र इंटरफ़ेस (यूआई) अपडेट करें. इस आसान से ऐप्लिकेशन में, नतीजा सिर्फ़ TextView में दिखता है. क्योंकि मुख्य थ्रेड पर क्लासिफ़िकेशन नहीं है, इसलिए आपको यह अपडेट करने के लिए एक हैंडलर का इस्तेमाल करना होगा.

runOnUiThread {
   textView.text = outputStr
}

आपने सभी ज़रूरी कोड को:

  • मॉडल को एसेट फ़ोल्डर से लोड करें
  • सही कॉन्फ़िगरेशन वाला ऑडियो रिकॉर्डर बनाना
  • दौड़ का अनुमान
  • स्क्रीन पर सबसे अच्छे नतीजे दिखाएं

अब बस इतना ही ज़रूरी है कि आप ऐप्लिकेशन की जांच कर रहे हों.

8. फ़ाइनल ऐप्लिकेशन चलाएं

आपने ऐप्लिकेशन में ऑडियो क्लासिफ़िकेशन मॉडल इंटिग्रेट किया है, इसलिए इसकी जांच करने दें.

अपना Android डिवाइस कनेक्ट करें और Android Studio टूलबार में चलाएं (shortcuts.png) पर क्लिक करें.

पहली बार चलाने पर, आपको ऐप्लिकेशन को ऑडियो रिकॉर्ड करने की अनुमतियां देनी होंगी.

अनुमति देने के बाद, शुरू होने वाला ऐप्लिकेशन फ़ोन के माइक्रोफ़ोन का इस्तेमाल करेगा. इसकी जांच करने के लिए, फ़ोन के पास बोलना शुरू करें, क्योंकि YAMNet को इनमें से किसी एक क्लास का पता लगता है. एक और आसान क्लास है, जिसे ताली बजाना या ताली बजाना आसान है.

आप कुत्तों के भौंकने की संख्या और दूसरे कई संभावित इवेंट (521) का पता लगाने की कोशिश भी कर सकते हैं. पूरी सूची के लिए, आप उनके सोर्स कोड को देख सकते हैं या लेबल फ़ाइल के साथ मेटाडेटा को सीधे भी पढ़ सकते हैं

33af0fdb0a027fa8.png

9. बधाई हो!

इस कोडलैब में, आपने ऑडियो क्लासिफ़िकेशन के लिए पहले से प्रशिक्षित मॉडल को खोजने और TensorFlow Lite की मदद से, इसे अपने मोबाइल ऐप्लिकेशन पर डिप्लॉय करने का तरीका सीखा. TFLite के बारे में ज़्यादा जानने के लिए, TFLite के दूसरे नमूने देखें.

हमने क्या-क्या शामिल किया है

  • Android ऐप्लिकेशन पर TensorFlow Lite मॉडल को डिप्लॉय करने का तरीका.
  • TensorFlow Hub से मॉडल ढूंढने और उनका इस्तेमाल करने का तरीका.

अगले चरण

  • अपने डेटा से मॉडल को पसंद के मुताबिक बनाएं.

ज़्यादा जानें

कोई सवाल है?

समस्याओं की शिकायत करना