snips.ai と XMOS VocalFusion Speaker Kit で、 オリジナル Voice Assistant を作成する

snips.ai は、クラウドを介さずに音声認識・対話処理が可能なプラットフォームです(参考:https://www.youbuyfrance.com/jp/Posts-14593--snips)。個人あれば無償での利用が可能です(https://makers.snips.ai/, 2018年6月現在)。
  
  
この snips.ai の音声処理(エコーキャンセル、ノイズ削減、ビームフォーミング等)デバイスとして、XMOS社 VocalFusion スピーカー開発キット を使用することが可能です。これにより、よりクリアな音声を snips.ai に入力することができます。
  
  
以下では、Raspberry Pi 3 (RPi3 Model B) 上で動作する snips.ai と、XMOS社VocalFusion スピーカー開発キット (XK-VF3100-L33)を組み合わせた Voice Assistant のセットアップについてご紹介します。


下記の設定のうち、snips の設定部分は、次のURLに記載がありますので、合わせてご確認ください。
Getting Started with Snips on Raspberry Pi
https://snips.gitbook.io/getting-started/ 
 
 

(1)XMOS VocalFusion スピーカー開発キット (XK-VF3100-L33)設定


USB インターフェースのファームウエアを書き込みます(前述の写真・ボードでは、ファームウエア・ファイル app_vf_spk_base_1i1o2_lin33_asr.xe を使用)。
 
書き込み方法の資料や及びファームウェア・ファイルについては、XMOSの Web site からダウンロードできます。
xCORE VocalFusion™ Speaker Evaluation Kit Quick Start Guide
 
 
(XMOS社の日本代理店は株式会社マクニカになります。XMOS社の評価ボードは、こちらからもご注文いただけます。 http://www.tecstar.macnica.co.jp/products/xmos.html
  
 

(2)snips.ai 側の設定

(2ー1)snips.ai アカウントの設定

画面右上の"Sign Up" をクリックして、アカウントを作成します。
 
snips.ai

 
https://makers.snips.ai/

 
 

(2ー2)snips.ai アシスタントの作成

以下では、"test1" という Assistant を作成した例です。

 
"Add a skill" をクリック後、(今回のテストのために)"Greetings" という既存の skill を追加します。

 
 
この skill は、挨拶を返す簡単なものです。2つの Intents が定義されています。"bye" と "hello" です。以下は、Greetings をクリックして、"Edit skill" -> "Fork" とクリックすると確認できました。
 

 
"bye" intent では、以下が定義されています。テストでは、"bye robot" と発言してみます。
 

 
 
また、Actions では、以下のように定義されています。"bye" intents に一致する言葉を認識した場合には、以下のうち、いづれかを返答するように設定されています。
"bye", "see you later", "good bye", "bye now"
 

 
 
  

(3)Raspberry Pi の設定

(3−1) Raspbian のダウンロード (Raspbian Stretch Lite)

 
以下のURLより、Raspbian Stretch Lite をダウンロードします。
https://www.raspberrypi.org/downloads/raspbian/
 
  

(3−2)Rasbian のインストール


4GB or 8GB SDカードに、Raspbian のイメージ・ファイルをインストールします。
以下では、macOS での操作を記載しています。
  
ディスク・ユーティリティで、"disk?" 番号を確認します。
以下では、「装置」箇所に、"disk2s1" と表示されています。この番号を記録しておきます。
 
また、ディスク・ユーティリティ Window の、上部に「マウント解除」ボタンがあります。
左側に表示されるデバイス一覧から、SDカードを選択後、「マウント解除」ボタンをクリックします。
  

その後、ダウンロードした Raspbian のイメージ・ファイルを、Terminal から、以下のコマンドでSDカードに書き込みます。
このとき、先ほど確認した "disk?" の番号を入力します。以下では、"rdisk2" と設定しています。
  

$  sudo  dd  bs=1m  if=2018-04-18-raspbian-stretch-lite.img  of=/dev/rdisk2 conv=sync
  
 
SDカードへの書き込み後、SDカードを Raspberry Pi 3 に挿入し、電源を入れます。
その後、その後の操作のために、いくつか設定を行います(下記)。
  

(3−3)SSH 有効化とキーボード等の設定


Raspberry Pi 上で、raspi-config コマンドを使用して、SSHを有効にします。また、キーボードに合わせて設定を行ってください。以下では、SSHの有効化の手順を記載します。
 
  
$  sudo raspi-config
 
=> 5 Interfacing Options  Configure connections to peripherals
を選択
 
=> P2  SSH  Enable/Disable remote command line access to your Pi using SSH
を選択
 
その後、SSH を Enable にする
 
  
  

(3−4)USB Audio の有効化


Rasbperry Pi と XMOS社VocalFusion スピーカー開発キット (XK-VF3100-L33)は、I2S インターフェースまたは、USB Audio で通信することができます。
 
今回は、Raspberry Pi 側の設定が簡単な USB Audio で接続します。Raspberry Pi 側の Audio 設定も、以下の手順で USB Audio に設定します。
  
 
「/etc/modprobe.d/alsa-base.conf」を作成。ファイルには次の2行のみ記載する。

options snd slots=snd_usb_audio
options snd_usb_audio index=0
 
「/usr/share/alsa/alsa.conf」の一行をコメントアウトする(赤字の部分)。
@hooks [
   {
      func load
      files [
         {
            @func concat
            strings [
               { @func datadir }
               "/alsa.conf.d/"
            ]
         }
         "/etc/asound.conf"
#         "~/.asoundrc"   
      ]
      errors false
   }
]
 
 
「/boot/config.txt」 内で、BCM 2835 を有効にしている部分を、"off" に設定(赤字の部分)
 


#Enable audio (loads snd_bcm2835)
dtparam=audio=off
  
 
 

(4)macOS側の設定


(4−1)Homebrew のインストール

  
macOS の Terminal 上で、以下のコマンドを実行します。
 
$  /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  
  

(4−2)node.js のインストール

  
macOS の Terminal 上で、以下のコマンドを実行します。
  
$  brew install node
$  sudo npm install -g n
$  sudo npm update -g npm
$  sudo n lts
  
 
 

前述の写真のように、USBケーブルで、Raspberry Pi と接続します。
また、スピーカーを、VocalFusion スピーカー開発キット (XK-VF3100-L33) の Audio Out に接続します。
 
  

(6)snips.ai のインストール


以下の操作は全て macOS 側での操作になります。
この操作の前に、Raspberry Pi に Ethernet ケーブルを接続します。
  
 
$ sudo npm install -g snips-sam
 
$ sam devices
Scanning Raspberry Pi devices on the network...
Found 1 device: 
- raspberrypi (192.168.9.2)

(ping  192.168.9.2 と入力後、sam devices コマンドで見えた)


$ sam connect raspberrypi.local 
? Enter username for the device: pi 
? Enter password for the device: [hidden] 
Connected to raspberrypi.local

$ sam init
Installing Snips Platform components. This may take a few minutes... 
Successfully installed Snips Platform components

$ sam status 
Connected to device raspberrypi.local 
OS version ................... Raspbian GNU/Linux 9 (stretch) 
Installed assistant .......... Not installed 
Status ....................... Installed, not running 

Service status: 

snips-analytics .............. 0.55.2 (not running) 
snips-asr .................... 0.55.2 (not running) 
snips-audio-server ........... 0.55.2 (running) 
snips-dialogue ............... 0.55.2 (not running) 
snips-hotword ................ 0.55.2 (not running) 
snips-nlu .................... 0.55.2 (not running) 
snips-skill-server ........... 0.55.2 (not running) 
snips-tts .................... 0.55.2 (running)


$ sam test speaker

$ sam test microphone 
Testing microphone
Say something in the microphone, then press Enter... ...


$ sam login 
? Enter email used on the console: username@mail.com 
? Enter password used on the console: [hidden]

$ sam install assistant 

Fetching assistants done
Found 1 assistant named test1
Downloading assistant
Fetching assistants done
NLU training done
ASR training done
Deploying assistant to raspberrypi.local...
Checking for skills
i Found 1 skill 
Generating actions based on the snippets provided
INFO:snips_actions_templates_engine_lib: parsing snippets for skill "/usr/share/snips/assistant/snippets/SirBuildsALot7.Greetings"
INFO:snips_actions_templates_engine_lib: parsing snippets dir "/usr/share/snips/assistant/snippets/SirBuildsALot7.Greetings/python2"
INFO:snips_actions_templates_engine_lib: parsed 2 snippets

Setting up Python actions
Installing pip and virtualenv. This could take a while.

Checking actions for end-user parameters
Generating virtual environment for python actions
Relaunching snips-skill-server
Snips assistant is now running. Say hey_snips to start!
i Run sam watch to see the logs 



$ sam watch
(以下は、"Hey snips,   good bye robot" と発音した際のログです)

[10:22:22] Watching on localhost:1883 (MQTT)
[10:22:44] [Hotword] detected on site default, for model default
[10:22:44] [Asr] was asked to stop listening on site default
[10:22:44] [Hotword] was asked to toggle itself 'off' on site default
[10:22:44] [Dialogue] session with id '5857e34d-cfcc-4f15-9d6a-6d62ac40b1a3' was started on site default
[10:22:44] [Asr] was asked to listen on site default
[10:22:48] [Asr] captured text "good bye robot" in 3.0s
[10:22:48] [Asr] was asked to stop listening on site default
[10:22:48] [Nlu] was asked to parse input good bye robot
[10:22:48] [Nlu] detected intent SirBuildsALot7:bye with probability 1.000 for input "good bye robot"
              Slots ->
                 bye -> good
                 bye -> bye
[10:22:48] [Dialogue] New intent detected SirBuildsALot7:bye with probability 1.000
              Slots ->
                 bye -> good
                 bye -> bye
[10:22:48] [Dialogue] was ask to end session with id 5857e34d-cfcc-4f15-9d6a-6d62ac40b1a3 by saying 'good bye'
[10:22:48] [Tts] was asked to say "good bye"
[10:22:48] [AudioServer] was asked to play a wav of 28.4 kB with id '861b50fa-2c9f-4047-becd-e9621c8c9ca6' on site default
[10:22:49] [AudioServer] finished playing wav with id '861b50fa-2c9f-4047-becd-e9621c8c9ca6'
[10:22:49] [Tts] finished speaking with id '01984692-11e1-4ded-b38e-ba92d9d820ea'
[10:22:49] [Dialogue] session with id '5857e34d-cfcc-4f15-9d6a-6d62ac40b1a3' was ended on site default. The session ended as expected
[10:22:49] [Asr] was asked to stop listening on site default

[10:22:49] [Hotword] was asked to toggle itself 'on' on site default




(7)snips.ai とVocalFusion スピーカー開発キット (XK-VF3100-L33)の動作確認


以下を発音すると何か返答します。

"Hey snips (ヘイ、スニプス)、 Hello (ハロー)"

"Hey snips (ヘイ、スニプス)、 Bye (バイ)"

 
これで、snips.ai と XMOS VocalFusion スピーカー開発キット (XK-VF3100-L33)を使用した開発環境が構築できました。
 
Snips のコンソール上で、Skill を追加し、また、この環境を使用することで、遠くから(ファーフィールド)の音声もしっかりキャプチャできる、オリジナルの Voice Assistant を構築できることがお分りいただけたと思います。
 
(Assistant を更新した場合や、切り替える場合には、前述の「sam install assistant 」を再度実行してください)
 
 
(その他の投稿については、右上の「ページ」をご確認ください)

0 件のコメント:

コメントを投稿