アルの備忘録

本棚が足りずにいいものを探しているがなかなか見つからないので困ってる系ブロガーの雑記ブログ

PythonでJuliusを動かして音声認識システム作ってみた!

PythonでJuliusを起動してみた

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
 
実行が成功すると画像のような感じになります。

コマンドプロンプトでJuliusを実行

 
「Please speak」と表示されているので「おはよう」「こんにちは」と話してみると認識した言葉が表示されました。

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側の準備ができたので接続していきます。

まず、コマンドプロンプトで以下のコマンドを入力して実行します。

.\bin\windows\julius.exe -C main.jconf -C am-gmm.jconf -module -charconv utf-8 sjis

モジュールモードにして実行するため、上で試したコマンドの「-demo」を「-module」に変更してます。

 

実行すると画像のような表示になります。

画像の下部に表示されている「10500」がポート番号ですね。

Juliusをモジュール用に起動する

 

コマンドプロンプトでJuliusを実行できてら、最後に用意したPythonファイルを実行するだけです。

 

Juliusの音声認識システムを使ってみる

JuliusとPythonファイルを実行したらパソコンのマイクに向かって話しかけてみます。

 

話しかけるとターミナルに認識された単語や文章が表示されます。

認識された言葉がpycharmのターミナルに表示されました!

pycharmでJuliusを使ってみた結果

 

Juliusを動かしてみた感想

簡単にPythonで音声認識システムができました!

ちゃんと言葉を認識できているので面白いですね!

精度に関して、発する単語によっては微妙な感じも否めませんが、途中から「活舌の問題???」と思ってしまいました。

しかし、いろいろ試して認識されにくい単語や音がありそうです。

 

Juliusの面白い点として、この精度を上げる方法がいくつかあるみたいです。

今後はそれらも試しつつ、面白い活用方法、使い方を模索していきます!