이번 주에는 라즈베리파이를 이용한 간단한 음성 인식 DIY를 진행해보고자 합니다. 실제 음성 인식 시스템을 바닥부터 만드려면 다양하고 방대한 음성 데이터와 머신 러닝 능력을 갖춘 개발자를 갈아 넣으면(ㅠㅠ) 됩니다. 다행히도 구글과 아마존 같은 대기업에서 이미 편리한 솔루션을 만들어서 비교적 사용하기 편하게 제공하고 있습니다. 먼저 대표적인 음성인식 솔루션으로는 구글의 구글 어시스턴트(Google Assistant)와 스피치(Speech API) 아마존의 알렉사(Alexa)가 있습니다. 셋 다 Python SDK 형태로 제공되기 때문에 처음 데모를 동작시키는 것만 성공한다면 Python만 할 줄 알면 누구나 쉽게 자신만의 음성 인식 장치/프로그램을 만들 수 있습니다
어시스턴트와 알렉사는 영어 밖에 안되지만 무료이며, 스피치는 110개 언어를 지원하지만 현재 12개월만 무료입니다. 단순히 라이브러리만 다운로드 받는 것이 아니라, 다운로드 받은 라이브러리를 구글이나 아마존 계정을 통해야 하기 때문에 설치과정이 복잡하고 어려울 수 있습니다. 그래도 한번 성공하면, 보다 다양한 프로젝트를 할 수 있으니 인내심을 갖고 도전해보시기 바랍니다. 저도 최대한 쉽게, 많은 그림을 넣어서 정리해보겠습니다.
먼저 라즈비안 업데이트를 진행하겠습니다. 익숙하신 분들은 라즈비안이나 리눅스에서 프로젝트 진행시 필수 사항인 것을 아실 것입니다. 이미지를 새로 만드신 분들은 오래 걸리실 수 있으니 여유를 갖고 진행하시기 바랍니다.
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
음성 인식 데모를 실행하기 앞서 스피커와 마이크를 설정하고 잘 작동하는지 확인할 필요가 있습니다. USB 마이크를 라즈베리파이의 USB에 연결하고, 스피커를 라즈베리파이의 3.5mm 오디오 잭에 연결해줍니다. 라즈비안의 터미널로 들어가서 다음을 따라하시면 됩니다.
먼저 사용가능한 마이크를 확인합니다.
$ arecord -l
사용가능한 스피커를 확인합니다.
$ aplay -l
arecord -l 명령 뒤에 뜬 것이 마이크(capture hardware) 리스트이고, aplay -l 명령 뒤에 나온 것이 스피커(Playback hardware) 리스트입니다. 먼저 마이크는 card 1에 device 0인것을 기억해 두어야 합니다. 그리고 스피커는 card 0에 device가 0, 1로 2개가 있는데, 0번이 오디오 잭에 연결된 스피커이고, 1번은 HDMI 케이블에 연결되는 스피커입니다. 모니터에 스피커가 내장되어 있고 HDMI 연결을 사용한다면 후에 1번을 선택해서 모니터에 내장된 스피커를 사용할 수 있습니다.
위 내용을 기억하기 어려울 수 있으므로 터미널을 하나 더 띄워서 다음 명령을 입력합니다.
$ nano .asoundrc
마이크는 card 1, device 0에 연결된 것 1개 밖에 없으므로 pcm.mic 부분은 "hw:1,0"로, 스피커는 오디오 잭이 card 0에 device 0, HDMI가 card 0에 device 1입니다. 저는 오디오 잭에 연결된 스피커를 사용하므로 pcm.speaker 부분에 "hw:0,0"으로 하였습니다. 여기서 모니터에 내장된 HDMI 스피커를 사용하실 분은 "hw:0,1"로 하시면 됩니다.
pcm.!default {
type asym
capture.pcm "mic"
playback.pcm "speaker"
}
pcm.mic {
type plug
slave {
pcm "hw:1,0"
}
}
pcm.speaker {
type plug
slave {
pcm "hw:0,0"
}
}
이제 설정이 완료되었으므로 테스트를 해보겠습니다. 먼저 스피커를 테스트하겠습니다.
$ speaker-test -t wav
위 명령을 실행하면 스피커에서 Front Left가 반복되어 재생됩니다. 소리가 작아서 잘 안들릴 수도 있으니 스피커와 라즈비안의 볼륨을 잘 조절해보시기 바랍니다.