ラズパイで音声認識(Juliusインストールからソケット通信まで解説)

RaspberryPi
スポンサーリンク

本記事では、音声認識エンジンJuliusのインストールからPythonを使って動かすところまで詳しく解説します!使用するJuliusのバージョンは4.5です。

他の方々のサイトを参考にしながら行ったのですが、4.5でやっている方がいなかったので実装してみました。その際、つまづいた点などもありましたので詳しくお伝えしますね。

Juliusとは

Julius は,音声認識システムの開発・研究のためのオープンソースの高性能な汎用大語彙連続音声認識エンジンです. 数万語彙の連続音声認識を一般のPCやスマートフォン上でほぼ実時間で実行できる軽量さとコンパクトさを持っています.(Julius公式サイトより)

名古屋工業大学や京都大学などが研究・開発を行い、日々進化を遂げている音声認識エンジンです。

現在(2020年10月)Juliusの最新バージョンは4.6です。

ですが、ディクテーションキットの最新バージョンが4.5だったのでJulius4.5で音声認識を行っていきます!

音声認識をしよう!

使用する機器

今回使用するのは

  • RaspberryPi 3B+
  • USBマイク

の2つです。私が使用したマイクは珍しい形のマイクでしたが、感度はかなり良かったです!ぜひ試してみてください!

Amazon.co.jp: LABISTS Raspberry Pi 3 Model b+ ラズベリーパイ 3 b+ MicroSDHCカード32G/NOOBSシステムプリインストール/カードリーダ /5V/3A スイッチ付電源/高品質HDMIケーブルライン/ヒートシンク/簡単に取り付けケース/日本語取扱説明書/24ヶ月保証: パソコン・周辺機器
Amazon.co.jp: LABISTS Raspberry Pi 3 Model b+ ラズベリーパイ 3 b+ MicroSDHCカード32G/NOOBSシステムプリインストール/カードリーダ /5V/3A スイッチ付電源/高品質HDMIケーブルライン/ヒートシンク/簡単に取り付けケース/日本語取扱説明書/24ヶ...
Amazon | PLOY pc マイク usb マイク マイクロホン 卓上マイク usb会議高感度 360°全指向性 拡張可能 小型集音マイク ビデオチャット VoIP通話対応 集音パソコン/PS4/Switch/web会議 (スピーカーない) | ploy | PC用マイク 通販
PLOY pc マイク usb マイク マイクロホン 卓上マイク usb会議高感度 360°全指向性 拡張可能 小型集音マイク ビデオチャット VoIP通話対応 集音パソコン/PS4/Switch/web会議 (スピーカーない)がPC用マイクストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン...

音声設定

まず、マイクの音声設定を行います。

以下のコマンドをターミナルに入力してUSBが接続されていることを確認します。わからない場合は抜き差しして確認してみてください。

デバイスの優先順位を確認します。以下のコマンドを入力してください。

0の方が優先度が高くなるので、snd_usb_audioを0に変更します。以下の操作を行ってください。

USBの優先度が上がっていることを確認できました!

こうならない場合は再起動してみてください。

次に、初期設定を行っていきます。カード・デバイス番号を確認するために以下のコマンドを入力してください。

デバイスの登録をします。

これでUSBマイクの設定はできたのですが、毎回export ALSADEV=”plughw:0,0″を入力しないといけません。以下の操作をして、起動時に常にこの設定になるようにします。

必要なライブラリのインストール

Juliusでサウンド、およびマイクを使用するために、ALSAサウンドドライバなどの必要なモジュールをインストールします。

LSAとはAdvanced Linux Sound Architectureの略称で,Linuxにおける高機能なサウンドシステムを提供するためのソフトウェア群です。

マイクの録音確認

マイクで録音できるか確認します。以下のコマンドを入力してください。

無事、再生されれば確認完了です!

Juliusのセットアップ

下記のようなディレクトリになるよう、インストールしていきます。

説明する手順に従えば大丈夫です!

Juliusをインストールします。コンパイルには少し時間がかかります。

makeでエラーが出た

実際にコンパイルする際このようなエラーが出ました。

make: *** [Makefile:57: libsent] エラー 1

この場合はもう一度./configure –with-mictype=alsaを実行してみてください。それで解決されると思います。

  • sudo apt-get install libsdl2-dev
  • sudo apt-get install libc6-dev

それでもできなければこの二つを試してみてください!

ディクテーションキットをダウンロード、解凍します。これも時間がかかりますので、コーヒーでも飲みながら待ちましょう!

Juliusで音声認識

いよいよ音声認識です!ディレクトリに注意して、下記コマンドを実行してください!

上の画面になったら適当に話しかけてみましょう!

「おはようございます」などの簡単な言葉ならしっかりと聞き取ってくれます。

「生麦生米生卵」などのように、少し長めの文章になると精度が落ちるようです。

他のサイトで言われているように、かなり精度が悪いというわけでもなさそうです。辞書を使用しなくても簡単な言葉ぐらいなら余裕で認識できると思います!

Pythonで音声認識

音声認識で認識した音声を使って、Pythonで何かしたいですよね。

今回は簡単に、「特定の音声を認識したらprintでターミナルに表示する」という簡単な実装をしてみます。

Juliusをモジュールモードで起動すると、ソケット通信を介してデータをやりとりすることができます。

モジュールモード時のターミナル

ソケット通信とは

Juliusをモジュールモードで起動することで,Julius を音声認識サーバーとして動かすことができる.モジュールモードで起動された Julius は,TCP/IP 経由でクライアントと接続し,クライアントへの認識結果や音声イベントの送信,およびクライアントからの動作制御を行うことができる.クライアントとの接続は一対一を想定しており,複数クライアントの同時接続には対応していない.(Juliusbookより)

サーバー(Julius)、クライアント(Python)としてデータのやり取りを行うということです。

一連の流れを図で示すとこんな感じになります。

XMLのデータはこんな感じになっています。

Juliusbook第10章より

ソースコード

ファイル名を「julius.py」として保存します。Piの下に保存しておきましょう。

コードの内容はコメントを参照してください。

実際に動かしてみる

ターミナルを2つ起動します。一方はモジュールモード(サーバー)、一方はPython用(クライアント)です。

Juliusモジュールモード起動は、以下のコマンドで行います。-moduleを最後につけるだけです。

実際に話しかけてみます!

おわりに

辞書などを作成していないのですが、思ったより反応はよかったです。しかし、2文字で設定した「だれ」や「うた」などは認識してくれませんでした。その代わり「誰ですか」、「歌ってください」のように話しかければしっかりと認識してくれました!

独自辞書を作成すれば、かなりの確率で認識してくれそうな予感です!

これは応用しがいがありそうですね。声でLEDをつけたり、カメラを動かしたりできそうです。私もSiriっぽいものをこれから作成していきたいと思っています!

今回はここまでです。最後までありがとうございました!

参考サイト

ありがとうございました。

コメント

タイトルとURLをコピーしました