Raspberry Pi & Python 開発ブログ ☆彡

Raspberry PiとPythonの基本的な使い方をわかりやすく解説。初心者、入門者必見!!

Raspberry Piでjuliusを使って音声認識をする

julius

この記事の内容は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

辞書ファイルの作成方法

はじめに簡単に辞書ファイルを作成する流れを説明します。

  1. 日本語で読み仮名をふったファイルを作ります(tenki.yomi)
  2. 読み仮名をローマ字に変換します(tenki.dic)
  3. コンパイル出来る形式に編集します(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

これで文法として登録した言葉を優先的に認識してくれます。"天気は晴れです"、"天気は雨"等と話して、正しく認識されるか確認してください。