자동 음성 인식 (ASR)을 사용하여 SpeechRecognizer를 통해 사용자의 특정 발언을 인식하고 텍스트로 변환할 수 있습니다.
SpeechRecognizer는 Android에 내장되어 있으며 (추가 라이브러리 필요 없음) 오프라인 상태에서도 작동합니다.
SpeechRecognizer가 사용자의 음성을 텍스트로 변환하려면 사용자가 앱에 RECORD_AUDIO 권한을 부여해야 합니다. 앱에 이 권한을 요청하는 방법을 알아보려면 하드웨어 권한 요청을 참고하세요.
SpeechRecognizer 인스턴스화
활동의 수명 동안 사용할 수 있도록 AI 안경 활동의 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_MODEL추가 기능도 지정해야 합니다.LANGUAGE_MODEL_FREE_FORM은 대화형 음성에 사용됩니다.