【RaspberryPi】Hot Word検出SnowboyでオリジナルのHot Wordを検知してみる(後編:オリジナルモデル作成)

サブタイトル:ハロウィンなんだし、おじさんも鬼殺隊に入って「全集中」したいんじゃ!

先日書いたエントリーの続きになります。前回のエントリでは、SnowboyRaspberryPi上から動作設定を行うというものでしたが、今回はHotwordの音声認識を自分好みのものに変更してみようと思います。これで、自由な呼びかけができるようになります。

参考

uepon.hatenadiary.com

SnowboyでHotwordのカスタマイズモデルを作成する

Snowboyは前回のエントリーを見てもらえれば分かる通り、高速で軽量なHotwordの検知を行ってくれますが、オリジナルのサイトにいくとこのHotwordを自分のオリジナルのものにすることができます。検知モデルを作成できるといえばいいでしょうか。

まずは、オリジナルサイトにアクセスを行います。

snowboy.kitt.ai

オリジナルモデルの作成はそのままではできません。Webサイトの右上にある【Log in】ボタンをクリックして、ログインを行う必要があります。

f:id:ueponx:20201031234942p:plain

ログインは以下のサービス、SNSに対応しています。今回はGitHubを使用してログインを行います。【Login with GitHub】ボタンをクリックすると以下のような画面に遷移します。

f:id:ueponx:20201101000422p:plain

ユーザーネーム(またはメールアドレス)とパスワードの確認のダイアログが表示されるので、入力を行い、【Sign in】ボタンをクリックします。

f:id:ueponx:20201101000428p:plain

すると、Snowboyにログイン状態表示が行われます。ログインをすると、Hotword Libraryのリストが表示されていると思います。

f:id:ueponx:20201101000650p:plain

既存に生成されているHotwordを探す

Hotword Libraryは以下のようになっています。すでにほかのユーザによって登録されているものが各言語に分けられて登録がされています。登録済みのHotwordはモデル生成時のトレーニングの回数がかなり少ないので認識率という意味では少し物足りないのですが、そんなにたくさん話して認識するのもつらいので、ある程度のレベルでよければこちらを使うのもよいかなと思います。

f:id:ueponx:20201101001140p:plain

使用する言語が決まっているようであれば、リストのLanguageフィルタを使用することで検索の絞り込みができます。

f:id:ueponx:20201101002153p:plain

言語の種類もかなりあります。もちろん日本語にも対応しているので助かります。

f:id:ueponx:20201101002215p:plain

日本語で検索の絞り込みを行うと以下のように表示が行われます。結構な数がすでに登録されていますが、自分が使いたいものがあるかといえば必ずしもそうとはなりません。

f:id:ueponx:20201101010817p:plain

例えば、Hotwordを「ドロン」というもので検索をしてみると、すでに登録済みでありました。

f:id:ueponx:20201101002303p:plain

これを使用する場合にはリストの右側のアイコンをクリックしてダウンロードを行うことができます。ダウンロードするとpmdlファイルがダウンロードされます。こちらをsnowboydemo.pyなどの引数として渡すことですぐにでも使用することができます。

f:id:ueponx:20201101003631p:plain

新規にHotwordモデルを作成する

では、新規にHotwordを作成してみます。Hotwordリストの表示の上部に【Create Hotword】ボタンがあるのでクリックします。

f:id:ueponx:20201101010646p:plain

すると、表示が変更し、New Hotwordを作成する画面にかわります。 ここでは以下のものを登録する必要があります。

  • Hotword Name … ホットワードの名前
  • Language … 言語
  • Personal Comment(Optional) … コメント(必須ではない)

f:id:ueponx:20201101015712p:plain

今回は、いろいろ流行っているような「全集中」というフレーズをHotwordにしてみました。 Hotword Nameを日本語表記にしてもいいのですが、あとでダウンロードしたpmdlファイルの名前が日本語になってしまうので、今回はローマ字にしてあります。日本語名でも機能的には全く問題はありません。

入力が終わったら、【Record my voice>】ボタンをクリックします。

f:id:ueponx:20201101015715p:plain

クリックすると、検出モデルを生成するための音声を録音する処理画面になります。この画面ではPCの接続されたマイクから該当するHotwordの音声を録音しモデルを作成していくことになります。画面の大きな円の下にある【Record】を押して、Hotwordを発声します。

f:id:ueponx:20201101015718p:plain

3回同じことを繰り返して行うと生成の準備ができます。先ほどはマイクへ話しかけを行っていましたが、音声ファイルをuploadをしても同じように処理を行うことができます。準備ができると【Test the model】ボタンがアクティブになるので、クリックを行います。

f:id:ueponx:20201101015726p:plain

最後にTest the modelの画面になり、生成したモデルの動作を確認することができます。画面の左側には認識の最適化項目が出てきます。ここで話者の以下の項目を指定することができます。

  • gender … 男女
  • age group … 年齢層

入力したら【Run the test】ボタンをクリックすると認識テストを行うことができます。

f:id:ueponx:20201101015730p:plain

ここで、先ほど登録したHotwordを話すと認識がうまくいくとピン!と音声が鳴ります。何度か発話をして認識されるか確認しましょう。わりと甘目なので、少しぐらい変な感じで発話をしても認識はしてくれると思います。ただ、認識率が悪い場合にはもう一度生成をし直したほうが無難です。(モデル生成時に雑音が入っていることも考えられます)

Hotwordの認識に問題がないと思ったら、【Save and download】ボタンをクリックして、登録とモデルのダウンロードを行います。

f:id:ueponx:20201101015738p:plain

再度検索すると登録済みのHotword Libraryにも登録されているのがわかります。

f:id:ueponx:20201101015741p:plain

これでオリジナルのHotword検出ができるようになります。では、RaspberryPiで今作成したモデルで動作するかチェックしてみます。

RaspberryPiでSnowboyを使ってオリジナルのHotword検知を行ってみる

先ほどダウンロードしたpmdlファイル(zensyuucyuu.pmdl)RaspberryPiにコピーしておきます。コピー先はGitHubでCloneした、Snowboyディレクトリのresource/model/にコピーします。

f:id:ueponx:20201101142047p:plain

コピーができたらdemo.pyを実行してHotwordの認識を確認します。

$ cd ~/snowboy/examples/Python3/
$ python3 demo.py ./resources/models/zensyuucyuu.pmdl

※実行時のモデルファイルの指定がdemo.pyからの指定になっていますが、シンボリックリンクされて先ほどのコピー先と同じになっているので問題はありません。

f:id:ueponx:20201101142522p:plain

これでHotwordの認識はうまくできました。こんな声がしゃがれたおじさんも「全集中」できるようになりました。

Hotword検出


Snowboyでホットワード検知

調子に乗って100均素材でDXでない日輪刀を作ってみました。

f:id:ueponx:20201101203048j:plain

あとは、pythonのプログラムを修正すれば、「全集中」を認識した後の音声の変更もできます。

音声も変更


RaspberryPiとSnowboyを使ってDXでない日輪刀をつくってみた。

おわりに

RaspberryPiSnowboyを導入してオリジナルのHotword検知を行うことができるようになりました。簡単にオリジナル検出モデルも作成できる点は非常にいいですね。あと、認識が高速で、ネットワーク接続を必須としないのもうれしい利点です。ただ、簡単にモデルを作成できる反面、トレーニングなどはできていないので認識率はいまひとつかもしれません。もし認識率を高めるのであれば、モデル作成時の音声を大量に集めれば高めることは可能です。

あと、今人気のアニメグッズのDX日輪刀の真似っこをしてみました。ちょっと気分上がりますね。

/* -----codeの行番号----- */