サブタイトル:ハロウィンなんだし、おじさんも鬼殺隊に入って「全集中」したいんじゃ!
先日書いたエントリーの続きになります。前回のエントリでは、Snowboy
をRaspberryPi
上から動作設定を行うというものでしたが、今回はHotwordの音声認識を自分好みのものに変更してみようと思います。これで、自由な呼びかけができるようになります。
参考
SnowboyでHotwordのカスタマイズモデルを作成する
Snowboy
は前回のエントリーを見てもらえれば分かる通り、高速で軽量なHotwordの検知を行ってくれますが、オリジナルのサイトにいくとこのHotwordを自分のオリジナルのものにすることができます。検知モデルを作成できるといえばいいでしょうか。
まずは、オリジナルサイトにアクセスを行います。
オリジナルモデルの作成はそのままではできません。Webサイトの右上にある【Log in】ボタンをクリックして、ログインを行う必要があります。
ログインは以下のサービス、SNSに対応しています。今回はGitHub
を使用してログインを行います。【Login with GitHub】ボタンをクリックすると以下のような画面に遷移します。
ユーザーネーム(またはメールアドレス)とパスワードの確認のダイアログが表示されるので、入力を行い、【Sign in】ボタンをクリックします。
すると、Snowboy
にログイン状態表示が行われます。ログインをすると、Hotword Libraryのリストが表示されていると思います。
既存に生成されているHotwordを探す
Hotword Libraryは以下のようになっています。すでにほかのユーザによって登録されているものが各言語に分けられて登録がされています。登録済みのHotwordはモデル生成時のトレーニングの回数がかなり少ないので認識率という意味では少し物足りないのですが、そんなにたくさん話して認識するのもつらいので、ある程度のレベルでよければこちらを使うのもよいかなと思います。
使用する言語が決まっているようであれば、リストのLanguageフィルタを使用することで検索の絞り込みができます。
言語の種類もかなりあります。もちろん日本語にも対応しているので助かります。
日本語で検索の絞り込みを行うと以下のように表示が行われます。結構な数がすでに登録されていますが、自分が使いたいものがあるかといえば必ずしもそうとはなりません。
例えば、Hotwordを「ドロン」というもので検索をしてみると、すでに登録済みでありました。
これを使用する場合にはリストの右側のアイコンをクリックしてダウンロードを行うことができます。ダウンロードするとpmdlファイル
がダウンロードされます。こちらをsnowboy
のdemo.py
などの引数として渡すことですぐにでも使用することができます。
新規にHotwordモデルを作成する
では、新規にHotwordを作成してみます。Hotwordリストの表示の上部に【Create Hotword】ボタンがあるのでクリックします。
すると、表示が変更し、New Hotword
を作成する画面にかわります。
ここでは以下のものを登録する必要があります。
- Hotword Name … ホットワードの名前
- Language … 言語
- Personal Comment(Optional) … コメント(必須ではない)
今回は、いろいろ流行っているような「全集中
」というフレーズをHotwordにしてみました。
Hotword Nameを日本語表記にしてもいいのですが、あとでダウンロードしたpmdlファイル
の名前が日本語になってしまうので、今回はローマ字にしてあります。日本語名でも機能的には全く問題はありません。
入力が終わったら、【Record my voice>】ボタンをクリックします。
クリックすると、検出モデルを生成するための音声を録音する処理画面になります。この画面ではPCの接続されたマイクから該当するHotwordの音声を録音しモデルを作成していくことになります。画面の大きな円の下にある【Record】を押して、Hotwordを発声します。
3回同じことを繰り返して行うと生成の準備ができます。先ほどはマイクへ話しかけを行っていましたが、音声ファイルをuploadをしても同じように処理を行うことができます。準備ができると【Test the model】ボタンがアクティブになるので、クリックを行います。
最後にTest the model
の画面になり、生成したモデルの動作を確認することができます。画面の左側には認識の最適化項目が出てきます。ここで話者の以下の項目を指定することができます。
- gender … 男女
- age group … 年齢層
入力したら【Run the test】ボタンをクリックすると認識テストを行うことができます。
ここで、先ほど登録したHotwordを話すと認識がうまくいくとピン!と音声が鳴ります。何度か発話をして認識されるか確認しましょう。わりと甘目なので、少しぐらい変な感じで発話をしても認識はしてくれると思います。ただ、認識率が悪い場合にはもう一度生成をし直したほうが無難です。(モデル生成時に雑音が入っていることも考えられます)
Hotwordの認識に問題がないと思ったら、【Save and download】ボタンをクリックして、登録とモデルのダウンロードを行います。
再度検索すると登録済みのHotword Libraryにも登録されているのがわかります。
これでオリジナルのHotword検出ができるようになります。では、RaspberryPi
で今作成したモデルで動作するかチェックしてみます。
RaspberryPiでSnowboyを使ってオリジナルのHotword検知を行ってみる
先ほどダウンロードしたpmdlファイル(zensyuucyuu.pmdl)
をRaspberryPi
にコピーしておきます。コピー先はGitHub
でCloneした、Snowboy
ディレクトリのresource/model/
にコピーします。
コピーができたらdemo.py
を実行してHotwordの認識を確認します。
$ cd ~/snowboy/examples/Python3/
$ python3 demo.py ./resources/models/zensyuucyuu.pmdl
※実行時のモデルファイルの指定がdemo.pyからの指定になっていますが、シンボリックリンクされて先ほどのコピー先と同じになっているので問題はありません。
これでHotwordの認識はうまくできました。こんな声がしゃがれたおじさんも「全集中
」できるようになりました。
Hotword検出
調子に乗って100均素材でDXでない日輪刀を作ってみました。
あとは、pythonのプログラムを修正すれば、「全集中
」を認識した後の音声の変更もできます。
音声も変更
RaspberryPiとSnowboyを使ってDXでない日輪刀をつくってみた。
おわりに
RaspberryPi
にSnowboy
を導入してオリジナルのHotword検知を行うことができるようになりました。簡単にオリジナル検出モデルも作成できる点は非常にいいですね。あと、認識が高速で、ネットワーク接続を必須としないのもうれしい利点です。ただ、簡単にモデルを作成できる反面、トレーニングなどはできていないので認識率はいまひとつかもしれません。もし認識率を高めるのであれば、モデル作成時の音声を大量に集めれば高めることは可能です。
あと、今人気のアニメグッズのDX日輪刀
の真似っこをしてみました。ちょっと気分上がりますね。