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

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

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

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

while

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

Raspberry Pi

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

Python

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

Q&A

1回答

1850閲覧

Pythonを使用したJuliusのプログラムで条件分岐がうまくいかず、前にあるwhile Trueがあるため、最初の動作からになってしまう

退会済みユーザー

退会済みユーザー

総合スコア0

Julius

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

while

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

Raspberry Pi

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

Python

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

0グッド

0クリップ

投稿2021/09/18 08:48

編集2021/09/19 04:17

問題

PythonにてJuliusのプログラムを作っていたところ、
if文で条件分岐した後にその中でもう一度if文を使用したところ、
話した内容がうまく認識されず、
音声認識を常時稼働させるためにwhile Trueを置いていて、
それのせいで認識しないまままた最初の文(Print("Hello World!"))に戻ってしまいます。

該当のソースコード

Python

1import socket 2import time 3 4HOST = '127.0.0.1' 5PORT = 10500 6DATESIZE = 1024 7 8class Julius: 9 10 def __init__(self): 11 12 self.sock = None 13 14 def run(self): 15 16 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as self.sock: 17 self.sock.connect((HOST, PORT)) 18 19 strTemp = "" 20 fin_flag = False 21 22 while True: 23 24 data = self.sock.recv(DATESIZE).decode('utf-8') 25 26 for line in data.split('\n'): 27 index = line.find('WORD="') 28 if index != -1: 29 strTemp = strTemp + line[index+6:line.find('"',index+6)] 30 31 if '</RECOGOUT>' in line: 32 fin_flag = True 33 34 if fin_flag == True: 35 if 'A' in strTemp: 36 print("Hello World!") 37 time.sleep(2) 38 print("-聞き取り中-") 39 if 'B' in strTemp: 40 print("Good afternoon!") 41 break 42 if 'C' in strTemp: 43 print("Good evening!") 44 break 45 46 fin_flag = False 47 strTemp = "" 48 49if __name__ == "__main__": 50 51 julius = Julius() 52 julius.run()

試したこと

  • 2つ目のifのところで動作が終わった後にbreakをつけた


問題に改善は見られなかった

  • while True を消した


実行してもprint文も出力せずにファイルが終了してしまった

###Pythonについて

  • Python3

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

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

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

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

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

thkana

2021/09/19 02:12

> if文で条件分岐した後にその中でもう一度if文を使用したところ、話した内容がうまく認識されず そうでなければ「うまく認識」されていたのですか? > また最初の文に戻ってしまいます 「最初の文」とはなんですか? 具体的にはどうなることを「最初の文に戻る」と言っていますか? > 2つ目のifのところで動作が終わった後にbreakをつけた 2つ目のifとは、 if '</RECOGOUT>' in line: ですか。動作が終わった後にbreakをつけた、とは __if '</RECOGOUT>' in line: ____fin_flag = True の後に ____break としたということですか、それとも __break としたということですか? それによって、どうなることを期待したのですか? そもそもとして、このプログラムは「何をした/何が起こった」ときに「どうなる」ことを期待していますか? (追記欄で返答せず、質問を編集して情報を盛り込んでください)
退会済みユーザー

退会済みユーザー

2021/09/19 04:26 編集

最初の文については追記しました。 breakについては、プログラム内についているものはすべて実践したものです。 プログラムを読み解けば普通にわかると思ったのですが、例えば「A」といえば、この文字を出力し、 その後ほかの言葉を言ったら、今度は次の文字を出力する、Aのあとにまた別のCと言ったら、 別のもいを出力をするというようにしたいです。 返答するなと言われましても、「どこを追加したのか?」という質問がきそうなので、返答しました。
thkana

2021/09/19 12:25

RaspberryPiはあまり整備していないのでWindowsでjuliusを(日本語ディクテーションキットで)セットアップしてモジュールモードで立ち上げてみましたが、アルファベットの認識結果は全角文字で返ってきます。 この辺は、juliusは英語のデータを持たせているとか、実は'A'というのは嘘で別の文字(列)を検索しているとか、そういう事情はあるのでしょうか。
guest

回答1

0

なんだか退会しちゃいましたけど。
多分元ネタはここ

で、(元から)TCP/IPの使い方に疑問があるのでその辺は注意。TCP/IPはあくまで「バイト単位」の通信なので、行であったり送信で関数に渡したデータ塊であったりが受信側で保存されているという期待を持ってはいけない、というあたり。

投稿2021/09/21 13:36

thkana

総合スコア7703

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問