본문 바로가기
라즈베리파이

라즈베리파이 : Snowboy를 이용한 음성인식 전용 마이크 만들기

by YJHTPII 2022. 5. 22.
반응형

https://m.blog.naver.com/cosmosjs/221328328264

 

라즈베리파이 : Snowboy를 이용한 음성인식 전용 마이크 만들기(1)

※안내 : 혹시 구글 어시스턴트 때문이라면 이 내용은 필요가 없음. 꼭 이렇게 까지 해야 하나? 지금 만들...

blog.naver.com

 

 

 

※안내 : 혹시 구글 어시스턴트 때문이라면 이 내용은 필요가 없음.

꼭 이렇게 까지 해야 하나?

지금 만들것은 라즈베리파이1을 활용한 구글 어시스턴트 전용 음성인식 마이크이다. 지금 한국어를 사용하기 위해서는 구글 어시스턴트 SDK에서 gRPC 버전(?)으로 제공되는 것을 이용해야 한다. Google assistant library 에서 한국어를 지원해 주면 Hotword를 사용한 인공지능 스피커를 만들 수 있지만 언제 한국어 지원을 할지 알 수 없다. 그래서 방법을 찾다가 만들어 보는 예제이다. 실용적이지 않지만 그래도 배우는 부분이 있을 것으로 생각되어 진다.

라즈베리파이1에 snowboy를 설치하고 음성인식이 되면 UDP로 패킷을 보내서 구글 어시스턴트를 작동 시켜 대화를 가능하게 할려는 것이다, 왜 이렇게 하려는 거지? 다 한국어 구글 어시스턴트를 사용하려는 이유 때문이다. 빨리 공식적으로 한국어 지원하도록 해 줬으면 좋겠다.

 
 

성능이 떨어져서 제대로 될지 모르겠지만 일단 라즈비안을 설치하고 기본적인 설정을 하도록 하자.

raspi-config를 마치고 나면 먼저 할것은 무선랜을 설정하는 것이다. 라즈베리파이1은 무선랜을 내장하고 있지 않기 때문에 별도의 USB 무선랜을 사용해야 한다. 예전에 구입했었던 ipTime 무선랜을 설치하자. 자동으로 인식되기 때문에 SSID 설정만 해주면 된다.

무선랜 기기에 IP를 할당 받았다.

오디오 장치들을 검색해 보자. 마이크가 없다. 그래서 알리에 주문했다. 이런.....

R3에 있는 마이크를 빌려다가 테스트 하자. ㅎㅎ

speaker-test -t wav

arecord -D plughw:1,0 -c 1 -f S16_LE -r 44100 test.wav

aplay test.wav

>arecord -D hw:1,0 -d 5 -f cd test.wav -c 1

> aplay test.wav

> amixer

 

오디오 작동을 테스트 한다.

이상 없다면 Snowboy를 설치하자. 그전에 가상환경을 만들어 파이썬3으로 작동하도록 하자.

sudo apt-get update

sudo apt-get install python3-dev python3-venv

python3 -m venv env

env/bin/python -m pip install --upgrade pip setuptools

source env/bin/activate

sudo apt-get install python-pyaudio python3-pyaudio sox

pip install pyaudio

그러나 pyaudio 설치시 뭔가 빨간색으로 잔뜩 에러를 토해 낸다.

sudo apt-get install portaudio19-dev

pip install --allow-unverified=pyaudio pyaudio

로 하니 일단 에러는 없는데 제대로 설치 된건가???

pyaudio 설치 과정이 정확하지 않다. 가상환경을 빠져나와서 인스톨해주고 다시 가상환경 들어가서 해주니 되는것 같기도 하고? 아뭏든 이유와 해결책이 정확하지 않다. 어쨌든 pyaudio를 정상 동작하도록 설치해 줘야 한다. ^^;

테스트 해보자.

rec temp.wav

녹음을 해보고 파일을 재생해 보니 제대로 작동한다. 문제 없이 된건가 보다. 일단 넘어 가자.

git clone https://github.com/Kitt-AI/snowboy.git

cd ~/snowboy/swig/Python3/

make

예제를 실행해 보자. 예제를 실행해 보니 일단 pyaudio 모듈을 찾지 못한다. 다시 되돌아 가서 재설치를 하고 다시 돌아 왔다. 그리고 또 에러가 날것이다.

nano snowboydecorder.py 를 열어서 from . import 라고 된 부분에서 from . 을 제거해 준다.

다시 실행해 보자.

python demo.py resources/models/snowboy.umdl

snowboy

일단 동작한다. 핫워드 모델은 이전에 만들어 놓은 것을 복사해서 사용하기로 했다.

음~ 개인적으로 핫워드 만들어 놓은 파일에 문제가 있는 모양이다. 비슷한 발음으로 시작되는 모든 단어에 반응한다. 흐~ 이문제는 나중에 체크해 보기로 하자. 일단 기본값 snowboy.umdl을 사용하기로 하자.

지금까지 작업으로 snowboy를 설치하고 핫워드를 인식하도록 하였다. 핫워드가 인지되면 UDP를 이용 팻킷을 구글 어시스턴트가 설치된 라즈베리파이3으로 보내면 된다. 앞서 작성한 글에서 NodeMCU가 해줬던 역활을 이번 R1에서 스노우보이가 대신하도록 하는 것이다.

def detectedCallback(): snowboydecoder.play_audio_file() print('Detection') #Create a UDP socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) R3_address = (('192.168.0.7', 4210)) msge = "Hey google" #UDP - send packet sock.connect((R3_address)) print('Send packet') sock.send(msge.encode(encoding='utf_8', errors='strict')) sock.close()

snowboy의 실행 파일을 위와 같이 수정하고 실행하자. 핫워드 음성이 인식되면 라즈베리파이3으로 패킷을 보낸다. 임무는 이게 전부다. 두개의 파이를 사용하기 때문에 오디오 리소스 문제가 해결 되었지만 파이를 두개나 동원해야 하다니... 효율적인 방법이 아니다.

실제로 동작하는지를 테스트 해봐야 하는데 USB 마이크가 하나뿐이라서... 주문한 제품이 도착하면 테스트를 마무리 하자.

반응형

댓글