福野泰介の一日一創 - create every day

オフラインでフリーで使える音声認識 Julius、声で操作するロボを自作しよう

2018/03/19
#megane #AI #python 

APIを使った音声認識の精度はなかなか高いのですが、ネット接続が必須なので電力的やコスト的にまだ合わない場面多々。

そこで、Interface 2018.4号で発見、オフラインかつフリーで使える音声認識エンジン「Julius
読みは、ジュリアス、でした、ユリウスではなく(Thanks < 青木さん

事前に音声調整をすることなく使え、認識精度もそこそこいい感じ。辞書を自分で作って、その中から認識させることができて使い勝手良し。 ラズパイ0や小型でオフラインのA+などにいれて、IchigoJam連携するモジュールにするのにもいい感じそう!


「テレビ付けて」を認識した様子 on Mac

Juliusのインストールから、独自語彙認識させるまでのメモ (for Mac)
インストール

git clone https://github.com/julius-speech/julius.git cd julius ./configure --enable-words-int make sudo make install cd ~ mkdir -p sandbox/julius-kits cd sandbox/julius-kits wget -O dictation-kit-v4.3.1.tar.gz https://github.com/julius-speech/dictation-kit/archive/dictation-kit-v4.3.1.tar.gz wget -O grammar-kit-4.3.1.tar.gz https://github.com/julius-speech/grammar-kit/archive/v4.3.1.tar.gz tar xvf dictation-kit-v4.3.1.tar.gz tar xvf grammar-kit-4.3.1.tar.gz mv dictation-kit-dictation-kit-v4.3.1 dictation-kit-v4.3.1 cd ~/sandbox/julius-kits/grammar-kit-4.3.1/bin/linux/ ln -s `which mkfa` ln -s `which dfa_minimize`

独自語彙設定

mkdir -p ~/sandbox/test cd ~sand/box/test cat > test.yomi % TARGET IchigoJam いちごじゃむ テレビ てれび アンプ あんぷ ウーハー うーはー LED えるいーでぃー % ACTION つけて つけて 消して けして ON おん OFF おふ % WO を お % NS_B [s] silB % NS_E [s] silE

独自文法設定

cat > test.grammar S : NS_B TARGET ACTION NS_E S : NS_B TARGET WO ACTION NS_E

独自語彙をJulius用に変換しておく

iconv -f utf-8 -t eucjp test.yomi | yomi2voca.pl | iconv -f eucjp -t utf-8 > test.voca perl ~/sandbox/julius-kits/grammar-kit-4.3.1/bin/linux/mkdfa.pl test

独自語彙を設定して、音声認識エンジンを動かすスクリプト

cat > julius-server.sh julius -C ~/sandbox/julius-kits/grammar-kit-4.3.1/hmm_mono.jconf -input mic -gram test -module &

音声認識エンジンに接続して、認識したコマンドを受け取るスクリプト(Python3)

cat > julius-client.py #!/usr/bin/env python3 import socket client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(("127.0.0.1", 10500)) sockfile = client.makefile() while 1: line = sockfile.readline() print(line)

試しに、音声認識エンジンを動かし、認識させてみる

sh julius-server.sh python3 julius-client.py

client.sendで、認識を一時中止したり、認識語彙を切り替えてYES/NOのみを待ったりといろいろできて、便利そう!
モジュールモードについて - Julius

links
- 声だけでプログラミング! 耳がついたスマートIchigoJamの作り方

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / high-res profile image