Rapiro の音声操作その4
今回は Julius を音声認識サーバとして機能させる
これを行うのが Julius の
モジュールモード
これを使えば独立した音声認識サーバーになる
このモジュールモードだと
音声認識結果を
Julius サーバーから
ソケット通信で他のプログラムへ渡すことができる
この仕組みを使うことで
RaspberryPi で音声認識結果を受け取る
これをやるには
rapiro.conf の
一番下の行へ
-module
を追加する
1 | cd dictation-kit-v4.3.1-linux/ |
でディレクトリ移動して
1 | sudo vim rapiro.conf |
でファイルを開き編集
全部を書くと
1 2 3 4 5 6 7 8 9 10 11 12 | -w rapiro.dic - v model /lang_m/bccwj .60k.htkdic -h model /phone_m/jnas-tri-3k16-gid .binhmm -hlist model /phone_m/logicalTri -n 5 -output 1 -input mic -input alsa -rejectshort 800 -lv 1500 -demo -module |
最後に -module を追加している
これで
1 | julius -C rapiro.conf |
で起動
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ----------------------- System Information end ----------------------- Notice for feature extraction (01), ************************************************************* * Cepstral mean normalization for real- time decoding: * * NOTICE: The first input may not be recognized, since * * no initial mean is available on startup. * ************************************************************* Stat: capture audio at 16000Hz Stat: adin_alsa: current latency time : 21 msec Stat: adin_alsa: current latency (21ms) is shorter than 32ms, leave it Stat: "default" : Device [USB PnP Sound Device] device USB Audio [USB Audio] subdevice #0 STAT: AD- in thread created <<< please speak >>> |
が普通に起動した Julius で
今回サーバーモードだと
1 2 3 4 5 | Stat: server-client: socket ready as server /////////////////////////////// /// Module mode ready /// waiting client at 10500 /////////////////////////////// |
となりちょっと変わる
client at 10500
とあるように
ポート 10500 を使うことになります
どちらも停止方法は
ctrl + c
これで辞書ファイルの結果を渡せるので
前回作成した辞書ファイルを
Rapiro のコマンドになるように編集
ちなみに Rapiro のコマンドは
http://wiki.rapiro.com/page/serial-command_ja/
にあるように
#M0
停止
#M1
前進
#M2
後退
#M3
右回り
#M4
左回り
#M5
両手をふる
#M6
右手をふる
#M7
両手を握る
#M8
右手をふる
#M9
右手を伸ばす
となっている
なので、これに対応するようにファイルを編集する
まず、バックアップをとっておく
1 | cp rapiro.dic rapiro.dic_bak |
これでいざというときにはこれから復旧できる
次にファイルの編集
1 | sudo vim rapiro.dic |
でファイルを開いて
1 2 3 4 5 6 7 8 9 10 11 | <sil> silB <sil> silE <sp> sp ラピロ r a p i r o はっしん h a q sh i N こうたい k o u t a i バック b a q k u 右 m i g i 左 h i d a r i バンザイ b a N z a i たたかえ t a t a k a e |
の日本語部分を Rapiro のコマンドに変える
1 2 3 4 5 6 7 8 9 10 11 | <sil> silB <sil> silE <sp> sp #M0 r a p i r o #M1 h a q sh i N #M2 k o u t a i #M2 b a q k u #M6 m i g i #M8 h i d a r i #M5 b a N z a i #M9 t a t a k a e |
これで保存
次に
制御コマンドを Julius から受け取り
GPIOのTXピンから
UARTシリアル通信でRapiro の基盤になっている
Ardunioに送信するプログラムを準備
これにより受け取った動作コマンドに応じて
サーボモータなどを動かす
1 | vim rapiro_main.py |
で python ファイルを作成
内容は
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import serial host = 'localhost' port = 10500 clientsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) clientsock.connect((host, port)) com = serial.Serial( '/dev/ttyAMA0' , 57600 , timeout = 10 ) while True : recv_data = clientsock.recv( 512 ) com.write(recv_data) |
次に必要なパッケージ
python-serial をインストール
1 | sudo apt-get install python-serial |
これでようやく起動
1 | julius -C rapiro.conf & |
&をつけてバックグランド動作
これをつけないと端末入力できなくなる
途中で
1 2 3 4 | /////////////////////////////// /// Module mode ready /// waiting client at 10500 /////////////////////////////// |
がでたら Enter をおす
次に
1 | sudo python rapiro_main.py |
しかし、まったく動かない
原因を調べた結果、マイクの機種によってはうまく動作しないらしい
RAPIRO(ラピロ)の音声制御(参考:日経Linux 2014 6月号)
にXMLパースのソースが載っていたので
これを使わせていただくことで無事に動作することができました
なお、参考にした書籍
ラズパイマガジンの読者限定ページで
この問題対応のソースも用意されているので
こちらで対処することも可能です