Pythonを使って音声認識システム作れないか、調べてみるとJuliusというモジュールで簡単にできるらしい。
今回は簡単にWindows環境でPythonを使って音声認識システムを起動させるまでの方法をまとめてみました。
Juliusとは
京都大学などのチームが開発したオープンソースの音声認識ライブラリ。
「Julius(ジュリアス)」は独自の言語辞書を登録させることもできるらしく、好みの辞書を反映できそうです。
詳しい情報はJuliusのGitHubページを参照してみてください。
実装手順
今回はwindows環境でJuliusを起動させるところまでをまとめます。
実装の手順は以下の流れになります。
- Juliusをダウンロード
- Juliusをコマンドプロンプトで動かす
- Pythonの準備
- PythonとJuliusを接続する
- Juliusの音声認識を使ってみる
Juliusのダウンロード
まずは公式サイトからJuliusをダウンロードします。
以下のリンクから「ディクテーションキット(dictation-kit)」を選択。
https://julius.osdn.jp/index.php?q=dictation-kit.html
「ディクテーションキット version 4.5」というのがあるので、画面上でリンクをクリックするとダウンロードが開始されます。
ダウンロードが完了したらダウンロードしたフォルダを任意の場所に置いて展開しておきます。
Juliusをコマンドプロンプトで動かす
まずはJuliusを動かしてみたいと思います。
Windowsのコマンドプロンプトを開いて展開したフォルダまで移動します。
C:\Users\○○\○○\dictation-kit-4.5
移動ができたら以下のコマンドを入力します。
.\bin\windows\julius.exe -C main.jconf -C am-gmm.jconf -demo -charconv utf-8 sjis
実行が成功すると画像のような感じになります。
<< please speak >>と表示されているので、pcのマイクに向かって「おはよう」「こんにちは」と話してみると認識した言葉が表示されました。
Julius起動時のエラー解決策
Julius起動するために操作していたらエラーが発生しました。
ERROR: m_jconf: failed to open jconf file: main.jconf
同じようなエラーが表示されたら、Julius起動時のエラー解決策の記事を確認して解決してみてください。
Pythonの準備
次にPythonとJuliusを接続するためにファイルを作成します。
import socket
import time
import re
# ローカル環境のIPアドレス
host = '127.0.0.1'
# Juliusとの通信用ポート番号
port = 10500
# Juliusにソケット通信で接続
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, port))
time.sleep(2)
# 正規表現で認識された言葉を抽出
extracted_word = re.compile('WORD="([^"]+)"')
data = ""
try:
while True:
while (data.find("</RECOGOUT>\n.") == -1):
data += str(client.recv(1024).decode('shift_jis'))
# 単語を抽出
recog_text = ""
for word in filter(bool, extracted_word.findall(data)):
recog_text += word
# 単語を表示
print("認識結果: " + recog_text)
data = ""
except:
print('PROCESS END')
client.send("DIE".encode('shift_jis'))
client.close()
PythonとJuliusを接続する
Python側とJulius側の準備ができたので接続していきます。
まずはコマンドプロンプトで以下のコマンドを入力して実行します。
ここではモジュールモードで実行するため、「-demo」を「-module」に変更してます。
.\bin\windows\julius.exe -C main.jconf -C am-gmm.jconf -module -charconv utf-8 sjis
実行すると画像のような表示になります。
画像の下部に表示されている「10500」がポート番号ですね。
コマンドプロンプトでJuliusを実行できたら、最後に用意したPythonファイルを実行するだけです。
Juliusの音声認識システムを使ってみる
JuliusとPythonファイルを実行したらパソコンのマイクに向かって話しかけてみます。
話しかけるとターミナルに認識された単語や文章が表示されます。
認識された言葉がPyCharmのターミナルに表示されました!
Juliusを動かしてみた感想
簡単にPythonで音声認識システムができました!
ちゃんと言葉を認識できているので面白いです。
精度に関しては単語によって微妙な感じも否めませんが、途中から「滑舌の問題???」と思うようにしました。
しかし、いろいろと試して認識されにくい単語や音がありそうです。
Julius以外の音声認識ライブラリである、SpeechRecognitionライブラリも使ってみました。
正直Juliusよりも簡単で精度もよさそうな感じでしたので、気になったら試してみてください!