###前提・実現したいこと
PythonのsubprocessでJuliusをモジュールモードで起動し、音声認識結果をテキストで受け取る。
juliusの音声認識結果はxml形式でサーバ側に渡される。
期待する出力例:
<RECOGOUT> <SHYPO RANK="1" SCORE="59.118156"> <WHYPO WORD="" CLASSID="<s>" PHONE="sp_S" CM="1.000"/> <WHYPO WORD="さようなら" CLASSID="さようなら+感動詞" PHONE="s_B a_I y_I o:_I n_I a_I r_I a_E" CM="0.689"/> <WHYPO WORD="。" CLASSID="</s>" PHONE="sp_S" CM="1.000"/> </SHYPO> </RECOGOUT>
###発生している問題・エラーメッセージ
1.
マイクに音声を入力しても空データしか返ってこないため、音声認識結果が出力されない(juliusが立ち上がっているのは確認できる)
2.
PythonとJuliusの接続に失敗する(2〜3回に1回程度の割合)
Traceback (most recent call last): File "julius.py", line 53, in <module> main() File "julius.py", line 18, in main client.connect((host, port)) ConnectionRefusedError: [Errno 61] Connection refused
###該当のソースコード
julius.py
python
1# coding:utf-8 2import subprocess 3import socket 4 5 6def main(): 7 # julius起動スクリプトを実行 8 p = subprocess.Popen(["./dictation-kit-v4.4/run-dnn-mod.sh"], stdout=subprocess.PIPE, shell=True) 9 # juliusのプロセスIDを取得 10 pid = str(p.pid) 11 12 host = 'localhost' 13 port = 10500 14 15 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 16 client.connect((host, port)) 17 18 while 1: 19 try: 20 # データの受け取り バイト列で返ってくるためutf-8にデコード 21 data = client.recv(1024).decode("utf-8") 22 # データが空でなければ 23 if len(data) > 1: 24 # 出力 25 print(data) 26 except KeyboardInterrupt: 27 print ("KeyboardInterrupt occured.") 28 p.kill() 29 # juliusのプロセスを終了 30 subprocess.call(["kill " + pid], shell=True) 31 client.close() 32 33if __name__ == "__main__": 34 main()
run-dnn-mod.sh
#! /bin/sh PATH='dictation-kit-v4.4' ./$PATH/bin/osx/julius -C $PATH/main.jconf -C $PATH/am-dnn.jconf -module -dnnconf $PATH/julius.dnnconf $*
###試したこと
ホストのIPアドレスを指定する際に host='localhost' ではなく実際に割り当てられているIPアドレスを指定したが特に効果はなかった
対話モードで実行した場合は想定通りに動作しているため原因となっている箇所が不明
###補足情報(言語/FW/ツール等のバージョンなど)
実行環境
MacBook Pro(13-inch Early 2015)
macOS High Sierra 10.13.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/11 04:02
2018/01/11 13:26
2018/01/12 01:47
2018/01/12 01:52