Pythonを使って音声認識システム作れないか、調べてみるとJuliusというモジュールで簡単にできるらしい
今回は簡単にWindows環境でPythonを使って音声認識システムを起動させるまでの方法をまとめてみました。
Juliusとは
京都大学などのチームが開発したオープンソースの音声認識ライブラリ。
「Julius(ジュリアス)」は独自の言語辞書を登録させることもできるらしく、独自開発が楽しくなりそうです。
詳しい情報はJuliusのGitHubページを参照。
実装手順
今回はWindows環境でJuliusを起動させるところまでをまとめます。
実装の手順は以下の流れで進めます。
-
Juliusのダウンロード
-
Juliusをコマンドプロンプトで動かす
-
Pythonの準備
-
PythonとJuliusを接続する
-
Juliusの音声認識システムを使ってみる
Juliusのダウンロード
まずは公式サイトからJuliusをダウンロードします。
以下のリンクから飛んで「ディクテーションキット(dictation-kit)」を選択。
「ディクテーションキット 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」と表示されているので「おはよう」「こんにちは」と話してみると認識した言葉が表示されました。
Pythonの準備
次にPythonとJuliusを接続するためにファイルを作成します。
import socketimport timeimport 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側の準備ができたので接続していきます。
まず、コマンドプロンプトで以下のコマンドを入力して実行します。
.\bin\windows\julius.exe -C main.jconf -C am-gmm.jconf -module -charconv utf-8 sjis
モジュールモードにして実行するため、上で試したコマンドの「-demo」を「-module」に変更してます。
実行すると画像のような表示になります。
画像の下部に表示されている「10500」がポート番号ですね。
コマンドプロンプトでJuliusを実行できてら、最後に用意したPythonファイルを実行するだけです。
Juliusの音声認識システムを使ってみる
JuliusとPythonファイルを実行したらパソコンのマイクに向かって話しかけてみます。
話しかけるとターミナルに認識された単語や文章が表示されます。
認識された言葉がpycharmのターミナルに表示されました!
Juliusを動かしてみた感想
簡単にPythonで音声認識システムができました!
ちゃんと言葉を認識できているので面白いですね!
精度に関して、発する単語によっては微妙な感じも否めませんが、途中から「活舌の問題???」と思ってしまいました。
しかし、いろいろ試して認識されにくい単語や音がありそうです。
Juliusの面白い点として、この精度を上げる方法がいくつかあるみたいです。
今後はそれらも試しつつ、面白い活用方法、使い方を模索していきます!