Help us understand the problem. What is going on with this article?

My Alexa の知見4 Generating Wake Word for only you - オリジナルなwake wordの作り方 -

More than 3 years have passed since last update.

はじめに

この投稿は私がラズパイで自作Alexaを開発した知見を投稿するシリーズです。
同じ現象に当たった時の助けになればいいなと思ったので、始めることにしました。

Wake word とは?

デバイスがAVSにリクエストを送るトリガーになる特定の単語のことです。

alexa, amazon, echo, Computer,

前提条件

Alexa Enabled なオリジナルのデバイスにのみ適用できます。
Amazon Echo, Dot, Tapなど、Amazon 純正のデバイスは上の単語リストから選ぶことになります。

alexa client は、例によって AlexaPiを使います。

alexa pi の構成

IMG_2927.jpg

ざっくりしていますが、ユーザーが何かを発話したときに、

  1. Detectorでwake wordを判定
  2. WakewordだったらDeviceに引き渡して録音
  3. 録音した音声をAVSに投げる

といった感じで処理しています。

Detector

AlexaPi では、Snowboy という hot word detection ライブラリを使っています。

Snowboy における hot word の検知のやりかた

AlexaPi では、Snowboyのコードの一部を改造して利用していますが、考え方は同じです。

ソース

以下のソースは、説明のため一部コメントを足しています。

wakeword_detection.py
:

# 1. 検知するホットワードファイルのリストを与えます。
models = ["resources/alexa.umdl", "resources/Stop.pmdl", "resources/Wakeup.pmdl]

# 2. ホットワードを検知したときに呼ばれるコールバックを登録します。(それぞれのコールバックの中身は省略しています)
callbacks = [alexa, go_back, go_out, stop]

# 3. snowboyインスタンスを生成するときにモデルのリストを渡します。
detector = snowboydecoder.HotwordDetector(models, sensitivity=0.5, recorder=recorder)
alexa_device = Device(recorder=recorder)

:

# main loop
# 4. 検知を開始するときにコールバックのリストを渡します。
detector.start(detected_callback=callbacks,
               interrupt_check=interrupt_callback,
               sleep_time=0.03,
               sensor_detect_callback=someone_detected)
:

オリジナルのホットワードファイルとコールバックをsnowboyに渡せば、検知してくれるというわけです。

hotword の作り方

1: https://snowboy.kitt.ai/ にアクセスします。(要サインアップ)

スクリーンショット 2017-02-15 16.15.27.png

2: Create Hotword を選択します。

スクリーンショット 2017-02-15 16.16.29.png

3: ホットワードの言語を選びます。(日本語もできます)

スクリーンショット 2017-02-15 16.16.57.png

4: 3回録音します。
スクリーンショット 2017-02-15 16.17.14.png

5: 検知できるかテストします。

スクリーンショット 2017-02-15 16.18.03.png

検知できたら、ファイルをダウンロードします。
(例では、wake up.pmdl というファイルを作成しました。)

あとは、このファイルをデバイス側にインプリメントすれば、"wake up" を wake wordにすることができます。

wake word の検知率を上げる

snowboy は、1回自分がサンプリングして作っただけでは、まさに自分用です。
検知率を上げるには、キーワードをいろんな人に喋ってもらんて、サンプリングされることが必要になります。
2000人がサンプリングすれば、一般的なワードファイルとして昇格します。(後述)
いろんな人にサンプリングしてもらえばもらうほど、検知率が高くなるということです。

すでに存在するワードにサンプリングを追加する方法を以下に記載します。(作るときとあまりかわりません。)

  1. https://snowboy.kitt.ai/ にアクセスします。(要 サインアップ)
  2. サンプリングするホットワードを探します。

スクリーンショット 2017-02-21 16.40.20.png

ホットワードのリンクをクリックします。

3.サンプリングします

Record and download the modelをクリックします。

スクリーンショット 2017-02-21 16.46.56.png

あとは、作成時と同じです。3回録音ー>テストー>ダウンロードする。

補足

ホットワードのファイル拡張子には、umdlpmdl があります。

umdl

様々な人が話したホットワードをリスティングしているファイルです。alexa でホットワードを検知させたい場合は、自分で録音するより、alexa.umdl があるのでこちらをつかいましょう。

pmdl
自分で作成した独自のホットワードです。
作成例のところにもありましたが、gender(性別)とage group(年齢の範囲)を選択する必要があります。自分以外にもホットワードを検知させたいような場合、何人もの人に話してもらって、いくつかのパターンでホットワードファイルを作ることになります。

最後に

ホットワードを自分で作ることができるようになると、alexaとまた仲良くなれた気がしていいですね。
ぜひ、デバイスつくるなら、やってみてはどうでしょう??

haruharuharuby
2016年からフリーランサー。 Alexa Champion AlexaとAWSとRubyとRubyOnRailsが大好き。 前職(〜2015年)は、.net(C#)デベロッパ 兼 社内のインフラエンジニア。 綺麗なコードと新しいことはなんでも好き。
https://hugtech.io
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした