Rapiro の音声操作その4
今回は Julius を音声認識サーバとして機能させる
これを行うのが Julius の
モジュールモード
これを使えば独立した音声認識サーバーになる
このモジュールモードだと
音声認識結果を
Julius サーバーから
ソケット通信で他のプログラムへ渡すことができる
この仕組みを使うことで
RaspberryPi で音声認識結果を受け取る
これをやるには
rapiro.conf の
一番下の行へ
-module
を追加する
cd dictation-kit-v4.3.1-linux/
でディレクトリ移動して
sudo vim rapiro.conf
でファイルを開き編集
全部を書くと
-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 を追加している
これで
julius -C rapiro.conf
で起動
----------------------- 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 で
今回サーバーモードだと
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
右手を伸ばす
となっている
なので、これに対応するようにファイルを編集する
まず、バックアップをとっておく
cp rapiro.dic rapiro.dic_bak
これでいざというときにはこれから復旧できる
次にファイルの編集
sudo vim rapiro.dic
でファイルを開いて
<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 のコマンドに変える
<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に送信するプログラムを準備
これにより受け取った動作コマンドに応じて
サーボモータなどを動かす
vim rapiro_main.py
で python ファイルを作成
内容は
#!/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 をインストール
sudo apt-get install python-serial
これでようやく起動
julius -C rapiro.conf &
&をつけてバックグランド動作
これをつけないと端末入力できなくなる
途中で
/////////////////////////////// /// Module mode ready /// waiting client at 10500 ///////////////////////////////
がでたら Enter をおす
次に
sudo python rapiro_main.py
しかし、まったく動かない
原因を調べた結果、マイクの機種によってはうまく動作しないらしい
RAPIRO(ラピロ)の音声制御(参考:日経Linux 2014 6月号)
にXMLパースのソースが載っていたので
これを使わせていただくことで無事に動作することができました
なお、参考にした書籍
ラズパイマガジンの読者限定ページで
この問題対応のソースも用意されているので
こちらで対処することも可能です