Rapiro の音声操作その4

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

しかし、まったく動かない

原因を調べた結果、マイクの機種によってはうまく動作しないらしい

このため、そのような場合には
XMLパースが必要になる

RAPIRO(ラピロ)の音声制御(参考:日経Linux 2014 6月号)

にXMLパースのソースが載っていたので
これを使わせていただくことで無事に動作することができました

なお、参考にした書籍
ラズパイマガジンの読者限定ページで
この問題対応のソースも用意されているので
こちらで対処することも可能です

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です