SpeechRecognizer का इस्तेमाल करके, ऑटोमैटिक स्पीच रिकॉग्निशन (एएसआर) की सुविधा का इस्तेमाल किया जा सकता है. इससे, उपयोगकर्ता के खास शब्दों को पहचाना जा सकता है और उन्हें टेक्स्ट में बदला जा सकता है.
SpeechRecognizer को Android में पहले से ही शामिल किया गया है. इसके लिए, किसी अन्य लाइब्रेरी की ज़रूरत नहीं होती. यह ऑफ़लाइन होने पर भी काम करता है.
SpeechRecognizer को उपयोगकर्ता की बोली को टेक्स्ट में बदलने के लिए, उपयोगकर्ता को आपके ऐप्लिकेशन को RECORD_AUDIO की अनुमति देनी होगी. अपने ऐप्लिकेशन के लिए इस अनुमति का अनुरोध करने का तरीका जानने के लिए, हार्डवेयर की अनुमतियों का अनुरोध करना लेख पढ़ें.
SpeechRecognizer को इंस्टैंशिएट करें
एआई चश्मे की गतिविधि के onCreate() तरीके में SpeechRecognizer को इंस्टैंशिएट करें, ताकि यह गतिविधि के पूरे समय के लिए उपलब्ध रहे:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//The RECORD_AUDIO permission must be granted to your app before instantiation
speechRecognizer = SpeechRecognizer.createOnDeviceSpeechRecognizer(this)
speechRecognizer?.setRecognitionListener(recognitionListener)
...
}
RecognitionListener को कॉन्फ़िगर करना
setRecognitionListener() तरीके से, उस ऑब्जेक्ट के बारे में बताया जा सकता है जहां अहम कॉलबैक किए जाते हैं. जैसे, RecognitionListener.onResults() में. सिस्टम, बोली गई भाषा को पहचानने के बाद इसे कॉल करता है.
val recognitionListener = object : RecognitionListener {
override fun onResults(results: Bundle?) {
val matches = results?.getStringArrayList(RESULTS_RECOGNITION)
val confidences = results?.getFloatArray(CONFIDENCE_SCORES)
val mostConfidentIndex = confidences!!.indices.maxByOrNull { confidences[it] }
if (mostConfidentIndex != null){
val spokenText = matches[mostConfidentIndex]
if (spokenText.equals("Start my Run", ignoreCase = true)){
// User indicated they want to start a run
}
}
}
...
}
कोड के बारे में अहम जानकारी
इस बंडल में दो ऐरे के लिए क्वेरी की गई है. पहले ऐरे में सभी मैच शामिल होते हैं और दूसरे ऐरे में, स्पीच रिकॉग्नाइज़र को यह भरोसा होता है कि क्या सुना गया था. इन ऐरे के इंडेक्स एक-दूसरे से मेल खाते हैं. सबसे ज़्यादा कॉन्फ़िडेंस वैल्यू (
mostConfidentIndex) वाले मैच का इस्तेमाल किया जाता है.यह पता लगाने के लिए कि उपयोगकर्ता को कौनसी कार्रवाई करनी है, केस-संवेदी स्ट्रिंग मैच किया जाता है.
मिलान करते समय अन्य तरीके
पिछले उदाहरण में, सबसे ज़्यादा कॉन्फ़िडेंस वैल्यू वाले मैच का इस्तेमाल किया गया है. इस विकल्प का मतलब है कि सिस्टम को यह पक्का होना चाहिए कि उसने उपयोगकर्ता की बात समझ ली है. ऐसा न होने पर, वह किसी भी मैच को फ़्लैग नहीं करेगा. इस तरीके का इस्तेमाल करने पर, आपको गलत नेगेटिव मिल सकते हैं.
एक और तरीका यह हो सकता है कि कॉन्फ़िडेंस स्कोर की परवाह किए बिना, सभी मैच देखे जाएं और ऐसा मैच ढूंढा जाए जो आपके इनपुट से मेल खाता हो. इसके उलट, इस तरह के तरीके से ऐसे नतीजों की संख्या बढ़ सकती है जिन्हें समीक्षा के बाद सही माना जाएगा. आपको किस तरीके का इस्तेमाल करना चाहिए, यह काफ़ी हद तक आपके इस्तेमाल के उदाहरण पर निर्भर करता है.
सुनना शुरू करें
उपयोगकर्ता की बात सुनने के लिए, startListening() को कॉल करते समय ACTION_RECOGNIZE_SPEECH इंटेंट तय करें.
override fun onStart() {
super.onStart()
val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
}
speechRecognizer?.startListening(intent)
}
कोड के बारे में अहम जानकारी
ACTION_RECOGNIZE_SPEECHका इस्तेमाल करते समय, आपकोEXTRA_LANGUAGE_MODELextra की वैल्यू भी देनी होगी.LANGUAGE_MODEL_FREE_FORMको बातचीत वाली स्पीच के लिए बनाया गया है.