Raspberry pi

AlexaPi - Bluetooth Speaker 연결하기 1

[혜안] 2018. 1. 13. 23:41
728x90

AlexaPi - Bluetooth Speaker 연결하기 1


이번에는 Raspberry pi에 설치된 Alexa pi를 bluetooth speaker에 연결하여 마치 Amazon Echo 처럼 동작하도록 만드는 단계이다.


그리고 Wakeup trigger 도 pocketsphinx 에서 snowboy로 변경해야 한다. 인식율은 확실히 snowboy가 좋다.


1. Alexa pi Bluetooth speaker 연결

간단하다. Alexa pi의 입출력을 bluetooth로 변경하면 된다.

bluetooth 입출력은 이전 포스팅에서 다루었고, 이를 alexa pi에 적용해주기만 하면 된다.

pulse audio를 통한 설정이었다. 아래 포스팅 참고..


2017/08/29 - [Raspberry pi] - 라즈베리파이 음성인식 - 블루투스 스피커 연결

2017/09/04 - [Raspberry pi] - 라즈베리파이 음성인식 - 블루투스 프로파일 변경


하지만, alexa pi 에서 설정만 바꾼다고 바로 적용되지는 않는다.

이유는, pulse audio를 통한 입출력은 권한이 제한되어 있기 때문이다.

즉,  pulse audio를 컨트롤 할 수 있는 사용자는 이를 실행한 계정인 pulse에 한정되어있기 때문에 alexa pi를 실행하는 alexapi 계정은 pulse audio를 통해 사운드 입출력을 할 수 없다.

해결방법은 pulse audio 설정을 systemwide 로 변경하는 것이다.


역시 깔끔하게 안내하주는 곳은 alexa pi github 이다.

https://github.com/alexa-pi/AlexaPi/wiki/Audio-setup-&-debugging


위 가이드에 따라 아래와 같이 설정하였다. (일부 다른 설정이 있으니 참고하시길...)

$ sudo apt install pavucontrol

$ sudo mkdir -p /var/lib/AlexaPi/.config/pulse

$ sudo cp /etc/pulse/client.conf /var/lib/AlexaPi/.config/pulse/

$ sudo vi var/lib/AlexaPi/.config/pulse/client.conf

autospawn=no

$ sudo adduser <username or pi> pulse-access

$ sudo adduser alexapi pulse-access


$ sudo vi /etc/systemd/system/pulseaudio.service

[Unit]

Description=PulseAudio Daemon


[Install]

WantedBy=multi-user.target


[Service]

Type=simple

PrivateTmp=true

ExecStart=/usr/bin/pulseaudio --system --realtime --disallow-exit --no-cpu-limit

$ sudo systemctl enable pulseaudio.service

$ sudo vi /etc/opt/AlexaPi/config.yaml

sound:

  # Name of your microphone device: "raspberrypi"

  # leave empty for default

  input_device: ""


  playback_handler: "vlc"


  # you can go here with alsa, pulse or others

  # keep blank for the best audio output selected by the underlying code

  output: "pulseaudio"

  # output device: "raspberrypi"

  # currently supports ALSA only

  output_device: ""



설정을 완료하고, pulseaudio를 시작하니 아래와 같은 오류가 다시 발생하였다.

a2dp-sink profile connect failed for F0:13:C3:63:1B:B7: Protocol not available


Solution 은 아래 내용을 참조.

How to get PulseAudio working with Bluetooth (all this should be done as root):

apt-get install --no-install-recommends pulseaudio pulseaudio-module-bluetooth


Create a systemd service for running pulseaudio as the pulse user. Save this file as /etc/systemd/system/pulseaudio.service and reload systemd with systemctl daemon-reload


Give the pulse user permission to use Bluetooth. Save this file to /etc/dbus-1/system.d/pulseaudio-bluetooth.conf


Paste the following lines to the end of /etc/pulse/system.pa:


### Automatically load driver modules for Bluetooth hardware

.ifexists module-bluetooth-policy.so

load-module module-bluetooth-policy

.endif


.ifexists module-bluetooth-discover.so

load-module module-bluetooth-discover

.endif

Start the systemd service. systemctl start pulseaudio.service

 

※ 만약 Bluetooth 연결이 HSP 모드로 바뀌지 않고 A2DP로만 연결되는 현상이 있다면, 라즈베리파이를 재시작하고 다시 시도해보면 된다.



2. Wake up trigger 변경하기

Alexa pi의 기본 wake up trigger는 pocketsphinx 이다.

pocketsphinx의 최초 wake up word는 alexa 로 되어있다.

그러나 alexa를 아무리 외쳐봐도 반응하지 않았다.

  pocketsphinx:

    enabled: false

    voice_confirm: true


    phrase: "alexa"

    threshold: 1e-10

위 설정에서 phrase를 원하는 단어로 바꾸어 주면 해당단어가 wake up word가 된다.

그리고 threshold 조정을 통해 인식율을 변경할 수 있다. 인식율 변경 범위는 1e-2 부터 1e-50까지..

1e-50이 가장 인식율이 높다. 대신 false alarm도 많아진다.

하지만 아무리 인식율을 변경해도 alexa로 설정되어 있는 이상, 절대로 반응하지 않는다.

며칠동안 좌절 후 최초 반응은 phrase를 "pi"로 바꾸었을 때이다.

바로 반응했다.. 그러나 pi를 외치지 않아도 계속 반응하기 시작했다. 심지어 사방 조용한데도 깨어난다. ㅜ.ㅜ


pocketsphinx 로는 해결방법을 찾지 못했다. 

수없이 phrase를 변경하고, threshold를 변경했지만, alexa가 안깨어나거나 계속 깨어나거나를 반복하기만 할 뿐이었다.


결국 wake up trigger를 변경했다.


snowboy 설치

아래는 snowboy 사이트이다. 궁금한 내용은 아래 사이트를 참고하시라.

https://snowboy.kitt.ai/


삽질 및 설치 과정은 아래와 같다.

sudo apt-get install swig3.0 libatlas-base-dev

sudo pip install git+https://github.com/Kitt-AI/snowboy.git


    running install

    running build

    Compiling snowboy...

    You need at least Swig 3.0.10 to run

    Your current version is SWIG Version 2.0.12

    /bin/sh: 1: exit: Illegal number: -1

    Makefile:13: recipe for target 'checkversion' failed

    make: *** [checkversion] Error 2

    creating build

    creating build/lib.linux-armv7l-2.7

    creating build/lib.linux-armv7l-2.7/snowboy

    error: can't copy 'swig/Python/_snowboydetect.so': doesn't exist or not a regular file

한 번에 될리가 없지...


Swig 3.0.10 이상을 설치해야 하지만, apt-get으로는 3.0.2가 최신이다.

swig 홈페이지에서 최신버전을 받아 설치한다.


wget www.swig.org/download.html

tar czf swig-3.0.12.tar.gz

cd swig-3.0.12

./configure

make

sudo make install


snowboy 설치 재시도

sudo pip install git+https://github.com/Kitt-AI/snowboy.git

Successfully installed snowboy-1.2.0b1


snowboy 설치는 완료되었다.


내용이 너무 길어지는 관계로 alexa pi에 snowboy 적용하는 방법은 다음 포스팅에...


728x90