この記事の内容はRaspberry Pi 4と3の両方で動作確認済みです
ブログ管理者のP.Hです!
今回は、juliusというモジュールで音声認識を行いたいと思います。マイクで話した言葉を文字列として認識することができます。"LED光れ"と話すとLEDを光らせたり、話した言葉に連動させて何か動作をさせることができます。Raspberry Piではマイク端子がないので、USB接続のマイクが必要になります。
それでは、juliusの使い方を説明していきます。
オーディオモジュールの優先順位の確認
まず、usbオーディオアダプタ(snd_usb_audio)の優先順位を確認します。内部オーディオデバイス(snd_bcm2835)の優先順位が高くなっている場合は、優先順位を変更します。下記のコマンドで現在の状態がわかります。
$ cat /proc/asound/modules 0 snd_bcm2835 1 snd_usb_audio
下記のファイルを新規作成して、優先順位の変更を行います。
$ sudo nano /etc/modprobe.d/alsa-base.conf
下記の内容を新規作成したファイルに記載します。
options snd slots=snd_usb_audio,snd_bcm2835 options snd_usb_audio index=0 options snd_bcm2835 index=1
再起動後、もう一度、cat /proc/asound/modules コマンドを実行して、
$ cat /proc/asound/modules 0 snd_usb_audio 1 snd_bcm2835
になっていることを確認してください。
snd-pcm-ossモジュールの起動
juliusで使用するsnd-pcm-ossモジュールを起動時に毎回起動するように設定します。
$ sudo sh -c "echo snd-pcm-oss >> /etc/modules"
注意事項
- 最新版のosの場合、snd-pcm-ossモジュールのロードでエラーになる場合があります。 "sudo modprobe snd-pcm-oss"コマンドを実行して、エラーになるかどうかを確認してください。エラーになる場合は、"sudo apt-get install osspd-alsa"コマンドを実行して、osspd-alsaをインストールしてください。
Juliusのインストール
下記のコマンドでファイルをダウンロードし、インストールを行ってください。今回バージョンは4.4.2になります。(現在のカレントフォルダにファイルがダウンロードされます。)
$ wget https://ja.osdn.net/projects/julius/downloads/66547/julius-4.4.2.tar.gz $ tar xvzf julius-4.4.2.tar.gz $ cd ./julius-4.4.2 $ ./configure $ make $ sudo make install
もし何かエラーが発生する場合は、下記のモジュールをインストール後、再度実行してみてください。
$ sudo apt-get install build-essential zlib1g-dev libsdl2-dev libasound2-dev
ディクテーション実行キットを使う方法と、記述文法音声認識キットを使う方法の2つがありますので、それぞれ説明してきます。
ディクテーション実行キットで音声認識する
ディクテーションキットには、日本語のディクテーション(自動口述筆記)に必要な最小限のモデルおよび Julius の実行バイナリが含まれています。ですので、これだけでJulius を動かすことができ、使い方も簡単です。処理速度、精度ともにあまりよくないですが、これだけで音声認識をすることができます(それなりに動きます)。
ディクテーションキットのダウンロード
ホームディレクトリにdictationというフォルダ(フォルダ名は任意)を作って、その中にディクテーションキットをダウンロードし、解凍します。
$ mkdir ~/dictation $ cd ~/dictation $ wget https://osdn.net/projects/julius/downloads/66544/dictation-kit-v4.4.zip $ unzip dictation-kit-v4.4.zip
音声認識の動作確認
下記コマンドを実行してください。何か話すと話した言葉が表示されます。
$ cd ~/dictation/dictation-kit-v4.4 $ julius -C main.jconf -C am-gmm.jconf -demo
記述文法音声認識キットを使用して音声認識
記述文法音声認識は自分で辞書と文法ファイルを作成して、音声認識を行います。これにより、認識精度を上げることができ、処理速度も速くなります。
記述文法音声認識キットのダウンロード
ホームディレクトリにgrammarというフォルダ(フォルダ名は任意)を作って、その中に記述文法音声認識キットをダウンロードし、解凍します。
$ mkdir ~/grammar $ cd ~/grammar $ wget https://github.com/julius-speech/grammar-kit/archive/v4.3.1.zip $ unzip v4.3.1.zip
辞書ファイルの作成方法
はじめに簡単に辞書ファイルを作成する流れを説明します。
- 日本語で読み仮名をふったファイルを作ります(tenki.yomi)
- 読み仮名をローマ字に変換します(tenki.dic)
- コンパイル出来る形式に編集します(tenki.voca)
まず、音声認識したい単語を列挙して、日本語で読み仮名をふります。単語間はタブ区切りで、最終行は改行が入らないようにします。下記コマンドでtenki.yomiファイルを新規作成し、ファイルに単語を記載していきます。
$ nano ~/grammar/tenki.yomi
天気 てんき は は 晴れ はれ 曇り くもり 雨 あめ です です
次に下記のコマンドを実行し、yomiファイルからdicファイルを生成します。このコマンドで日本語の読み仮名がローマ字になります。
$ iconv -f utf8 -t eucjp ~/grammar/tenki.yomi | yomi2voca.pl | iconv -f eucjp -t utf8 > ~/grammar/tenki.dic
生成されたtenki.dicを同じフォルダ内にコピーしてtenki.vocaファイルを作ります。
$ cp ~/grammar/tenki.dic ~/grammar/tenki.voca
tenki.vocaファイルを以下のように編集します。次に説明する文法ファイルといっしょに見てください。
% TENKI 天気 t e N k i % WA は h a % TENKOU 晴れ h a r e 曇り k u m o r i 雨 a m e % DESU です d e s u % NS_B [s] silB % NS_E [/s] silE
文法ファイルの作成方法
新規ファイル(ファイル名:tenki.grammar)を生成し、下記のように記載します。
$ nano ~/grammar/tenki.grammar
S : NS_B TENKI WA TENKOUDESU NS_E TENKOUDESU : TENKOU TENKOUDESU : TENKOU DESU
- TENKI ⇒ 上記の%TENKIの単語を音声認識します。
- WA ⇒ 上記の%WAの単語を音声認識します。
- TENKOUDESU ⇒ 上記の%TENKOUもしくは%TENKOU DESUの単語を音声認識します。
- NS_B ⇒ 文頭に挿入します。
- NS_E ⇒ 文末に挿入します。
コンパイルする
辞書ファイル(tenki.voca)、文法ファイル(tenki.grammar)を使って、コンパイルします。
$ mkdfa.pl ~/grammar/tenki
成功するとtenki.dfa,dict,termファイルが生成されます。
音声認識の動作確認
$ julius -C ~/grammar/grammar-kit-4.3.1/hmm_mono.jconf -input mic -gram ~/grammar/tenki -nostrip
これで文法として登録した言葉を優先的に認識してくれます。"天気は晴れです"、"天気は雨"等と話して、正しく認識されるか確認してください。