자동 음성 인식을 사용하여 AI 안경의 오디오 입력 처리

해당 XR 기기
이 안내는 이러한 유형의 XR 기기용 환경을 구축하는 데 도움이 됩니다.
AI 글래스

자동 음성 인식 (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)

}

코드에 관한 핵심 사항