RaspberryPi3でReSpeaker 4-Mic Array for Raspberry Pi を使用してみる
Seeedさんの商品であるReSpeaker 4-Mic Array for Raspberry Pi をRaspberryPi3に接続してスマートスピーカーっぽいことをやってみようと思います。
公式のページは
www.seeedstudio.com
となります。導入方法はかなりしっかりしているので、ちょっとしたユーザであればわかるレベルかなと思います。
導入方法のページに関してはこちら
ReSpeaker 4-Mic Array for Raspberry Pi - Seeed Wiki
となります。以下ではその手順にのっとって設定を進めていこうと思います。
Install driver
まずはハードウエアを認識させるために【ドライバーのインストール】行います。
1. Please Make sure running the lastest Raspbian Operating System(debian 9) on Pi. (updated at 2017.09.15)
最初のステップとしては最新のRaspbianのインストールを進められます。自分の持っていた2017-09-07-raspbian-stretch.imgのイメージファイルで
Raspbianをインストールしました。少しだけ古いのでたぶん何らかのバグが含まれているのでしょう…大きな相違がないと思いますので(超危険な発想)このまま作業を進めていこうと思います。
ちなみにバージョンを確認すると以下の様になっていました。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.1 ( stretch )
Release: 9.1
Codename: stretch
2. Get the seeed voice card source code.
2番目のステップとしてはseeed voice card
のソースコード の入手になります。
wiki の情報を元に作業をすれば問題ありません。
Github からソースを取得します。サイトには2mic用のドライバもあるようです。
github.com
$ git clone https://github.com/respeaker/seeed-voicecard.git
Cloning into ' seeed-voicecard ' ...
remote: Counting objects: 258 , done.
remote: Total 258 ( delta 0 ) , reused 0 ( delta 0 ) , pack-reused 258
Receiving objects: 100 % ( 258 / 258 ) , 165.38 KiB | 0 bytes/s, done.
Resolving deltas: 100 % ( 144 / 144 ) , done.
Cloneが終わったら、ディレクト リに移動して
$ cd seeed-voicecard/
インストーラ ーを起動します。オプションスイッチに4micの追加をお忘れなく。
$ sudo ./install.sh 4mic
ヒット:1 http://archive.raspberrypi.org/debian stretch InRelease
取得:2 http://mirrordirector.raspbian.org/raspbian stretch InRelease [ 15.0 kB]
取得:3 http://mirrordirector.raspbian.org/raspbian stretch/main armhf Packages [ 11.7 MB]
11.7 MB を 24 秒 で取得しました ( 479 kB/s )
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードできるパッケージが 123 個あります。表示するには ' apt list --upgradable ' を実行してください。
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
raspberrypi-kernel-headers
以下のパッケージはアップグレードされます:
raspberrypi-kernel
アップグレード: 1 個、新規インストール: 1 個、削除: 0 個、保留: 122 個。
47.1 MB のアーカイブを取得する必要があります。
この操作後に追加で 99.4 MB のディスク容量が消費されます。
取得:1 http://archive.raspberrypi.org/debian stretch/main armhf raspberrypi-kernel armhf 1.20171029-1 [ 31.7 MB]
取得:2 http://archive.raspberrypi.org/debian stretch/main armhf raspberrypi-kernel-headers armhf 1.20171029-1 [ 15.3 MB]
47.1 MB を 1 分 16 秒 で取得しました ( 614 kB/s )
apt-listchanges: changelog を読んでいます...
( データベースを読み込んでいます ... 現在 125965 個のファイルとディレクトリがインストールされています。 )
.../raspberrypi-kernel_1.20171029-1_armhf.deb を展開する準備をしています ...
' rpikernelhack による /boot/bcm2708-rpi-0-w.dtb から /usr/share/rpikernelhack/bcm2708-rpi-0-w.dtb への退避 (divert) ' を追加しています
…
(中略)
…
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 4.9.59-v7+ /boot/kernel7.img
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
提案パッケージ:
python3-apport menu
以下のパッケージが新たにインストールされます:
dkms
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 122 個。
74.8 kB のアーカイブを取得する必要があります。
この操作後に追加で 289 kB のディスク容量が消費されます。
取得:1 http://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian stretch/main armhf dkms all 2.3-2 [ 74.8 kB]
74.8 kB を 1 秒 で取得しました ( 69.5 kB/s )
以前に未選択のパッケージ dkms を選択しています。
( データベースを読み込んでいます ... 現在 156774 個のファイルとディレクトリがインストールされています。 )
.../archives/dkms_2.3-2_all.deb を展開する準備をしています ...
dkms ( 2.3 -2 ) を展開しています...
dkms ( 2.3 -2 ) を設定しています ...
man-db ( 2.7.6.1 -2 ) のトリガを処理しています ...
Creating symlink /var/lib/dkms/seeed-voicecard/0.2/source ->
/usr/src/seeed-voicecard-0.2
DKMS: add completed.
Kernel preparation unnecessary for this kernel. Skipping...
Building module:
cleaning build area....
make -j4 KERNELRELEASE =4.9.59+ -C /lib/modules/4.9.59+/build M =/var/lib/dkms/seeed-voicecard/0.2/build......
cleaning build area....
DKMS: build completed.
Kernel preparation unnecessary for this kernel. Skipping...
Building module:
cleaning build area....
make -j4 KERNELRELEASE =4.9.59-v7+ -C /lib/modules/4.9.59-v7+/build M =/var/lib/dkms/seeed-voicecard/0.2/build......
cleaning build area....
DKMS: build completed.
snd-soc-wm8960:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.9.59+/kernel/sound/soc/codecs/
snd-soc-ac108.ko:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.9.59+/kernel/sound/soc/codecs/
depmod...
DKMS: install completed.
snd-soc-wm8960:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.9.59-v7+/kernel/sound/soc/codecs/
snd-soc-ac108.ko:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.9.59-v7+/kernel/sound/soc/codecs/
depmod...
DKMS: install completed.
cp ac108_asound.state /var/lib/alsa/asound.state
------------------------------------------------------
Please reboot your raspberry pi to apply all settings
Enjoy!
------------------------------------------------------
上記 のように表示されれば成功です。ac108はこのスピーカーユニットの裏面のハードウエアに乗っているチップの様です。
リブートする必要があるので再起動を行います。
$ sudo reboot
これでユニットの認識ができるようになったはずです。
3. Then select the headphone jack on Raspberry Pi for audio output:
3番目のステップはいよいよこのユニットからの音声を確認することになりますが、その前にRaspberryPiの音声出力設定を確認します。
raspi-config
を起動し、Audioの設定を行っていきます。
$ sudo raspi-config
起動すると…以下のような画面になるので
その中から【7.Advance Options】を選択し
画面遷移後【A4. Audio】を選択し
画面遷移後【1. Force 3.5mm (’headphone’)jack】を選択した後
画面下部の【了解】を選択します。(これで選択が完了しました。)
すると画面がメインメニューに戻りますので【Finish】を選択します。
これで設定完了です。作業的には音声の出力を強制的にイヤホンジャックに設定しました。raspi-config
が終了すると以下のように表示されていました。
$ sudo raspi-config
numid =3,iface =MIXER,name =' PCM Playback Route '
; type= INTEGER,access =rw------,values =1,min =0,max =2,step =0
values =1
たぶんOKなはずなんですけど…
4. Check that the sound card name looks like this:
次のステップではサウンドカードがちゃんと認識されているかの確認になります。基本はalsa
のコマンドでの作業になります。
alsa
のarecord
コマンドを使って録音デバイス の一覧を取得します。
$ arecord -L
null
Discard all samples ( playback ) or generate zero samples ( capture )
default
playback
dmixed
ac108
sysdefault:CARD =seeed4micvoicec
seeed-4mic-voicecard,
Default Audio Device
dmix:CARD =seeed4micvoicec,DEV =0
seeed-4mic-voicecard,
Direct sample mixing device
dsnoop:CARD =seeed4micvoicec,DEV =0
seeed-4mic-voicecard,
Direct sample snooping device
hw:CARD =seeed4micvoicec,DEV =0
seeed-4mic-voicecard,
Direct hardware device without any conversions
plughw:CARD =seeed4micvoicec,DEV =0
seeed-4mic-voicecard,
Hardware device with all software conversions
コマンドの出力にseeed4micとかac108が入っていれば認識されていると思っていいかなと思います。
Wiki ではそのあと以下のように記載されています。
If we want to change the alsa settings, we can use sudo alsactl --file=ac108_asound.state store
to save it. And when we need to use the settings again, copy it to: sudo cp ~/seeed-voicecard/ac108_asound.state /var/lib/alsa/asound.state
もし、alsa の設定を変更したいのであればalsactl
で状態を保存しておき、元に戻す場合には保存しておいた設定を/var/lib/alsa/asound.state
に上書きしてねって書いてあります。とりあえず、保存だけでもしておいた方が無難かなと思います。
$ sudo alsactl --file=ac108_asound.state store
5. Open Audacity and select AC108 & 4 channels as input and bcm2835 alsa : - (hw:0:0) as output to test:
ここまできてやっと音声の入出力の確認となります。このステップではX上のAudacity
を使用しての確認をしています。
Xが使えない場合には、この後のAlsa を使用した確認になります。波形が出るのでできればAudacity
を使用したほうがいいかなと思いますが、好き好きといったところかなと思います。
まずはAudacity
をインストールします。
$ sudo apt-get update
$ sudo apt-get install audacity
インストールが終わったら、Audacity
をX上のコンソールから起動します。
$ audacity &
こんな感じでコンソールを開いて…
起動すると
初回起動らしいダイアログが表示されます。Welcomeダイアログを閉じてメインの画面を表示させます。
画面中ほどにある、録音デバイス 、録音チャンネル数、再生デバイス のプルダウンを以下の様に設定していきます。
まずはマイクのアイコンがついている横にあるプルダウンで録音デバイス を選択します。【ac108】を選択します。
【seeed-4mic-voicecard】でもよさそうなんですが…Wiki に従います。
続いてはマイクのチャンネルになります。ここでは4micのユニットですので【4】を設定します。【2】を選択しても録音対象にならないだけなのでエラーなどは発生しません。
次はその隣にあるスピーカーのアイコンの隣のプルダウンから【bcm2835:ALSA -(hw:0,0)】を選択します。
これでAudacity
の入出力設定は完了です。
【拡大図】
では録音してみましょう。
メニューから【録音ボタン(アイコン)】をクリックしてみると以下の画像ような波形が4ch分表示されます。いったん録音を停止して、【再生ボタン(アイコン)】を押せば録音された音声が再生されます。
無事に認識できたようです。
6. Or we could record with arecord and play with aplay:
こちらのステップではalsa のコマンドを使ったCLI での確認でのになります。正直上でOKであれば、不要かなと思った自分がいたのですがとりあえずやってみました。
まずは録音になります。arecord
コマンドで録音デバイス の指定、録音音声ファイルの形式の設定、チャンネルの設定を引数として渡します。
今回はデバイス はac108
、音声ファイルのフォーマットはSigned 32bit、16kHz、チャンネル数4として、hello.wav
に出力しています。
$ arecord -Dac108 -f S32_LE -r 16000 -c 4 hello.wav
録音中 WAVE ' hello.wav ' : Signed 32 bit Little Endian, レート 16000 Hz, チャネル数 4
^Cシグナル 割り込み で中断...
終了は特にないのでCtrl+Cで終了します。
ファイルは生成されていたので、あとは音声再生を確認をします。
aplay
で再生を行うのですが…
$ aplay hello.wav
再生中 WAVE ' hello.wav ' : Signed 32 bit Little Endian, レート 16000 Hz, チャネル数 4
^Cシグナル 割り込み で中断...
aplay: pcm_write:2011 : 書込エラー: システムコール割り込み
エラーは出ないのですが、音声の再生は行われません。(ここはWiki の情報とは異なっているようです)
念のため、録音した音声ファイルをAudacity
に読み込ませてみると…
波形もありますし、音声の再生も行われています。
そこで、aplay
で再生デバイス の指定を直接行ってみました。ヘッドホンジャックはplughw:0,0
なので-Dスイッチでしていしました。
このようにして再生がうまくいきました。
$ aplay -D plughw:0 ,0 hello.wav
再生中 WAVE ' hello.wav ' : Signed 32 bit Little Endian, レート 16000 Hz, チャネル数 4
ここで、音声デバイス としての認識は完了します。
このデバイス は4chのマイクデバイス として扱われalsa からも容易にコントロール ができます。
また、再生デバイス はもっていないので、それは別途出力を行う必要があるようです。今回はヘッドホンジャックが出力対象となっています。
つづいてはユニットに装備されたLEDの設定になります。
Play with APA102 LEDs
LEDはAPA102というものでAdafruit DotStar LED StripというLEDテープと同じもののようです。
SPIで制御するLEDということのようなのでSPIの設定、SPIのPython モジュールのインストールが事前に必要になります。
1. Activate SPI:
まずはSPIを有効化します。既に有効にしてる人はスキップです。
raspi-config
で設定を行っていきます。
$ sudo raspi-config
メインメニューが表示されたら【5 Interfacing Options】を選択します。
次のメニューが表示されたら【P4 SPI】を選択し、
SPIを有効にするか尋ねられるので【<はい>】を選択します。
SPIを有効にした旨のメッセージが表示されますので【<了解>】を押します。
その後メインメニューに戻りますので【】を押してraspi-config
を終了させます
これでSPIの有効化は終了です。
2. Get APA102 LEDs Library and examples
次はAPA102のLEDはLibraryをインストールし、サンプルを実行します。
Github からLibraryをCloneします。
github.com
$ cd ~
$ git clone https://github.com/respeaker/4mics_hat.git
Cloning into ' 4mics_hat ' ...
remote: Counting objects: 31 , done.
remote: Total 31 ( delta 0 ) , reused 0 ( delta 0 ) , pack-reused 31
Unpacking objects: 100 % ( 31 / 31 ) , done.
~ $ cd 4mics_hat/
次は必須ではありませんが、python-virtualenv
をインストールします。あまり馴染みはないのですがいつかはやろうと思っています>virtualenv
~/4mics_hat $ sudo apt-get install python-virtualenv
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
python3-virtualenv virtualenv
以下のパッケージが新たにインストールされます:
python-virtualenv python3-virtualenv virtualenv
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 122 個。
138 kB のアーカイブを取得する必要があります。
この操作後に追加で 316 kB のディスク容量が消費されます。
続行しますか? [ Y/n] y
取得:1 http://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian stretch/main armhf python-virtualenv all 15.1.0+ds-1 [ 61.1 kB]
取得:2 http://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian stretch/main armhf python3-virtualenv all 15.1.0+ds-1 [ 57.7 kB]
取得:3 http://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian stretch/main armhf virtualenv all 15.1.0+ds-1 [ 19.7 kB]
138 kB を 3 秒 で取得しました ( 46.0 kB/s )
以前に未選択のパッケージ python-virtualenv を選択しています。
( データベースを読み込んでいます ... 現在 158445 個のファイルとディレクトリがインストールされ ています。 )
.../python-virtualenv_15.1.0+ds-1_all.deb を展開する準備をしています ...
python-virtualenv ( 15.1.0+ds -1 ) を展開しています...
以前に未選択のパッケージ python3-virtualenv を選択しています。
.../python3-virtualenv_15.1.0+ds-1_all.deb を展開する準備をしています ...
python3-virtualenv ( 15.1.0+ds -1 ) を展開しています...
以前に未選択のパッケージ virtualenv を選択しています。
.../virtualenv_15.1.0+ds-1_all.deb を展開する準備をしています ...
virtualenv ( 15.1.0+ds -1 ) を展開しています...
python3-virtualenv ( 15.1.0+ds -1 ) を設定しています ...
python-virtualenv ( 15.1.0+ds -1 ) を設定しています ...
man-db ( 2.7.6.1 -2 ) のトリガを処理しています ...
virtualenv ( 15.1.0+ds -1 ) を設定しています ...
インストールが終わればあとはvirtualenv
を有効化します。このあたりはそういうもんだと思うことにしましたw。有効化するとCLI の先頭の部分に(env)
などとついて有効になっている仮想環境を教えてくれます。
~/4mics_hat $ virtualenv --system-site-packages ~/env
Running virtualenv with interpreter /usr/bin/python2
New python executable in /home/pi/env/bin/python2
Also creating executable in /home/pi/env/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
~/4mics_hat $ source ~/env/bin/activate
( env ) ~/4mics_hat $
正直自分のようなニワカには不要かもしれません…
後は必要なパッケージをインストールしていきます。
先程のGithub のサイトをみると以下が必要となるようです。
spidev
google -assistant-library
gpiozero
今回のサンプルではgoogle-assistant-library
は使用しないので残りの2つをインストールします。
pip
でインストールをしていきます。
( env ) ~/4mics_hat $ pip install spidev gpiozero
Requirement already satisfied: spidev in /usr/lib/python2.7/dist-packages
Requirement already satisfied: gpiozero in /usr/lib/python2.7/dist-packages
( env ) ~/4mics_hat $
これLibraryのインストールが終わり、準備完了しました。
3. Then run the example code under virtualenv, now we can see the LEDs blink like Google Assistant.
では、サンプルを使ってLEDを点灯させてみます。
( env ) ~/4mics_hat $ python pixels_demo.py
プログラムを実行すると以下のようにLEDをが点灯します。これだけでちょっと満足できてしまう自分がいました。
VIDEO youtu.be
どうでしょうか。音声、LEDまでの設定ができました。後は音声の方向と言葉の認識の設定になります。
アレイスピーカーから音声が聞こえる方向を示す機能の設定になりますというか、サンプル?の実行となります。Direction of Arrial→DoA というようですがググってもArrial
という言葉の意味がでてこないんですが、どうしてなんでしょう?もしかしてスラング ?か造語?(Arrivalかなと思っているんですが…)
With DoA (Direction of Arrial), ReSpeaker 4-Mic Array is able to find the direction where the sound source is located.
では始めます。
1. setup voice engine
virtualenvを有効化している場合には以下の手順は不要です。
$ source ~/env/bin/activate
( env ) ~ $ cd ~/4mics_hat
続いて、libatlas-base-dev
をインストール、行列計算用のLibraryかな?
( env ) ~/4mics_hat $ sudo apt-get install libatlas-base-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
gfortran gfortran-6 libatlas-dev libatlas3-base libblas-dev libgfortran-6 -dev
提案パッケージ:
gfortran-doc gfortran-6 -doc libgfortran3-dbg libcoarrays-dev libblas-doc liblapack-doc
liblapack-dev liblapack-doc-man
以下のパッケージが新たにインストールされます:
gfortran gfortran-6 libatlas-base-dev libatlas-dev libatlas3-base libblas-dev
libgfortran-6 -dev
アップグレード: 0 個、新規インストール: 7 個、削除: 0 個、保留: 122 個。
10.2 MB のアーカイブを取得する必要があります。
この操作後に追加で 48.4 MB のディスク容量が消費されます。
続行しますか? [ Y/n] y
取得:1 http://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian stretch/main armhf libgfortran-6 -dev armhf 6.3.0-18 +rpi1 [ 199 kB]
…(中略)…
update-alternatives: /usr/lib/liblapack.so ( liblapack.so ) を提供するために自動モードで /usr/lib/atlas-base/atlas/liblapack.so を使います
続いてpython のオーディオ用Libraryのインストール
( env ) ~/4mics_hat $ sudo apt-get install python-pyaudio
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
提案パッケージ:
python-pyaudio-doc
以下のパッケージが新たにインストールされます:
python-pyaudio
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 122 個。
24.3 kB のアーカイブを取得する必要があります。
この操作後に追加で 99.3 kB のディスク容量が消費されます。
…(中略)…
python-pyaudio ( 0.2.11 -1 ) を設定しています ...
先程Github で取得したパッケージに含まれるWheelパッケージをインストールします。.whlはEggに変わる次世代の配布形式として作られたもののようです。
また、Snowboy(Snowboy Hotword Detection)はKITT.AI
が提供しているホットワードのモデルデータをRaspberry Pi などの環境で利用できるようにするライブラリで、
音が合っているかだけをローカルで判断するので軽快なレスポンスが得られるようです。
(ホットワードとは「OK Google 」に代表される呼び出しのキーワードになります。)
個人的使用であれば無償のようですね。
いよいよスマートスピーカーっぽくなってきました!
( env ) ~/4mics_hat $ pip install ./snowboy*.whl
Processing ./snowboy-1.2.0b1-py2-none-any.whl
Requirement already satisfied: PyAudio in /usr/lib/python2.7/dist-packages ( from snowboy == 1.2.0b1 )
Installing collected packages: snowboy
Successfully installed snowboy-1.2.0b1
お次はWebRTCに関係するパッケージのインストールとなります。ログをみるとaudio関係のWebRTCのパッケージの様です。
( env ) ~/4mics_hat $ pip install ./webrtc*.whl
Processing ./webrtc_audio_processing-0.0.1-cp27-cp27mu-linux_armv7l.whl
Installing collected packages: webrtc-audio-processing
Successfully installed webrtc-audio-processing-0.0.1
最後にvoice-engine
をGithub からCloneします。
Github のドキュメントをみると
The library is used to create voice interface applications. It includes building blocks such as KWS (keyword spotting), DOA (Direction Of Arrival).
ってことなので、ボイスインターフェース作成用のLibraryの様です。ここではDoA →Direction Of Arrivalってなっているので先程のはやっぱり誤記なんでしょうか?
github.com
( env ) ~/4mics_hat $ cd ~/
( env ) ~ $ git clone https://github.com/voice-engine/voice-engine.git
Cloning into ' voice-engine ' ...
remote: Counting objects: 156 , done.
remote: Total 156 ( delta 0 ) , reused 0 ( delta 0 ) , pack-reused 156
Receiving objects: 100 % ( 156 / 156 ) , 416.40 KiB | 756.00 KiB/s, done.
Resolving deltas: 100 % ( 88 / 88 ) , done.
( env ) ~ $ cd voice-engine/
( env ) ~/voice-engine $ python setup.py install
running install
running bdist_egg
running egg_info
creating voice_engine.egg-info
…(中略)…
Adding voice-engine 0.0.3 to easy-install.pth file
Installed /home/pi/env/lib/python2.7/site-packages/voice_engine-0.0.3-py2.7.egg
Processing dependencies for voice-engine == 0 .0.3
Finished processing dependencies for voice-engine == 0 .0.3
これで準備完了です。
2. Run the demo under virtualenv. Please wake up respeaker with saying snowboy
and we will see the direction.
準備ができたので実行してみます。先程のvirtualenv環境上で実行を行います。内容としてはユニットに対してsnowboy
と声をかけるとその方向のLEDが色が変わって点灯する動作になります。
( env ) ~/voice-engine $ cd ~/4mics_hat
( env ) ~/4mics_hat $ python kws_doa.py
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.front
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.surround40
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.surround41
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.surround50
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.surround51
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.surround71
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM cards.pcm.phoneline
ALSA lib confmisc.c:1281 :( snd_func_refer ) Unable to find definition ' defaults.bluealsa.device '
ALSA lib conf.c:4528 :( _snd_config_evaluate ) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:4996 :( snd_config_expand ) Args evaluate error: No such file or directory
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM bluealsa
ALSA lib confmisc.c:1281 :( snd_func_refer ) Unable to find definition ' defaults.bluealsa.device '
ALSA lib conf.c:4528 :( _snd_config_evaluate ) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:4996 :( snd_config_expand ) Args evaluate error: No such file or directory
ALSA lib pcm.c:2495 :( snd_pcm_open_noupdate ) Unknown PCM bluealsa
ALSA lib pcm_dmix.c:990 :( snd_pcm_dmix_open ) The dmix plugin supports only playback stream
ALSA lib pcm_dmix.c:990 :( snd_pcm_dmix_open ) The dmix plugin supports only playback stream
ALSA lib pcm_ac108.c:469 :( _snd_pcm_ac108_open ) a108 is only for capture
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1 , skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1 , skipping unlock
コンソール上にかなりのエラーっぽいメッセージが出てきますが、動作しているようです。初回はsnowboy
と声をかけるとOFFしていた
LEDが全部点灯し呼び掛けた方向のLEDが薄い青い色で点灯します。(その他は濃い青色で点灯しています)
【初回呼びかけ時の動画】
VIDEO youtu.be
【2回目以降呼びかけ時の動画】
VIDEO youtu.be
Play with Alexa, Baidu and Snowboy
Baiduは使用していないのでAlexaを使用していきます。
1. Get Alexa or Baidu authorization
virtualenvを有効化している場合には以下の手順は不要です。
~ $ source ~/env/bin/activate
Python Alexa Voice Service App
をインストールします。Alexa
になるためのパッケージということかな?
Github から取得したらsetup.py
を実行してインストールを行います。
( env ) ~ $ cd ~/
( env ) ~ $ git clone https://github.com/respeaker/avs.git
( env ) ~ $ cd avs
( env ) ~/avs $ python setup.py install
running install
running bdist_egg
running egg_info
creating avs.egg-info
writing requirements to avs.egg-info/requires.txt
writing avs.egg-info/PKG-INFO
writing top-level names to avs.egg-info/top_level.txt
writing dependency_links to avs.egg-info/dependency_links.txt
writing entry points to avs.egg-info/entry_points.txt
writing manifest file ' avs.egg-info/SOURCES.txt '
reading manifest file ' avs.egg-info/SOURCES.txt '
reading manifest template ' MANIFEST.in '
warning: no files found matching ' AUTHORS.rst '
warning: no previously-included files matching ' __pycache__ ' found under directory ' * '
warning: no previously-included files matching ' *.py[co] ' found under directory ' * '
warning: no files found matching ' *.rst ' under directory ' docs '
warning: no files found matching ' conf.py ' under directory ' docs '
warning: no files found matching ' Makefile ' under directory ' docs '
warning: no files found matching ' make.bat ' under directory ' docs '
warning: no files found matching ' *.jpg ' under directory ' docs '
warning: no files found matching ' *.png ' under directory ' docs '
warning: no files found matching ' *.gif ' under directory ' docs '
writing manifest file ' avs.egg-info/SOURCES.txt '
installing library code to build/bdist.linux-armv7l/egg
running install_lib
running build_py
creating build
creating build/lib.linux-armv7l-2.7
creating build/lib.linux-armv7l-2.7/avs
copying avs/auth.py -> build/lib.linux-armv7l-2.7/avs
copying avs/main.py -> build/lib.linux-armv7l-2.7/avs
copying avs/alexa.py -> build/lib.linux-armv7l-2.7/avs
copying avs/config.py -> build/lib.linux-armv7l-2.7/avs
copying avs/player.py -> build/lib.linux-armv7l-2.7/avs
copying avs/__init__.py -> build/lib.linux-armv7l-2.7/avs
copying avs/mic.py -> build/lib.linux-armv7l-2.7/avs
creating build/lib.linux-armv7l-2.7/avs/interface
copying avs/interface/__init__.py -> build/lib.linux-armv7l-2.7/avs/interface
copying avs/interface/alerts.py -> build/lib.linux-armv7l-2.7/avs/interface
copying avs/interface/audio_player.py -> build/lib.linux-armv7l-2.7/avs/interface
copying avs/interface/notifications.py -> build/lib.linux-armv7l-2.7/avs/interface
copying avs/interface/playback_controller.py -> build/lib.linux-armv7l-2.7/avs/interface
copying avs/interface/speaker.py -> build/lib.linux-armv7l-2.7/avs/interface
copying avs/interface/speech_recognizer.py -> build/lib.linux-armv7l-2.7/avs/interface
copying avs/interface/speech_synthesizer.py -> build/lib.linux-armv7l-2.7/avs/interface
copying avs/interface/system.py -> build/lib.linux-armv7l-2.7/avs/interface
creating build/lib.linux-armv7l-2.7/avs/resources
copying avs/resources/README.md -> build/lib.linux-armv7l-2.7/avs/resources
copying avs/resources/alarm.mp3 -> build/lib.linux-armv7l-2.7/avs/resources
creating build/bdist.linux-armv7l
creating build/bdist.linux-armv7l/egg
creating build/bdist.linux-armv7l/egg/avs
copying build/lib.linux-armv7l-2.7/avs/auth.py -> build/bdist.linux-armv7l/egg/avs
copying build/lib.linux-armv7l-2.7/avs/main.py -> build/bdist.linux-armv7l/egg/avs
copying build/lib.linux-armv7l-2.7/avs/alexa.py -> build/bdist.linux-armv7l/egg/avs
creating build/bdist.linux-armv7l/egg/avs/resources
copying build/lib.linux-armv7l-2.7/avs/resources/alarm.mp3 -> build/bdist.linux-armv7l/egg/avs/resources
copying build/lib.linux-armv7l-2.7/avs/resources/README.md -> build/bdist.linux-armv7l/egg/avs/resources
copying build/lib.linux-armv7l-2.7/avs/config.py -> build/bdist.linux-armv7l/egg/avs
copying build/lib.linux-armv7l-2.7/avs/player.py -> build/bdist.linux-armv7l/egg/avs
copying build/lib.linux-armv7l-2.7/avs/__init__.py -> build/bdist.linux-armv7l/egg/avs
creating build/bdist.linux-armv7l/egg/avs/interface
copying build/lib.linux-armv7l-2.7/avs/interface/audio_player.py -> build/bdist.linux-armv7l/egg/avs/interface
copying build/lib.linux-armv7l-2.7/avs/interface/alerts.py -> build/bdist.linux-armv7l/egg/avs/interface
copying build/lib.linux-armv7l-2.7/avs/interface/speech_synthesizer.py -> build/bdist.linux-armv7l/egg/avs/interface
copying build/lib.linux-armv7l-2.7/avs/interface/playback_controller.py -> build/bdist.linux-armv7l/egg/avs/interface
copying build/lib.linux-armv7l-2.7/avs/interface/speech_recognizer.py -> build/bdist.linux-armv7l/egg/avs/interface
copying build/lib.linux-armv7l-2.7/avs/interface/__init__.py -> build/bdist.linux-armv7l/egg/avs/interface
copying build/lib.linux-armv7l-2.7/avs/interface/notifications.py -> build/bdist.linux-armv7l/egg/avs/interface
copying build/lib.linux-armv7l-2.7/avs/interface/speaker.py -> build/bdist.linux-armv7l/egg/avs/interface
copying build/lib.linux-armv7l-2.7/avs/interface/system.py -> build/bdist.linux-armv7l/egg/avs/interface
copying build/lib.linux-armv7l-2.7/avs/mic.py -> build/bdist.linux-armv7l/egg/avs
byte-compiling build/bdist.linux-armv7l/egg/avs/auth.py to auth.pyc
byte-compiling build/bdist.linux-armv7l/egg/avs/main.py to main.pyc
byte-compiling build/bdist.linux-armv7l/egg/avs/alexa.py to alexa.pyc
byte-compiling build/bdist.linux-armv7l/egg/avs/config.py to config.pyc
byte-compiling build/bdist.linux-armv7l/egg/avs/player.py to player.pyc
byte-compiling build/bdist.linux-armv7l/egg/avs/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-armv7l/egg/avs/interface/audio_player.py to audio_player.pyc
byte-compiling build/bdist.linux-armv7l/egg/avs/interface/alerts.py to alerts.pyc
byte-compiling build/bdist.linux-armv7l/egg/avs/interface/speech_synthesizer.py to speech_synthesizer.pyc
byte-compiling build/bdist.linux-armv7l/egg/avs/interface/playback_controller.py to playback_controller.pyc
byte-compiling build/bdist.linux-armv7l/egg/avs/interface/speech_recognizer.py to speech_recognizer.pyc
byte-compiling build/bdist.linux-armv7l/egg/avs/interface/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-armv7l/egg/avs/interface/notifications.py to notifications.pyc
byte-compiling build/bdist.linux-armv7l/egg/avs/interface/speaker.py to speaker.pyc
byte-compiling build/bdist.linux-armv7l/egg/avs/interface/system.py to system.pyc
byte-compiling build/bdist.linux-armv7l/egg/avs/mic.py to mic.pyc
creating build/bdist.linux-armv7l/egg/EGG-INFO
copying avs.egg-info/PKG-INFO -> build/bdist.linux-armv7l/egg/EGG-INFO
copying avs.egg-info/SOURCES.txt -> build/bdist.linux-armv7l/egg/EGG-INFO
copying avs.egg-info/dependency_links.txt -> build/bdist.linux-armv7l/egg/EGG-INFO
copying avs.egg-info/entry_points.txt -> build/bdist.linux-armv7l/egg/EGG-INFO
copying avs.egg-info/not-zip-safe -> build/bdist.linux-armv7l/egg/EGG-INFO
copying avs.egg-info/requires.txt -> build/bdist.linux-armv7l/egg/EGG-INFO
copying avs.egg-info/top_level.txt -> build/bdist.linux-armv7l/egg/EGG-INFO
creating dist
creating ' dist/avs-0.0.9-py2.7.egg ' and adding ' build/bdist.linux-armv7l/egg ' to it
removing ' build/bdist.linux-armv7l/egg ' ( and everything under it )
Processing avs-0.0.9-py2.7.egg
creating /home/pi/env/lib/python2.7/site-packages/avs-0.0.9-py2.7.egg
Extracting avs-0.0.9-py2.7.egg to /home/pi/env/lib/python2.7/site-packages
Adding avs 0.0.9 to easy-install.pth file
Installing alexa-tap script to /home/pi/env/bin
Installing alexa-auth script to /home/pi/env/bin
Installing alexa script to /home/pi/env/bin
Installing dueros-auth script to /home/pi/env/bin
Installed /home/pi/env/lib/python2.7/site-packages/avs-0.0.9-py2.7.egg
Processing dependencies for avs == 0 .0.9
Searching for python-dateutil
Reading https://pypi.python.org/simple/python-dateutil/
Downloading https://pypi.python.org/packages/4b/0d/7ed381ab4fe80b8ebf34411d14f253e1cf3e56e2820ffa1d8844b23859a2/python_dateutil-2.6.1-py2.py3-none-any.whl
Best match: python-dateutil 2.6.1
Processing python_dateutil-2.6.1-py2.py3-none-any.whl
Installing python_dateutil-2.6.1-py2.py3-none-any.whl to /home/pi/env/lib/python2.7/site-packages
writing requirements to /home/pi/env/lib/python2.7/site-packages/python_dateutil-2.6.1-py2.7.egg/EGG-INFO/requires.txt
Adding python-dateutil 2.6.1 to easy-install.pth file
Installed /home/pi/env/lib/python2.7/site-packages/python_dateutil-2.6.1-py2.7.egg
Searching for tornado
Reading https://pypi.python.org/simple/tornado/
Downloading https://pypi.python.org/packages/fa/14 /52e2072197dd0e63589e875ebf5984c91a027121262aa08f71a49b958359/tornado-4.5.2.tar.gz
Best match: tornado 4.5.2
Processing tornado-4.5.2.tar.gz
Writing /tmp/easy_install-JDQgo_/tornado-4.5.2/setup.cfg
Running tornado-4.5.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-JDQgo_/tornado-4.5.2/egg-dist-tmp-7z7sqT
no previously-included directories found matching ' docs/build '
warning: no files found matching ' tornado/test/README '
zip_safe flag not set ; analyzing archive contents...
tornado.autoreload: module references __file__
tornado.options: module references __file__
tornado.testing: module references __file__
/home/pi/env/local /lib/python2.7/site-packages/setuptools/command /bdist_egg.py:419 : UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
symbols = dict .fromkeys( iter_symbols( code))
tornado.test.httpserver_test: module references __file__
tornado.test.iostream_test: module references __file__
tornado.test.locale_test: module references __file__
tornado.test.options_test: module references __file__
tornado.test.template_test: module references __file__
tornado.test.web_test: module references __file__
creating /home/pi/env/lib/python2.7/site-packages/tornado-4.5.2-py2.7-linux-armv7l.egg
Extracting tornado-4.5.2-py2.7-linux-armv7l.egg to /home/pi/env/lib/python2.7/site-packages
Adding tornado 4.5.2 to easy-install.pth file
Installed /home/pi/env/lib/python2.7/site-packages/tornado-4.5.2-py2.7-linux-armv7l.egg
Searching for hyper
Reading https://pypi.python.org/simple/hyper/
Downloading https://pypi.python.org/packages/96 /c3/e77072050a8d3a22255695d0cd7fde19bfe962364a6f6870ef47a9f9f66b/hyper-0.7.0-py2.py3-none-any.whl
Best match: hyper 0.7.0
Processing hyper-0.7.0-py2.py3-none-any.whl
Installing hyper-0.7.0-py2.py3-none-any.whl to /home/pi/env/lib/python2.7/site-packages
writing requirements to /home/pi/env/lib/python2.7/site-packages/hyper-0.7.0-py2.7.egg/EGG-INFO/requires.txt
Adding hyper 0.7.0 to easy-install.pth file
Installing hyper script to /home/pi/env/bin
Installed /home/pi/env/lib/python2.7/site-packages/hyper-0.7.0-py2.7.egg
Searching for backports_abc>= 0.4
Reading https://pypi.python.org/simple/backports_abc/
Downloading https://pypi.python.org/packages/7d/56 /6f3ac1b816d0cd8994e83d0c4e55bc64567532f7dc543378bd87f81cebc7/backports_abc-0.5-py2.py3-none-any.whl
Best match: backports-abc 0.5
Processing backports_abc-0.5-py2.py3-none-any.whl
Installing backports_abc-0.5-py2.py3-none-any.whl to /home/pi/env/lib/python2.7/site-packages
Adding backports-abc 0.5 to easy-install.pth file
Installed /home/pi/env/lib/python2.7/site-packages/backports_abc-0.5-py2.7.egg
Searching for certifi
Reading https://pypi.python.org/simple/certifi/
Downloading https://pypi.python.org/packages/29 /9b/25ef61e948321296f029f53c9f67cc2b54e224db509eb67ce17e0df6044a/certifi-2017.11.5-py2.py3-none-any.whl
Best match: certifi 2017.11.5
Processing certifi-2017.11.5-py2.py3-none-any.whl
Installing certifi-2017.11.5-py2.py3-none-any.whl to /home/pi/env/lib/python2.7/site-packages
Adding certifi 2017.11.5 to easy-install.pth file
Installed /home/pi/env/lib/python2.7/site-packages/certifi-2017.11.5-py2.7.egg
Searching for singledispatch
Reading https://pypi.python.org/simple/singledispatch/
Downloading https://pypi.python.org/packages/c5/10 /369f50bcd4621b263927b0a1519987a04383d4a98fb10438042ad410cf88/singledispatch-3.4.0.3-py2.py3-none-any.whl
Best match: singledispatch 3.4.0.3
Processing singledispatch-3.4.0.3-py2.py3-none-any.whl
Installing singledispatch-3.4.0.3-py2.py3-none-any.whl to /home/pi/env/lib/python2.7/site-packages
writing requirements to /home/pi/env/lib/python2.7/site-packages/singledispatch-3.4.0.3-py2.7.egg/EGG-INFO/requires.txt
Adding singledispatch 3.4.0.3 to easy-install.pth file
Installed /home/pi/env/lib/python2.7/site-packages/singledispatch-3.4.0.3-py2.7.egg
Searching for hyperframe< 4.0,>= 3.2
Reading https://pypi.python.org/simple/hyperframe/
Downloading https://pypi.python.org/packages/d8/89 /44ff46f15dba53a8c16cb8cab89ecb1e44f8aa211628b43d341004cfcf7a/hyperframe-3.2.0-py2.py3-none-any.whl
Best match: hyperframe 3.2.0
Processing hyperframe-3.2.0-py2.py3-none-any.whl
Installing hyperframe-3.2.0-py2.py3-none-any.whl to /home/pi/env/lib/python2.7/site-packages
Adding hyperframe 3.2.0 to easy-install.pth file
Installed /home/pi/env/lib/python2.7/site-packages/hyperframe-3.2.0-py2.7.egg
Searching for h2< 3.0,>= 2.4
Reading https://pypi.python.org/simple/h2/
Downloading https://pypi.python.org/packages/d7/8b/8d5610e8ddbcde6d014907526b4c6c294520a7233fc456d7be1fcade3bbc/h2-2.6.2-py2.py3-none-any.whl
Best match: h2 2.6.2
Processing h2-2.6.2-py2.py3-none-any.whl
Installing h2-2.6.2-py2.py3-none-any.whl to /home/pi/env/lib/python2.7/site-packages
writing requirements to /home/pi/env/lib/python2.7/site-packages/h2-2.6.2-py2.7.egg/EGG-INFO/requires.txt
Adding h2 2.6.2 to easy-install.pth file
Installed /home/pi/env/lib/python2.7/site-packages/h2-2.6.2-py2.7.egg
Searching for hpack< 4 ,>= 2.2
Reading https://pypi.python.org/simple/hpack/
Downloading https://pypi.python.org/packages/8a/cc/e53517f4a1e13f74776ca93271caef378dadec14d71c61c949d759d3db69/hpack-3.0.0-py2.py3-none-any.whl
Best match: hpack 3.0.0
Processing hpack-3.0.0-py2.py3-none-any.whl
Installing hpack-3.0.0-py2.py3-none-any.whl to /home/pi/env/lib/python2.7/site-packages
Adding hpack 3.0.0 to easy-install.pth file
Installed /home/pi/env/lib/python2.7/site-packages/hpack-3.0.0-py2.7.egg
Searching for requests == 2 .12.4
Best match: requests 2.12.4
Adding requests 2.12.4 to easy-install.pth file
Using /usr/lib/python2.7/dist-packages
Searching for click == 6 .6
Best match: click 6.6
click 6.6 is already the active version in easy-install.pth
Using /usr/lib/python2.7/dist-packages
Searching for six == 1 .10.0
Best match: six 1.10.0
six 1.10.0 is already the active version in easy-install.pth
Using /usr/lib/python2.7/dist-packages
Searching for enum34 == 1 .1.6
Best match: enum34 1.1.6
enum34 1.1.6 is already the active version in easy-install.pth
Using /usr/lib/python2.7/dist-packages
Finished processing dependencies for avs == 0 .0.9
Python Alexa Voice Service App
は以下のパッケージを必要するようなのですが、
gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gir1.2-gstreamer-1.0
python -gi python -gst-1.0 python -pyaudio
respeaker python library and pocketsphinx (optional, for hands-free keyword spotting)
Wiki ではこの中の一部とtornado
をインストールしているようです。さっきのインストーラ でもインストールしてそうなんですが…
ググる とTornado
は、Python で書かれたWebフレームワーク/非同期通信ライブラリで、
GStreamer
はストリーミングメディアアプリケーションを作成するためのフレームワーク とのことでした。
( env ) ~/avs $ sudo apt-get install gstreamer1.0 gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly
( env ) ~/avs $ sudo apt-get install python-gi gir1.2-gstreamer-1.0
( env ) ~/avs $ pip install tornado
パッケージのインストールの途中で以下のような表示がでるかもしれませんが
…(中略)…
以下の情報がこの問題を解決するために役立つかもしれません:
以下のパッケージには満たせない依存関係があります:
gstreamer1.0-omx-dbg : 依存: gstreamer1.0-omx ( = 1.0.0.1 -0 +rpi12+jessiepmg ) し かし、1.10.4-1 +rpt2 はインストールされようとしています
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。
スルーしますw。 スルーできねっす。
本来はパッケージマネージャで依存関係を解決するのですが、gstreamer1.0
が依存するgstreamer1.0-omx
だけ古いバージョンのものをインストールしようとして
インストール失敗をしているようです。別途単体でインストールはできるので以下の様にすればよいようです。
( env ) $ sudo apt-get install gstreamer1.0-omx
これもうまく行っていなかったようです。
※ Github のドキュメントでは
For Ubuntu /Debian :
$ 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 python -pyaudio
$ sudo pip install avs respeaker pocketsphinx
となっているのでこの手順でインストールしました。
$ 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 python-pyaudio
以降の作業はVNC 側のコンソールで行うようになっていますが、X上でももちろん大丈夫です。
virtualenvを有効化している場合には以下の手順は不要です。
~ $ source ~/env/bin/activate
alexa-auth
をターミナルから実行します。
( env ) $ alexa-auth
すると、Alexaの認証ダイアログがX上に現れます。
そのダイアログに認証情報を入力すると/home/pi/.avs.json
に認証情報が保存されます。
ダイアログで認証情報を入力が正常に行われるとこのような画面になります。
注意点としては
If we want to switch between alexa-auth and dueros-auth, please delete /home/pi/.avs.json first. The file is hidden and use the ls -la to list the file.
AlexaとBaiduで認証情報のファイル(/home/pi/.avs.json
)を共有しているので、切り替える場合には削除する必要があります。
あと、ファイルの属性が非表示のようなのでls -la
を付けないと所在が確認できないようです。
ちゃんと存在していますね。
2. Let’s Enjoy!(ここからはうまく行っていないようです…シクシク)
あとは楽しめばいいようです。
virtualenv環境上でns_kws_doa_alexa_with_light.py
を実行させると大量のデバックメッセージが出力されますが気にしないことにします。
(env) ~/avs $ cd ~/4mics_hat
(env) ~/4mics_hat $ python ns_kws_doa_alexa_with_light.py
ステータスコード で204
が出力されたら、respeakerに対してsnowboy
と呼びかけてみます。するとユニットにあるLED点灯し、音声認識 可能の状態になります。
“who is the most handsome guy in the world?”とか“Do you know how to beat-box?”と話しかけてみましょう。
認識モードには移行してもらえたのですがちっとも認識してもらえません…
問題発音?あるいはソフトウエアの設定?
おわりに
スマートスピーカーっぽいことができました(?)でも、個人的にはLEDがピカピカ光っているのをみているだけでも心落ち着くのはなぜでしょうか。
問題は自分の英語の発音が悪いというところでしょうかw