質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Julius

Julius は,音声認識システムの開発・研究のためのオープンソースの高性能な汎用大語彙連続音声認識エンジンです。数万語彙の連続音声認識を一般のPCやスマートフォン上でほぼ実時間で実行できる軽量さとコンパクトさを持っています。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1343閲覧

Raspberry Pi で「SyntaxError: unexpected EOF while parsing」のエラーが表示されてしまう

退会済みユーザー

退会済みユーザー

総合スコア0

Julius

Julius は,音声認識システムの開発・研究のためのオープンソースの高性能な汎用大語彙連続音声認識エンジンです。数万語彙の連続音声認識を一般のPCやスマートフォン上でほぼ実時間で実行できる軽量さとコンパクトさを持っています。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/09 04:45

編集2021/09/09 06:09

質問内容

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ppaul

2021/09/09 05:20

def main(): 以降のインデントは、これで正しいのですか?
1T2R3M4

2021/09/09 05:20

>対策をしてみたものの どのような対策されましたか。 質問内、試したことに追記していただけませんか。
episteme

2021/09/09 05:42

インデントが正しいとすると、main が for-loop の中にあるよね。
1T2R3M4

2021/09/09 06:58

>try分の後にexcept で状況変わりませんでしたか。 どこにどのように追加したのでしょうか。
guest

回答1

0

ベストアンサー

ありとあらゆるところで意図がわからないコードになっていると感じますが、文法エラー自体は

for count in range(3): try:

のtryに対応するexcept節かfinally節がないからと思いました。

投稿2021/09/09 06:56

quickquip

総合スコア11038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問