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