前提・実現したいこと
現在、julius dictation-kitを利用して認識結果をテキストとして取得するプログラムを作っているのですが、モジュールモードで結果を取得するまではできたのですが、肝心の認識結果がよくわからない文字列が出力されてしまいます。また、WHYPO WORDだけ出力したいです。
###理想の出力
<RECOGOUT> <SHYPO RANK="1" SCORE="-1874.638672" GRAM="0"> <WHYPO WORD="<s>" CLASSID="3" PHONE=" silB " CM="1.000"/> <WHYPO WORD="金" CLASSID="0" PHONE="k i m u" CM="0.980"/> <WHYPO WORD="に" CLASSID="1" PHONE="n i" CM="1.000"/> <WHYPO WORD="行って" CLASSID="2" PHONE="i q t e" CM="1.000"/> <WHYPO WORD="</s>" CLASSID="4" PHONE="silE" CM="1.000"/> </SHYPO> </RECOGOUT> 結果 金に行って
発生している問題・エラーメッセージ
SPEECH START 筝・ CLASSID=縲・ CLASSID= 篋・ CLASSID=縲・ CLASSID= 繧・b痺ォ繧・b痺ォ繧・ CLASSID=臀・¥縺ョ縺・ CLASSID=縺・ CLASSID=縲・ CLASSID= 羇丈焔縺吶k羇セ縲・ CLASSID= 縺・s縺ァ縺・ CLASSID=縲・ CLASSID=縺・ CLASSID=縲・ CLASSID= 罩≪¥痰・ CLASSID=縲・ CLASSID= 髱ゥ繝代Φ縲・ CLASSID=縺・s縲・ CLASSID= 縺ゅ≠縲・ CLASSID=縺ゅ≠縲・ CLASSID= 縺ゅ・篏・ CLASSID=縺・ヮ痰・ CLASSID=縲・ CLASSID= 縺薙s縺・=メッ縲・ CLASSID= 繝溘く縺ッ縲・ CLASSID= 譌ゥ繝峨い縺縲・ CLASSID=
該当のソースコード
import re import socket import subprocess import time HOST = "localhost" PORT = 10500 re_word = re.compile('WORD="([^"]+)"') def main(): p = subprocess.Popen(["start_julius.sh"],stdout=subprocess.PIPE, shell=True) time.sleep(3) client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((HOST, PORT)) print('SPEECH START') try: data = "" while 1: if "</RECOGOUT>" in data: words = '' for word in filter(bool, re_word.findall(data)): words += word if words: print(words) data = "" else: data = data + client.recv(1024).decode('utf-8') except KeyboardInterrupt: print("KeyboardInterrupt occured.") p.kill() client.close() if __name__ == "__main__": main()
試したこと
juliusの出力結果の形式がbytes型であるため、UTF-8でデコードを行いましたが、文字化けしました。
補足情報(FW/ツールのバージョンなど)
環境はWindows10,IDEはAnacondaのSpyderです。
julius モジュールモードは以下のコマンドで実行しました。
.\bin\windows\julius.exe -C main.jconf -C am-gmm.jconf -charconv euc-jp utf-8 -module
…ふーん。2,3年前に見てたら、luckerお兄さんが回答してたな…。ぶっちゃけJuliusは良いプロジェクトだけど、開発方法がガラパゴスなので世界的な常識通じないんだよな。
ま、がんばって、としか。
あなたの回答
tips
プレビュー