質問内容
PythonでJuliusという音声認識のモジュールを使用しています。
下記のようなエラーが表示され、対策をしてみたものの(試したこと参照)、やはり同じエラーが何度も出てしまいます。
Raspberry Pi でこのプログラムを書きました。
発生している問題・エラーメッセージ
File "sample_juliusNL1.py", line 101 ^ SyntaxError: unexpected EOF while parsing
プログラム
Python
1import sys 2print(sys.version) 3# -*- coding: utf-8 -*- 4# Julius音声認識(自然言語版)サンプル 5# for Bezelie Edgar 6# for Raspberry Pi 7# by Jun Toyoda (Team Bezelie) 8# from Aug15th2017 9 10import csv # CSVファイルを扱うモジュール 11import json # jsonファイルを扱うモジュール 12import re # 正規表現モジュール 13import select # 待機モジュール 14import socket # ソケット通信モジュール 15import subprocess # 外部プロセスを実行するモジュール 16import sys # python終了sys.exit()のために必要 17import xml.etree.ElementTree as ET # XMLエレメンタルツリー変換モジュール 18from time import sleep # ウェイト処理 19 20jsonFile = ("/home/pi/bezelie/edgar/data_chat.json") # 設定ファイル 21ttsFile = ("/home/pi/bezelie/edgar/exec_openJTalk.sh") # 音声合成 22 23# 設定ファイルの読み込み 24f = open (jsonFile,'r') 25jDict = json.load(f) 26mic = jDict['data0'][0]['mic'] # マイク感度。62が最大値。 27vol = jDict['data0'][0]['vol'] # スピーカー音量。 28 29# 変数の初期化 30muteTime = (1) # 音声入力を無視する時間 31bufferSize = (256) # 受信するデータの最大バイト。2の倍数が望ましい。 32 33# 関数 34def socket_buffer_clear(): 35 while True: 36 rlist, _, _ = select.select([client], [], [], 1) 37 if len(rlist) > (0): 38 dummy_buffer = client.recv(bufferSize) 39 else: 40 break 41 42# TCPクライアントを作成しJuliusサーバーに接続する 43client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 44enabled_julius = (False) 45for count in range(3): 46 try: 47 client.connect(('localhost', 10500)) 48 # client.connect(('10.0.0.1', 10500)) # Juliusサーバーに接続 49 enabled_julius = (True) 50 break 51# except socket.error, e: 52 # print ('failed socket connect. retry') 53 pass 54 if enabled_julius == (False): 55 print ('Juliusが起動していないようです') 56 sys.exit(1) 57 58# メインループ 59 def main(): 60 try: 61 subprocess.call('amixer cset numid=1 '+vol+'% -q', shell=(True)) # スピーカー音量 62 subprocess.call('sudo amixer -q sset Mic 0 -c 0', shell=(True)) # 自分の声を認識してしまわない $ 63 subprocess.call("sh "+ttsFile+" 音声認識開始", shell=(True)) 64 sleep (muteTime) 65 subprocess.call('sudo amixer sset Mic '+mic+' -c 0 -q', shell=(True)) # マイク感受性 66 socket_buffer_clear() 67 print ('ー何か喋ってくださいー') 68 data = ("") 69 while True: 70 if ("</RECOGOUT>\n.") in data: # RECOGOUTツリーの最終行を見つけたら以下の処理を行う 71 try: 72 # dataから必要部分だけ抽出し、かつエラーの原因になる文字列を削除する。 73 data = data[data.find("<RECOGOUT>"):].replace("\n.", "").replace("</s>","").replace("<s>","") 74 # fromstringはXML文字列からコンテナオブジェクトであるElement型に直接変換する。 75 root = ET.fromstring('<?xml version="1.0" encoding="utf-8" ?>\n' + data) 76 keyword = ("") 77 for whypo in root.findall("./SHYPO/WHYPO"): 78 keyword = keyword + whypo.get("WORD") 79 subprocess.call('sudo amixer -q sset Mic 0 -c 0', shell=(True)) # 自分の声を認識してしま$ 80 print (keyword).format() 81 subprocess.call("sh "+ttsFile+" "+keyword, shell=(True)) 82 sleep (muteTime) 83 socket_buffer_clear() 84 subprocess.call('sudo amixer -q sset Mic '+mic+' -c 0', shell=(True)) # マイク感受性を元に戻す 85 print ("ー何か喋ってくださいー") 86 pass 87 except: 88 print ("----- except -----") 89 data = ("") # 認識終了したのでデータをリセットする 90 else: 91 data = data + client.recv(bufferSize) # Juliusサーバーから受信 92 # /RECOGOUTに達するまで受信データを追加していく 93 except KeyboardInterrupt: # CTRL+Cで終了 94 client.close() 95 sys.exit(0) 96 97 if __name__ == ("__main__"): 98 main() 99 sys.exit(0)
試したこと
- 文の最初に「import sys print(sys.version)」というのを入力
- try分の後にexcept(またはbreak)の追加
補足情報(Pythonのバージョン)
- Python 3.5.3
回答1件
あなたの回答
tips
プレビュー