忍者ブログ

設備のマニアどっとこむ

IoT開発、設備・DIYのブログ!

Juliusの辞書ファイルで音声認識の精度を上げた話

以前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回路で設備と組み合わせて「開けゴマ」的なことができるかもです。
※アドバイス頂いた方ありがとうございました。










拍手[1回]

PR

コメント

翻訳(Translate)

プロフィール

HN:
佐々木 雅史
性別:
男性
自己紹介:
2021年 ラズパイ、M5stackを用いたIoT開発を専門で受注するアルティメンテを設立。代表を務める。
・2020年ラズパイコンテスト優良賞受賞
・設備系資格多数(電験3種、消防設備士甲4、2級ボイラー技士、危険物乙4、電工2種、技術士補(電気・電子)、エネ電、フォークリフトなど)

AD

カレンダー

02 2024/03 04
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31