以前juliusを使って音声認識をやったのですが、いまいちで全然思った通りに認識しませんでした。
Raspberry pi japanというfacebookのコミュニティで相談したところ、「辞書ファイルを使ってみては?」との事でした。
実際に辞書ファイルを使ってみると驚くほどの認識、判別性能でした!!!
まずjuliues自体のインストール、設定は
こちらを参考にしてください。
Juliusがうまく動いたとして・・。
julius直下にdictというフォルダを作ります。 ※フルパスだとhome/pi/julius/dict
greeting.yomi というファイルを作ります。
中身は
つけて つけて
けして けして
あつい あつい
さむい さむい
といった具合なのですがスペースを使うとうまくいかないのでtabキーで間隔をあけてください。
完成後は下記コマンドでgreeting.phoneというファイルができます。
iconv -f utf8 -t eucjp ~/julius/dict/greeting.yomi | ~/julius/julius-4.4.2.1/gramtools/yomi2voca/yomi2voca.pl | iconv -f eucjp -t utf8 > ~/julius/dict/greeting.phone
greeting.phoneの中身は
つけて ts u k e t e
けして k e sh i t e
あつい a ts u i
さむい
s a m u i
というテキストができていれば成功です。さらにgreeting.grammarというファイルを作ります。
S : NS_B GREET NS_E
GREET : TSUKETE
GREET : KESHITE
GREET : ATSUI
GREET : SAMUI
これで辞書ファイルの準備は完了。ここから辞書ファイルを作るのですが、素直にカレントディレクトリを移動するやり方が無難です。
cd ~/julius/julius-4.4.2.1/gramtools/mkdfa
mkdfa.pl ~/julius/dict/greeting
このコマンドでgreeting.dfa greeting.dict greeting.termが作成されれば成功です!!
あとはjuliusコマンドに-gram ~/julius/dict/greeting をつけるだけです。
julius -C 任意の設定ファイル -gram ~/julius/dict/greeting -nostrip
この辞書ファイルのおかげで結果が4択になります!!
ついでにモジュールモードにしてLチカさせました。
julius -C 任意の設定ファイル -gram ~/julius/dict/greeting -module を動作させてから下記pythonコードを実行させます。
import time
import socket
import string
import json
import requests
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
host = 'ラズパイのIPアドレス'
port = 10500
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, port))
data = ""
while True:
data = client.recv(4096).decode('utf-8')
strTemp = ""
for line in data.split('\n'):
index = line.find('WORD="')
if index != -1:
line = line[index + 6:line.find('"', index + 6)]
if line != "[s]":
strTemp = strTemp + line
if strTemp != "":
print("結果:" + strTemp)
if strTemp == "つけて[/s]":
GPIO.output(17, True)
if strTemp == "けして[/s]":
GPIO.output(17, False)
これで「つけて」というと17番ピンと接続したLEDが点灯し、「けして」というとLEDが消えるプログラムができました。
今までの誤認識がウソのようです!!
これなら100V回路で設備と組み合わせて「開けゴマ」的なことができるかもです。
※アドバイス頂いた方ありがとうございました。