คุณสามารถใช้การรู้จำคำพูดอัตโนมัติ (ASR) เพื่อจดจำคำพูดที่เฉพาะเจาะจง
จากผู้ใช้โดยใช้ SpeechRecognizer แล้วเปลี่ยนคำพูดเหล่านั้นให้เป็นข้อความ
SpeechRecognizer มีให้ใช้งานใน Android อยู่แล้ว (ไม่ต้องใช้ไลบรารีเพิ่มเติม) และทำงานได้แม้ในขณะออฟไลน์
หากต้องการให้ SpeechRecognizer แปลงคำพูดของผู้ใช้เป็นข้อความ ผู้ใช้ต้อง
ให้สิทธิ์ RECORD_AUDIO แก่แอปของคุณ ดูวิธีขอสิทธิ์นี้สำหรับแอปของคุณได้ที่ ขอสิทธิ์เข้าถึงฮาร์ดแวร์
สร้างอินสแตนซ์ของ SpeechRecognizer
สร้างอินสแตนซ์ของ SpeechRecognizer ในเมธอด กิจกรรมที่คาดการณ์ไว้
onCreate เพื่อให้ใช้งานได้ตลอดอายุการใช้งานของ
กิจกรรม
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
}
}
}
...
}
ประเด็นสำคัญเกี่ยวกับโค้ด
ระบบจะค้นหาอาร์เรย์ 2 รายการใน Bundle อาร์เรย์แรกมีรายการที่ตรงกันทั้งหมด และอาร์เรย์ที่ 2 คือความมั่นใจของเครื่องมือรู้จำคำพูดในสิ่งที่ได้ยิน ดัชนีของอาร์เรย์เหล่านี้สอดคล้องกัน ระบบจะใช้รายการที่ตรงกันซึ่งมีค่า Confidence สูงสุด (
mostConfidentIndex)ระบบจะทำการจับคู่สตริงแบบไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่เพื่อกำหนดการดำเนินการที่ผู้ใช้ต้องการ
แนวทางอื่นเมื่อจับคู่
ในตัวอย่างก่อนหน้า ระบบจะใช้รายการที่ตรงกันซึ่งมีค่า Confidence สูงสุด การเลือกนี้หมายความว่าระบบต้องมั่นใจในสิ่งที่เข้าใจจากผู้ใช้พอสมควร ไม่เช่นนั้นระบบจะไม่แจ้งรายการที่ตรงกัน เมื่อใช้แนวทางนี้ คุณอาจได้รับผลลบลวง
อีกแนวทางหนึ่งคือการดูรายการที่ตรงกันทั้งหมดโดยไม่คำนึงถึงความมั่นใจ แล้วค้นหารายการที่ตรงกับอินพุตที่คุณต้องการ ในทางกลับกัน แนวทางนี้อาจทำให้เกิดผลบวกลวงมากขึ้น แนวทางที่คุณควรใช้ขึ้นอยู่กับกรณีการใช้งานเป็นส่วนใหญ่
เริ่มฟัง
หากต้องการเริ่มฟังผู้ใช้ ให้ระบุ ACTION_RECOGNIZE_SPEECH
Intent เมื่อเรียกใช้ startListening
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_MODELด้วย LANGUAGE_MODEL_FREE_FORMมีไว้สำหรับคำพูดสนทนา