Respeakerを試す
Simple Wiki Based Contents Management System
関心分野 >> Respeakerを試す

Respeakerを試す

ReSpeakerのLineear 4-Micを入手したので、いろいろ試していきたいと思います。

Respeakerのインストール

ハードウェア

Respeakerは、Raspberry Piに接続して使用します。
ここでは、Raspberry Pi 3B+が手元にありましたので、7インチディスプレイに接続してシステム構築を行います。
ここで使ったディスプレイの上部にRaSpeakerを設置し、RsaberryPi3も背面に設置しました。ディスプレイは、スタンド用の足がついていましたので自立するのですが、ディスプレイの周辺がガラスがむき出しでしたので自己融着テープで周囲を保護しています。
RaspberryPi3とRespeakerとの接続は、Respeakerに付属のFemele-Femele Stand-OffとScrewを取り付けて40pinのGPIOに接続しています。

ソフトウェア

RaspberryPi3のOSには、Raspbianを使用します。
当初は使用するRaspberryPi3は、Ubuntu18.04をインストールしていたのですが、Respeakerのドライバのインストールができませんでしたので、Raspbinをスクラッチからインストールしました。
Ubuntuでも動作させることが可能だとは思いますが、配布されているドライバでは、overlayモジュール、dtparamなどを使ったいましたので、そのままではインストールすることができません。
Raspbianは、簡素化のためにNOOBSを使います。アーカイブをダウンロードし、microSDカードへ展開すれば、あとはインストーラに任せてデスクトップをインストールします。
Raspbianのインストール終了後は、Respeakerのドライバのインストールです。上記の参考サイトの通りに実行すれば、ドライバのインストールが完了します。
  1. seeed-voicecardのインストール
  2. Sound Card(Respeaker)の状態を確認
  3. 録音、再生による動作確認
seeed-voicecardのインストール
まずは、既存のパッケージをすべてアップデートします。
$ sudo apt-get update
$ sudo apt-get upgrad
既存のパッケージのアップデート終了後、Githubに公開されているドライバをダウンロードして、インストールします。
$ git clone https://github.com/respeaker/seeed-voicecard.git
$ cd seeed-voicecard
$ sudo ./install.sh
インストール時にエラーが出なければ、再起動します。
$ sudo reboot
Sound Card(Respeaker)の状態を確認
再起動後、ターミナルを開いて以下のコマンドを実行します。
$ arecord -L
$ aplay -L
arecordコマンドでは、録音可能なデバイスの情報が表示され、aplayコマンドでは、出力可能なデバイスの情報が表示されます。
私の場合には、スピーカー内蔵のHDMIディスプレイを使っていましたので下のようになりました。
arecord(Respeakerインストール前):
pi@raspberrypi:~ $ arecord -L
null
    Discard all samples (playback) or generate zero samples (capture)
default
output
input
arecord(Respearkerインストール後:
pi@raspberrypi:~ $ arecord -L
null
    Discard all samples (playback) or generate zero samples (capture)
jack
    JACK Audio Connection Kit
pulse
    PulseAudio Sound Server
ac108
dmixer
ac101
default
output
input
usbstream:CARD=ALSA
    bcm2835 ALSA
    USB Stream Output
sysdefault:CARD=seeed8micvoicec
    seeed-8mic-voicecard, 
    Default Audio Device
dmix:CARD=seeed8micvoicec,DEV=0
    seeed-8mic-voicecard, 
    Direct sample mixing device
dsnoop:CARD=seeed8micvoicec,DEV=0
    seeed-8mic-voicecard, 
    Direct sample snooping device
hw:CARD=seeed8micvoicec,DEV=0
    seeed-8mic-voicecard, 
    Direct hardware device without any conversions
plughw:CARD=seeed8micvoicec,DEV=0
    seeed-8mic-voicecard, 
    Hardware device with all software conversions
usbstream:CARD=seeed8micvoicec
    seeed-8mic-voicecard
    USB Stream Output
aplay(Respeakerインストール前):
pi@raspberrypi:~ $ aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
default
output
input
sysdefault:CARD=ALSA
    bcm2835 ALSA, bcm2835 ALSA
    Default Audio Device
dmix:CARD=ALSA,DEV=0
    bcm2835 ALSA, bcm2835 ALSA
    Direct sample mixing device
dmix:CARD=ALSA,DEV=1
    bcm2835 ALSA, bcm2835 IEC958/HDMI
    Direct sample mixing device
dmix:CARD=ALSA,DEV=2
    bcm2835 ALSA, bcm2835 IEC958/HDMI1
    Direct sample mixing device
dsnoop:CARD=ALSA,DEV=0
    bcm2835 ALSA, bcm2835 ALSA
    Direct sample snooping device
dsnoop:CARD=ALSA,DEV=1
    bcm2835 ALSA, bcm2835 IEC958/HDMI
    Direct sample snooping device
dsnoop:CARD=ALSA,DEV=2
    bcm2835 ALSA, bcm2835 IEC958/HDMI1
    Direct sample snooping device
hw:CARD=ALSA,DEV=0
    bcm2835 ALSA, bcm2835 ALSA
    Direct hardware device without any conversions
hw:CARD=ALSA,DEV=1
    bcm2835 ALSA, bcm2835 IEC958/HDMI
    Direct hardware device without any conversions
hw:CARD=ALSA,DEV=2
    bcm2835 ALSA, bcm2835 IEC958/HDMI1
    Direct hardware device without any conversions
plughw:CARD=ALSA,DEV=0
    bcm2835 ALSA, bcm2835 ALSA
    Hardware device with all software conversions
plughw:CARD=ALSA,DEV=1
    bcm2835 ALSA, bcm2835 IEC958/HDMI
    Hardware device with all software conversions
plughw:CARD=ALSA,DEV=2
    bcm2835 ALSA, bcm2835 IEC958/HDMI1
    Hardware device with all software conversions
aplay(Respearkerインストール後:
pi@raspberrypi:~ $ aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
jack
    JACK Audio Connection Kit
pulse
    PulseAudio Sound Server
ac108
dmixer
ac101
default
output
input
sysdefault:CARD=ALSA
    bcm2835 ALSA, bcm2835 ALSA
    Default Audio Device
dmix:CARD=ALSA,DEV=0
    bcm2835 ALSA, bcm2835 ALSA
    Direct sample mixing device
dmix:CARD=ALSA,DEV=1
    bcm2835 ALSA, bcm2835 IEC958/HDMI
    Direct sample mixing device
dmix:CARD=ALSA,DEV=2
    bcm2835 ALSA, bcm2835 IEC958/HDMI1
    Direct sample mixing device
dsnoop:CARD=ALSA,DEV=0
    bcm2835 ALSA, bcm2835 ALSA
    Direct sample snooping device
dsnoop:CARD=ALSA,DEV=1
    bcm2835 ALSA, bcm2835 IEC958/HDMI
    Direct sample snooping device
dsnoop:CARD=ALSA,DEV=2
    bcm2835 ALSA, bcm2835 IEC958/HDMI1
    Direct sample snooping device
hw:CARD=ALSA,DEV=0
    bcm2835 ALSA, bcm2835 ALSA
    Direct hardware device without any conversions
hw:CARD=ALSA,DEV=1
    bcm2835 ALSA, bcm2835 IEC958/HDMI
    Direct hardware device without any conversions
hw:CARD=ALSA,DEV=2
    bcm2835 ALSA, bcm2835 IEC958/HDMI1
    Direct hardware device without any conversions
plughw:CARD=ALSA,DEV=0
    bcm2835 ALSA, bcm2835 ALSA
    Hardware device with all software conversions
plughw:CARD=ALSA,DEV=1
    bcm2835 ALSA, bcm2835 IEC958/HDMI
    Hardware device with all software conversions
plughw:CARD=ALSA,DEV=2
    bcm2835 ALSA, bcm2835 IEC958/HDMI1
    Hardware device with all software conversions
usbstream:CARD=ALSA
    bcm2835 ALSA
    USB Stream Output
sysdefault:CARD=seeed8micvoicec
    seeed-8mic-voicecard, 
    Default Audio Device
dmix:CARD=seeed8micvoicec,DEV=0
    seeed-8mic-voicecard, 
    Direct sample mixing device
dsnoop:CARD=seeed8micvoicec,DEV=0
    seeed-8mic-voicecard, 
    Direct sample snooping device
hw:CARD=seeed8micvoicec,DEV=0
    seeed-8mic-voicecard, 
    Direct hardware device without any conversions
plughw:CARD=seeed8micvoicec,DEV=0
    seeed-8mic-voicecard, 
    Hardware device with all software conversions
usbstream:CARD=seeed8micvoicec
    seeed-8mic-voicecard
    USB Stream Output
録音、再生による動作確認
最後にデバイスの動作確認をします。
音源の動作確認は、arecordとaplayで行います。まずは、音声の録音をarecordで行います。
$ arecord -Dac108 -f S32_LE -r 16000 -c 8 a.wav
この例では、ac108(Respeaker 4mic array)から8チャンネルの16KHzのwav形式の音声データを取り込みます。
次に、録音した音声データの再生です。
$ aplay -D ac101 a.wav
この例では、ac101と名付けられたデバイスに出力します。ac101は、Respeakerにあるジャック経由での出力になりますので、事前にスピーカーまたはイアホンを接続しておいてください。直前に録音した音声が聞こえれば、正常に動作しています。
また、録音した8チャンネルの音声波形を確認したい場合には、audacityを使うとGUIで確認することも、音声出力先の変更も簡単に行うことができます。

HDMIのオーディオ出力が使えない場合の対処

RespeakerをインストールするとHDMIのオーディオ出力が使えなくなる場合があります。これはraspi-configコマンドを使えば、オーディオ出力を切り替えることができますが、再起動すると元に戻ってしまう場合があります。
私が導入した環境では、RasPiの起動直後は、オーディオ出力がRasPi上のオーディオプラグになってしまいHDMIのオーディオ出力をデフォルトにすることができませんでした。
Web上でも色々対処方法が記載されていましたが、最終的には、/etc/profileに下のようにamixerコマンドを記載することで、所望の動作を実現することができました。
 /usr/bin/axmixwe cset numid=3 2

Voice Assistant SDKを導入

次に、導入したResperakerを用いて、スマートスピーカー(Alexa)を動かしてみます。Alexaは、AVS(Alaxa Voice Service)という開発環境がオープンソースで公開されています。
Step1: virtualenvの導入
まずは、システムに対する影響を少なくするために virtualenvを導入します。virtualenvは、ユーザ領域にライブラリの導入を行うことができるライブラリ群です。ターミナルを開き、下のコマンドを実行します。
 $ sudo apt install python-virtualenv  
 $ virtualenv --system-site-packages ~/env 
これで~/envにAVSの導入準備は完了です。以降の作業は下のコマンドを実行し、仮想環境を有効にします。
 $ source ~/env/bin/activate            
 (env) pi@raspberrypi:~ $
Step2: AVSのインストール
virtualenvの仮想環境の有効化に続き、AVS(Alexa Voice Service)のインストールを行います。AVSは、github.comに公開されていますので、gitコマンドでダウンロードしインストールします。
 (env) pi@raspberrypi:~ $ cd ~/
 (env) pi@raspberrypi:~ $ git clone https://github.com/respeaker/avs
 (env) pi@raspberrypi:~ $ cd avs
 (env) pi@raspberrypi:~ $ python setup.py install
次に、AVSの動作に必要なライブラリ群をaptコマンドでインストールします。
 (env) pi@raspberrypi:~ $ sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gir1.2-gstreamer-1.0 python-gi python-gst-1.0
 (env) pi@raspberrypi:~ $ sudo apt remove gstreamer1.0-omx gstreamer1.0-omx-rpi
上記のライブラリ群は、ネット環境が悪いと正常にインストールできない場合がありますので、その時には個々のライブラリを順次インストールすれば良いと思います。
Step3: Alexaボイスサービスへの認証
AVSのインストール終了後は、Alexaボイスサービスの認証情報を取得します。AVSを利用するには、Amazon Developper(https://developer.amazon.com/ja/)アカウントが必要になりますので、事前にアカウント登録が必要です。
Amazon Developerのアカウント登録は、https://smartio.life/smartspeaker/development/alexa/amazondeveloper/#02を参考にしていただければ良いと思います。
Amazon Developerのアカウント登録後に、下のコマンドを入力します。
 pi@raspberrypi:~ $ source ~/env/bin/activate
 (env) pi@raspberrypi:~ $ alexa-auth
上記のコマンドが正常に実行されるとブラウザが起動し、amazon alexabaidu dueroscustomの3つの選択が表示されますので、amazon alexaをクリックします。

その後、Amazon.comへのログイン画面が表示されますので、サインインを行ってください。

正常に認証されると、Succeed to login Amazon Alexa Voice Serviceと表示され、AVSへのアクセスに必要な情報が ~/.avs.json に保存されます。
Step4: Alexaボイスサービスの動作確認(キー入力による対話開始)
Alexaボイスサービスの認証語は、キー入力方式のボイスコマンドを使うことができます。下のように alexa-tapコマンドを起動します。
 pi@raspberrypi:~ $ source ~/env/bin/activate
 (env) pi@raspberrypi:~ $ alexa-tap
 INFO:avs.alexa:Refeshing access_token
 Press ENTER to talk
 ....
 ....
上記のようにPress ENTER to talkが表示されたら、Enterキーを押下して何か話しかけてください。正常にインストールされていれば、Alexaの返答が帰ってくると思います。ただし、このコマンドではスキルが使用できませんので、日付や時刻などを問い合わせるくらいしかできないと思います。
独自の対話製品の登録に関しては、別のページで説明していきたいと思います。
Step5: Snowboy(Hotword Detection) の導入
alex-tapでAlexaボイスサービスの動作確認ができたら、Snowboy というHotword Detection機能をインストールします。Snowboyは、Hotwordを検出することに特化した音声認識ツールです。デフォルトでは、「Snowboy」というワードを認識しますが、オフィシャルサイトにアクセスすることで任意のHotwordを使えるようになります。
Snowboyをインストール知るために、下のように4mics_hatとvoice-engineをダウンロードし、インストールします。
 $ cd ~
 $ git clone https://github.com/respeaker/4mics_hat.git
 $ source ~/env/bin/activate
 (env) pi@raspberrypi:~ $ cd ~/4mics_hat
 (env) pi@raspberrypi:~/4mics_hat $ sudo apt install libatlas-base-dev 
 (env) pi@raspberrypi:~/4mics_hat $ sudo apt install python-pyaudio 
 (env) pi@raspberrypi:~/4mics_hat $ pip install ./snowboy*.whl 
 (env) pi@raspberrypi:~/4mics_hat $ pip install ./webrtc*.whl 
 (env) pi@raspberrypi:~/4mics_hat $ cd ~/
 (env) pi@raspberrypi:~ $ git clone https://github.com/voice-engine/voice-engine
 (env) pi@raspberrypi:~ $ cd voice-engine/
 (env) pi@raspberrypi:~/voice-engine $ python setup.py install
これでSnowboyのインストールは終了です。次に、動作確認を行います。
Step6 : Voice Assistantのテスト
Hotwordによるボイスアシスタントのテストを行います。snowboyをHotwordとしたボイスアシスタントの起動プログラムのサンプルは、~/voice-engine/examplesの中にあります。
下のように、kws_alexa_for_4mic_linerar_pihat.pyを実行してください。
 $ source ~/env/bin/activate 
 $ cd ~/voice-engine/examples
 $ python kws_alexa_for_4mic_liner_pihat.py
正常に起動したら「Snowboy」と発話して、ボイスアシスタントが動作することを確認してください。
以上でHotwordのボイスアシスタントの動作確認は終了です。
次は、ボイスアシスタントを独自の製品に割り当て、スキルを使えるようにしていきます。