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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

5064閲覧

juliusモジュールモードの出力結果について

reo_sax

総合スコア7

Julius

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2017/12/01 03:12

###前提・実現したいこと
現在、juliusを利用して認識結果をテキストとして取得するプログラムを作っているのですが、モジュールモードで結果を取得するまではできたのですが、肝心の認識結果がよくわからない文字列が出力されてしまいます。

問題点がありましたら、改善の指摘をしていただけると嬉しいです。
お願いします。

###発生している問題・エラーメッセージ
問題の出力結果

b'<RECOGOUT>\ 'b' <SHYPO RANK="1"'b' SCORE="-3272.057617"'b'>\ 'b' <WHYPO'b' WORD=""'b' CLASSID="<s>"'b' PHONE="'b'silB'b'"'b' CM="0.474"'b'/>\ 'b' <WHYPO'b' WORD="\x82\xa0\x82\xea"'b' CLASSID="\x82\xa0\x82\xea+\x8a\xb4\x93\xae\x8e\x8c"'b' PHONE="'b'a'b' r'b' e'b'"'b' CM="0.007"'b'/>\ 'b' <WHYPO'b' WORD="\x81B"'b' CLASSID="</s>"'b' PHONE="'b'silE'b'"'b' CM="1.000"'b'/>\ 'b' </SHYPO>\ 'b'</RECOGOUT>\

理想の出力結果

<RECOGOUT> <SHYPO RANK="1" SCORE="-6888.637695" GRAM="0"> <WHYPO WORD="silB" CLASSID="39" PHONE="silB" CM="1.000"/> <WHYPO WORD="上着" CLASSID="0" PHONE="u w a g i" CM="1.000"/> <WHYPO WORD="を" CLASSID="35" PHONE="o" CM="1.000"/> <WHYPO WORD="白" CLASSID="2" PHONE="sh i r o" CM="0.988"/> <WHYPO WORD="に" CLASSID="37" PHONE="n i" CM="1.000"/> <WHYPO WORD="して" CLASSID="27" PHONE="sh i t e" CM="1.000"/> <WHYPO WORD="下さい" CLASSID="28" PHONE="k u d a s a i" CM="1.000"/> <WHYPO WORD="silE" CLASSID="40" PHONE="silE" CM="1.000"/> </SHYPO> </RECOGOUT>

###該当のソースコード

# -*- coding: utf-8 -*- #!/usr/bin/env python from __future__ import print_function import socket from contextlib import closing import subprocess from time import sleep import xml.etree.ElementTree as ET def main(): p = subprocess.Popen(["start_julius.sh"], stdout = subprocess.PIPE, shell = True) sleep(3) host = 'localhost' port = 10500 bufsize = 4096 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host,port)) try : data = "" while 1: if '</RECOGOUT>' in data: print(data) break elif '<RECOGOUT>' in data: data = data + str(sock.recv(1024)) else :data = str(sock.recv(1024)) except KeyboardInterrupt: p.kill() sock.close() return data if __name__ == '__main__': recv_data=main()
#start_julius.sh bin/windows/julius.exe -C main.jconf -C am-gmm.jconf -charconv euc-jp utf-8 -module

###試したこと
-charconv でsjis、euc、utf8を組み合わせを変えながら実行してみたのですが、実行結果は変わりませんでした・・・

###補足情報(言語/FW/ツール等のバージョンなど)
使用言語:Python3

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

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

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

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

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

guest

回答1

0

ベストアンサー

JuliusをPythonから呼び出して結果をJuliusからPythonに渡すときに、Pythonにはstr型ではなくbytes objectとして渡されます。したがって、これをデコードする必要があります。

try : data = "" while 1: if '</RECOGOUT>' in data: print(data) break elif '<RECOGOUT>' in data: data = data + sock.recv(1024).decode('utf-8') else :data = sock.recv(1024).decode('utf-8')

投稿2017/12/01 03:25

Takahito_Ogawa

総合スコア229

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

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

reo_sax

2017/12/01 04:58

無事解決いたしました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問