1. शुरू करने से पहले
पिछले कोडलैब में, आप ऑडियो क्लासिफ़िकेशन के लिए एक बेसिक ऐप्लिकेशन बनाते थे.
अगर आप अलग-अलग क्लास से ऑडियो पहचानने के लिए, ऑडियो की कैटगरी तय करने वाले मॉडल को कस्टमाइज़ करना चाहते हैं, जो पहले से ट्रेनिंग वाला मॉडल नहीं है? या अगर आप अपने डेटा का इस्तेमाल करके मॉडल को पसंद के मुताबिक बनाना चाहते हैं, तो क्या होगा?
इस कोडलैब में आप पक्षी की आवाज़ का पता लगाने के लिए, पहले से प्रशिक्षित ऑडियो क्लासिफ़िकेशन मॉडल को पसंद के मुताबिक बनाएंगे. यही तकनीक आपके डेटा का इस्तेमाल करके भी दोहराई जा सकती है.
ज़रूरी बातें
यह कोडलैब ऐसे मोबाइल डेवलपर के लिए डिज़ाइन किया गया है जो मशीन लर्निंग का इस्तेमाल करना चाहते हैं. आपको इनके बारे में पता होना चाहिए:
- Kotlin और Android Studio का इस्तेमाल करके Android डेवलपमेंट
- बुनियादी Python सिंटैक्स
आप इन चीज़ों के बारे में जानेंगे
- ऑडियो डोमेन के लिए ट्रांसफ़र करने का तरीका
- अपना डेटा बनाने का तरीका
- किसी Android ऐप्लिकेशन पर अपने मॉडल को डिप्लॉय करने का तरीका
आपको इनकी ज़रूरत होगी
- Android Studio का नया वर्शन (v4.1.2+)
- एपीआई 23 (Android 6.0) के साथ Android वर्शन वाला फ़िज़िकल Android डिवाइस
- सैंपल कोड
- Kotlin में Android डेवलपमेंट की बुनियादी जानकारी
2. पक्षी का डेटासेट
आप बर्डगान डेटासेट का इस्तेमाल करेंगे, जो पहले से तैयार है, ताकि इसे आसानी से इस्तेमाल किया जा सके. सभी ऑडियो फ़ाइलें Xeno-canto वेबसाइट से आती हैं.
इस डेटासेट में ये गाने शामिल हैं:
नाम: हाउस स्पैरो | कोड: houspa |
नाम: रेड क्रॉसबिल | कोड: redcro |
नाम: सफ़ेद स्तन की वुड-रेन | कोड: wbvrre1 |
नाम: अखरोट का शाही एंपिटाटा | कोड: chcant2 |
नाम: Azara's Spinetail | कोड: azaspi1 |
यह डेटासेट zip फ़ाइल में है और इसकी सामग्री हैं:
metadata.csv
जिसमें हर ऑडियो फ़ाइल के बारे में सारी जानकारी होती है. जैसे, ऑडियो रिकॉर्ड करने की जगह, इस्तेमाल किए जाने का लाइसेंस, और पक्षी का नाम.- एक ट्रेन और जांच वाला फ़ोल्डर.
- ट्रेन/टेस्ट फ़ोल्डर में हर # कोड के लिए एक फ़ोल्डर होता है. इन सभी के अंदर उस पक्षी के लिए सभी .wav फ़ाइलें मौजूद होती हैं.
ऑडियो फ़ाइलें wav फ़ॉर्मैट में होती हैं और इन खास बातों को पूरा करें:
यह जानकारी इसलिए ज़रूरी है, क्योंकि आप ऐसे बेस मॉडल का इस्तेमाल करेंगे जो इस फ़ॉर्मैट में डेटा की उम्मीद करता हो. इसके बारे में ज़्यादा जानने के लिए, आप इस ब्लॉग पोस्ट पर ज़्यादा जानकारी पढ़ सकते हैं.
पूरी प्रोसेस को आसान बनाने के लिए, आपको अपनी मशीन पर डेटासेट डाउनलोड करने की ज़रूरत नहीं है! आप इसका इस्तेमाल Google Colab पर (बाद में इस गाइड में) कर सकते हैं.
अगर आप अपना डेटा इस्तेमाल करना चाहते हैं, तो आपकी सभी ऑडियो फ़ाइलें भी इसी फ़ॉर्मैट में होनी चाहिए.
3. सैंपल कोड पाएं
कोड डाउनलोड करें
इस कोडलैब के सभी कोड डाउनलोड करने के लिए, इस लिंक पर क्लिक करें:
या अगर आप चाहें, तो डेटा स्टोर करने की जगह का क्लोन बनाएं:
git clone https://github.com/googlecodelabs/odml-pathways.git
डाउनलोड की गई zip फ़ाइल को अनपैक करें. यह एक रूट फ़ोल्डर (odml-pathways
) को ज़रूरत के मुताबिक सभी संसाधनों से अनपैक कर देगा. इस कोडलैब के लिए, आपको सिर्फ़ audio_classification/codelab2/android
सबडायरेक्ट्री के सोर्स की ज़रूरत होगी.
audio_classification/codelab2/android
रिपॉज़िटरी में android
सबडायरेक्ट्री में दो डायरेक्ट्री होती हैं:
- स्टार्टर—इस कोडलैब के लिए बनाया गया शुरुआती कोड.
- फ़ाइनल—खत्म हो चुके सैंपल ऐप्लिकेशन के लिए पूरा कोड.
स्टार्टर ऐप्लिकेशन इंपोर्ट करना
Android Studio में स्टार्टर ऐप्लिकेशन इंपोर्ट करके शुरू करें:
- Android Studio खोलें और प्रोजेक्ट इंपोर्ट करें (Gradle, Eclipse ADT वगैरह) चुनें.
- पहले डाउनलोड किए गए सोर्स कोड में से
starter
फ़ोल्डर (audio_classification/codelab2/android/starter
) खोलें.
यह पक्का करने के लिए कि आपके ऐप्लिकेशन में सभी डिपेंडेंसी उपलब्ध हों, आपको प्रोजेक्ट को Gradle फ़ाइलों के साथ सिंक करना चाहिए. ऐसा तब करें, जब इंपोर्ट की प्रोसेस पूरी हो जाए.
- Android Studio टूलबार से प्रोजेक्ट प्रोजेक्ट को Gradle फ़ाइलों के साथ सिंक करें ( ) चुनें.
4. स्टार्टर ऐप्लिकेशन को समझना
यह वही ऐप्लिकेशन है जिसे ऑडियो की कैटगरी तय करने के लिए, पहले कोडलैब में बनाया गया था: ऑडियो की कैटगरी तय करने के लिए एक सामान्य ऐप्लिकेशन बनाएं.
कोड को अच्छी तरह से समझने के लिए, यह सुझाव दिया जाता है कि आप जारी रखने से पहले कोडलैब का इस्तेमाल करें.
सभी कोड, MainActivity
में हैं. इसे जितना हो सके उतना आसान रखें.
कुल मिलाकर, कोड नीचे दिए गए टास्क पर जाता है:
- मॉडल लोड किया जा रहा है
val classifier = AudioClassifier.createFromFile(this, modelPath)
- ऑडियो रिकॉर्डर बनाना और रिकॉर्डिंग शुरू करना
val tensor = classifier.createInputTensorAudio()
val format = classifier.requiredTensorAudioFormat
val recorderSpecs = "Number Of Channels: ${format.channels}\n" +
"Sample Rate: ${format.sampleRate}"
recorderSpecsTextView.text = recorderSpecs
val record = classifier.createAudioRecord()
record.startRecording()
- अनुमान लगाने के लिए, टाइमर थ्रेड बनाना. इस तरीके
scheduleAtFixedRate
के पैरामीटर से पता चलता है कि एक्ज़ीक्यूशन शुरू होने में कितना समय लगेगा और टास्क एक के बाद एक होने के लिए कितना समय लगेगा. नीचे दिए गए कोड में, यह 1 मिलीसेकंड में शुरू होगा और हर 500 मिलीसेकंड में फिर से चलेगा.
Timer().scheduleAtFixedRate(1, 500) {
...
}
- कैप्चर किए गए ऑडियो पर अनुमान लगाया जा रहा है
val numberOfSamples = tensor.load(record)
val output = classifier.classify(tensor)
- कम स्कोर के लिए, डेटा को अलग-अलग कैटगरी में फ़िल्टर करें
val filteredModelOutput = output[0].categories.filter {
it.score > probabilityThreshold
}
- स्क्रीन पर नतीजे दिखाएं
val outputStr = filteredModelOutput.map { "${it.label} -> ${it.score} " }
.joinToString(separator = "\n")
runOnUiThread {
textView.text = outputStr
}
अब आप ऐप्लिकेशन को पहले की तरह ही चला सकते हैं, लेकिन याद रखें कि यह ज़्यादा सामान्य प्री-ट्रेन किया गया मॉडल इस्तेमाल कर रहा है.
5. मॉडल मेकर के साथ कस्टम ऑडियो क्लासिफ़िकेशन मॉडल को ट्रेनिंग दें
पिछले चरण में, आपने ऐसा ऐप्लिकेशन डाउनलोड किया है जो ऑडियो इवेंट की कैटगरी तय करने के लिए, पहले से प्रशिक्षित मॉडल का इस्तेमाल करता है. हालांकि, कभी-कभी आपको इस मॉडल को अपनी पसंद के ऑडियो इवेंट के मुताबिक बनाना होगा, जिसमें आपकी दिलचस्पी है या इसे ज़्यादा खास वर्शन के तौर पर बनाएं.
जैसा कि पहले बताया गया था, आप पक्षी की आवाज़ों के मॉडल को खास बनाते हैं. यहां, पक्षियों की जानकारी वाला डेटासेट है, जिसे Xeno-canto की वेबसाइट से चुना गया है.
Colaboratory
इसके बाद, कस्टम मॉडल को ट्रेनिंग देने के लिए, Google Colab पर जाएं.
कस्टम मॉडल को ट्रेनिंग देने में करीब 30 मिनट लगेंगे.
अगर आपको यह कदम छोड़ना है, तो दिए गए डेटासेट की मदद से उस मॉडल को डाउनलोड किया जा सकता है जिसे आपने दूसरे क्रिएटर के साथ मिलकर बनाया है. साथ ही, अगले चरण पर जाएं
6. Android ऐप्लिकेशन में, पसंद के मुताबिक TFLite मॉडल को जोड़ना
अब जबकि आपने अपने ऑडियो की कैटगरी तय करने के मॉडल को ट्रेनिंग दे दी है और उसे स्थानीय तौर पर सेव कर लिया है, तो आपको उसे Android ऐप्लिकेशन के एसेट फ़ोल्डर में रखना होगा.
सबसे पहले, डाउनलोड किए गए मॉडल को अपने ऐप्लिकेशन में एसेट फ़ोल्डर में ले जाएं.
- Android Studio में, Android प्रोजेक्ट व्यू के साथ, एसेट फ़ोल्डर पर दायां क्लिक करें.
- आपको विकल्पों की सूची के साथ एक पॉप-अप दिखेगा. इनमें से एक फ़ोल्डर, आपके फ़ाइल सिस्टम में खोलना होगा. अपने ऑपरेटिंग सिस्टम के हिसाब से सही सिस्टम चुनें और उसे चुनें. Mac पर यह फ़ाइंडर में दिखाएं होगा, Windows पर खोलें और Ubuntu पर यह फ़ाइलों में दिखाएं होगा.
- डाउनलोड किए गए मॉडल को फ़ोल्डर में कॉपी करें.
ऐसा करने के बाद, Android Studio पर वापस जाएं. इसके बाद, आपको एसेट फ़ोल्डर में अपनी फ़ाइल दिखेगी.
7. बेस ऐप्लिकेशन पर नया मॉडल लोड करें
बेस ऐप्लिकेशन में पहले से ट्रेनिंग वाला मॉडल इस्तेमाल किया जाता है. आप इसे उस यूआरएल से बदल देंगे जिसे आपने अभी-अभी ट्रेनिंग दी है.
- काम का 1: नए मॉडल को एसेट फ़ोल्डर में जोड़ने के बाद, उसे लोड करने के लिए
modelPath
वैरिएबल की वैल्यू बदलें:
var modelPath = "my_birds_model.tflite"
नए मॉडल में दो आउटपुट (हेड्स) हैं:
- इस मामले में YAMNet का इस्तेमाल किए गए बेस मॉडल से मूल और ज़्यादा सामान्य आउटपुट.
- दूसरा फ़ीड, जो उन पक्षियों के लिए खास है जिन्हें आपने ट्रेनिंग के लिए इस्तेमाल किया है.
यह ज़रूरी है, क्योंकि YAMNet कई क्लास को पहचानने का बढ़िया काम करता है, जैसे कि साइलेंस जैसी आम क्लास. इससे आपको #39;उन सभी क्लास की चिंता करने की ज़रूरत नहीं है जिन्हें आपने अपने डेटासेट में नहीं जोड़ा है.
अगर आप YAMNet को अलग-अलग कैटगरी में बांटते हैं, तो आपको यह दिखेगा कि दूसरे आउटपुट में यह कौनसा पक्षी है.
- काम 2: पढ़ें कि क्या क्लासिफ़िकेशन के पहले सिर पर बहुत भरोसा है कि यह पक्षी #33; है. यहां आप फ़िल्टरिंग को बदलकर ऐसी किसी भी चीज़ को फ़िल्टर कर देंगे जो पक्षी नहीं है:
val filteredModelOuput = output[0].categories.filter {
it.label.contains("Bird") && it.score > .3
}
- टास्क 3: अगर मॉडल के बेस हेड को यह पता चलता है कि ऑडियो में कोई पक्षी दिखाई दे सकता है, तो आपको यह पता चलेगा कि दूसरा सिर कैसा है:
if (filteredModelOutput.isNotEmpty()) {
Log.i("Yamnet", "bird sound detected!")
filteredModelOutput = output[1].categories.filter {
it.score > probabilityThreshold
}
}
और #39. आपने जो मॉडल बनाया है, उसका इस्तेमाल करने के लिए मॉडल बदलना आसान है.
अगला चरण इसे टेस्ट करना है.
8. अपने नए मॉडल के साथ ऐप्लिकेशन का परीक्षण करें
आपने ऐप्लिकेशन में अपने ऑडियो की कैटगरी तय करने वाला मॉडल इंटिग्रेट किया है, इसलिए हमें इसकी जांच करने दें.
- अपना Android डिवाइस कनेक्ट करें और Android Studio टूलबार में चलाएं ( ) पर क्लिक करें.
ऐप्लिकेशन को पक्षियों के ऑडियो का सही अनुमान लगाना चाहिए. टेस्टिंग को आसान बनाने के लिए, अपने कंप्यूटर में मौजूद ऑडियो का इस्तेमाल करें (पिछले चरणों में) और आपका फ़ोन इसे पहचान सकता है. ऐसा करने पर, यह स्क्रीन पर पक्षी के नाम और उसके सही होने की संभावना पर दिखेगा.
9. बधाई हो
इस कोडलैब में आपने यह सीखा कि मॉडल मेकर के साथ अपना ऑडियो क्लासिफ़िकेशन मॉडल कैसे बनाया जाता है. साथ ही, इसे TensorFlow Lite की मदद से, अपने मोबाइल ऐप्लिकेशन पर डिप्लॉय किया जाए. TFLite के बारे में ज़्यादा जानने के लिए, TFLite के दूसरे नमूने देखें.
हमने क्या-क्या शामिल किया है
- अपना डेटासेट कैसे तैयार करें
- मॉडल मेकर के साथ ऑडियो क्लासिफ़िकेशन के लिए ट्रांसफ़र करने का तरीका
- Android ऐप्लिकेशन पर अपने मॉडल का इस्तेमाल करने का तरीका
अगले चरण
- अपने डेटा से कोशिश करें
- अपने बनाए गए प्रॉडक्ट को हमारे साथ शेयर करें
ज़्यादा जानें
- लर्निंग पाथ का लिंक
- TensorFlow Lite से जुड़े दस्तावेज़
- मॉडल मेकर का दस्तावेज़
- TensorFlow हब से जुड़े दस्तावेज़
- Google की टेक्नोलॉजी के साथ डिवाइस पर मौजूद मशीन लर्निंग