자동 음성 인식을 사용하여 오디오 글라스 및 디스플레이 글라스의 오디오 입력 처리

적용 가능한 XR 기기
이 가이드에서는 이러한 유형의 XR 기기를 위한 환경을 빌드하는 방법을 설명합니다.
오디오 및
디스플레이 안경

자동 음성 인식 (ASR)을 사용하여 특정 발화 를 SpeechRecognizer를 통해 사용자의 발화로 인식하고 텍스트로 변환할 수 있습니다. SpeechRecognizer 는 Android에 기본 제공되며 (추가 라이브러리 필요 없음) 오프라인에서도 작동합니다.

SpeechRecognizer가 사용자의 음성을 텍스트로 변환하려면 사용자가 앱에 RECORD_AUDIO 권한을 부여해야 합니다. 앱에 이 권한을 요청하는 방법을 알아보려면 하드웨어 권한 요청을 참고하세요.

SpeechRecognizer 인스턴스화

예상 활동의 projected activity's 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)이 사용됩니다.

  • 대소문자를 구분하지 않는 문자열 일치가 실행되어 사용자가 원하는 작업을 결정합니다.

일치 시 대체 접근 방식

이전 예에서는 신뢰도가 가장 높은 일치 항목이 사용됩니다. 이 선택은 시스템이 사용자로부터 이해한 내용에 대해 매우 확신해야 일치 항목을 표시한다는 의미입니다. 이 접근 방식을 사용하면 거짓 음성이 발생할 수 있습니다.

또 다른 접근 방식은 신뢰도와 관계없이 모든 일치 항목을 살펴보고 찾고 있는 입력에 맞는 일치 항목을 찾는 것입니다. 반대로 이러한 접근 방식은 거짓 양성을 더 많이 발생시킬 수 있습니다. 취해야 할 접근 방식은 사용 사례에 따라 크게 달라집니다.

듣기 시작

사용자의 음성을 듣기 시작하려면 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)

}

코드의 주요 사항