본문 바로가기

개인 프로젝트

SpeechRecognizer 음성인식 API 사용하기

1. 서론

내 삶을 더 편리하게 해줄 개인 비서 앱을 만들고 싶다. 그렇지만 버튼을 클릭하기는 너무 귀찮다. 역시 말로 하는 게 편하다.

 

지금 생각 중인 아키텍처로는

1) 클라이언트 앱에서 내 음성을 텍스트로 변환(STT)하고, 서버로 요청을 보낸다.

2) 서버에서 규칙 기반으로 요청을 분석하여 특정 요청은 직접 만든 API를 호출하고 나머지의 일반적인 질문은 chatGPT API를 호출한다.

ex. 버스 시간 알려줘 → 자체 서비스

ex. 우분투에서 CI/CD 어떻게 구축해 → chatGPT API

3) 결과를 클라이언트에 전달, 이 응답을 소리로 변환(TTS)하여 내가 들을 수 있게 한다.

 

2. SpeechRecognizer

구글에서 제공하는 SpeechRecognizer는 안드로이드에서 음성 인식 기능을 구현할 수 있게 해주는 클래스이다. Google의 음성 인식 서버와 통신하여 음성 데이터를 처리하므로 인터넷 연결이 필요하다. (오프라인으로도 작동하지만 정확도가 낮음)

 

권한으로는 INTERNET과 RECORD_AUDIO가 필요하다. 따라서 앱 구동 시 오디오 녹음 권한을 요청하도록 했다.

private fun checkPermission() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.RECORD_AUDIO), RECORD_AUDIO_PERMISSION_CODE)
    }
}

 

권한이 없으면 아래와 같이 권한 요청 화면이 뜨고, 허용 시 음성 인식이 가능하다. 권한이 없는 경우의 에러 코드는 9번,  ERROR_INSUFFICIENT_PERMISSION이다.

 

실제 기기에 설치하여 테스트한 결과이다. 아주 잘 인식한다.

 

3. 결론

SpeechRecognizer를 사용하면 음성을 텍스트로 쉽게 변환할 수 있다. 다만 실제 대화하듯이 구현하려면 잠시 침묵이 흐르더라도 녹음을 중단하지 않고 대기하도록 설정값을 조정해야 할 것 같다.