라즈베리파이4 buster 기준
snowboy는 시리나 빅스비처럼 음성인식을 할 수 있게 도와주는 오픈소스 api 입니다
음성인식 자체를 만드는것 만으로 하나의 거대한 프로젝트이기 때문에
이렇게 만들어진 걸 가져다 쓰는데 사실 이것도 설치하기가 쉽지않음.. 전 무려 두달걸림
이글은 두달내내 붙잡다가 마지막날 성공했을 때 작성한 글입니다. 시험끝나고 한번 3B+에 해볼게요
라즈베리파이 오디오 출력에는 pulseaudio랑 ALSA가 있음
3B+은 기본이 PCM(ALSA) 인것같은데
4는 설치하면 기본설정이 pulseaudio로 되어있음
스노우보이는 pulseaudio만 됨. ALSA로도 해봤는데 안되는 걸 3B+에서 확인함 별로 안궁금했는데..
1. 마이크/스피커 설정하기
pi@raspberrypi: ~ $ amixer controls
Master 라고 나오면 pulseaudio
PCM 이라고 나오면 ALSA
만약 HDMI라고 나오면
pi@raspberrypi: ~ $ sudo raspi-config
sudo raspi-config 에서 advance-option 선택
audio 에서 hdmi 가 아니라 audiojack 3.5mm 으로 바꿔 스피커 출력을 바꿉니다
pi@raspberrypi: ~ $ amixer controls
pi@raspberrypi: ~ $ sudo reboot
pacmd list-sink
PCM에서 Master로 변경하는 방법은
pulseaudio 설치
pi@raspberrypi: ~ $ sudo apt-get install pulseaudio pulseaudio-utils
> 밑에 명령어는 안되면 패스
pi@raspberrypi: ~ $ gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosink pulsesink
pi@raspberrypi: ~ $ sudo modprobe snd_bcm2835
pi@raspberrypi: ~ $ sudo reboot
Master에서 PCM으로 변경하는 방법은
pi@raspberrypi: ~ $ sudo apt-get purge --yes pulseaudio
pi@raspberrypi: ~ $ sudo reboot
pulseaudio에서는 default output device 를 설정해야 음성출력이 가능하다.
현재 잡혀있는 장치 검색
pi@raspberrypi: ~ $ pacmd list-sink
index 0 은 HDIMI, index 1 은 headphone
pi@raspberrypi: ~ $ pacmd set-default-sink 1
그리고 audio device setting에서 default는 항상 마이크로 설정하고
디바이스 추가하기!!! 그래야댐
근데 audio device setting이 없는 경우가 있는데 이런경우에는
pi@raspberrypi: ~ $ alsamixer
에서 직접 오디오출력 설정해줘야함
pi@raspberrypi: ~ $ arecord -l
pi@raspberrypi: ~ $ aplay -l
pi@raspberrypi: ~ $ vi ~/.asoundrc
2. 라이브러리 설치
snowboy 를 실행하기 위해선 필요한 라이브러리가 있는데
- SoX (audio conversion 오디오 변환)
- PortAutio 나 Pyaudio (audio capturing 오디오 녹음 )
- ATLAS 나 OpenBLAS (matrix computation 연산)
- swig
pi@raspberrypi: ~ $ sudo apt-get install python-pip python-setuptools
pi@raspberrypi: ~ $ sudo apt-get install python-pyaudio python3-pyaudio libatlas-base-dev
pi@raspberrypi: ~ $ sudo apt-get install portaudio19-dev
pi@raspberrypi: ~ $ sudo apt-get install python-devpip install pyaudio
pi@raspberrypi: ~ $ pip3 install pyaudio
2. sox 설치
절대 sudo apt-get sox 하지 말것
sudo apt-get sox 을 하면 가장 최신 버전인 14.4.2 가 설치되는데
14.4.2 가 rec test.wav명령어를 실행시키면 default 뭐시기 에러를 토해내면서 스노우보이 자체가 실행이 안되기 때문에
직접 14.4.1 을 다운받아 압축을 풀어야한다
pi@raspberrypi: ~ $ wget https://sourceforge.net/projects/sox/files/sox/14.4.1/sox-14.4.1.tar.gz
압축풀기
pi@raspberrypi: ~ $ tar xzvf sox-14.4.1.tar.gz
빌드
pi@raspberrypi: ~ $ cd sox-14.4.1
pi@raspberrypi: ~ $ ./configure
pi@raspberrypi: ~ $ make -s
pi@raspberrypi: ~ $ sudo make install
> If it installed correctly, the SoX version number and a help file will be output.
올바르게 설치됐다면 버전과 help가 출력됨
pi@raspberrypi: ~ $ sox -h
pi@raspberrypi: ~ $ sudo make install
pi@raspberrypi: ~ $ sudo ldconfig
rec 명령어로 녹음 잘되는지 확인하기
rec test.wav
2. swig 설치
pi@raspberrypi: ~ $ sudo apt-get install git autoconf automake gcc bison libpcre3
pi@raspberrypi: ~ $ sudo apt-get install byacc
swig가 있으면 안되니까 있던 swig 삭제
pi@raspberrypi: ~ $ sudo apt-get remove swig
다운로드
pi@raspberrypi: ~ $ git clone https://github.com/swig/swig.git
2-1. pcre 설치
swig 다운로드 받고 ./configure 하면 가끔 pcre가 없다고 에러가 뜨는 경우가 있음
no pcre 옵션을 넣어서 configure 명령을 실행하면 되지만 스노우보이는 예민해서(...) 하나라도 수틀리면 실행안됨 해달라는대로 순순히 해주는게 오조오억배는 편함
pcre을 다운로드해서 압축을 풀고 tar 상태로 만든 다음
swig 폴더로 이동시킨 후 빌드를 한다.
에러가 안나는 경우도 있는데 에러가 나는 경우도 있음 그니까 그냥 설치하자
최신버전이 있지만 8.42 로 하겠음..
다운로드
pi@raspberrypi: ~ $ wget http://downloads.sourceforge.net/project/pcre/pcre/8.42/pcre-8.42.tar.bz2
압축해제
pi@raspberrypi: ~ $ bzip2 -d pcre-8.42.tar.bz2
swig 폴더로 압축해제한 파일 이동
mv pcre-8.42.tar ~/swig
swig 폴더로 이동
cd ~/swig
pcre 빌드
./Tools/pcre-build.sh
swig 빌드하기
./autogen.sh
./configure
make -j4 하는 경우 에러가 발생하는 경우가 있다하여 make로 하는것도 좋음 그냥 make ㄱ
make -j4 | make
install
sudo make install
sudo ldconfig
swig -version
버전 출력된다 이러면
3. snowboy 설치
git clone https://github.com/kitt-ai/snowboy
cd snowboy/example/Python3
python3 demo.py /resource/models/snowboy.umdl
실행 시
Traceback (most recent call last):
File "demo.py", line 1, in <module>
import snowboydecoder
File "/home/pi/snowboy/examples/Python3/snowboydecoder.py", line 5, in <module>
from . import snowboydetect
ImportError: attempted relative import with no known parent package
뜨면 snowboydecorder.py 수정
sudo vi snowboydecoder.py
#from . import snowboydetect
import snowboydetect # 추가