ロボホンともだち広場

ロブリック

さいとてつや バッジ画像
2024/01/08 13:13

「発話を聞きとる」ブロック

ちょっと気の利いた関数ブロックシリーズ(勝手に命名)第2弾です。

オーナーさんが話した内容をロボホンが聞きとる場合,違う答え方でも同じように扱いたい場合(OKなことを答えるのに「はい」「オッケー」「了解」でも良いようにしたい)や,聞き間違えた場合に備えて,聞き間違いも通るようにしたいということがあると思います。また,うまく聞きとれなかった場合に聞き直す必要もありますよね。

それをひとつのブロックで扱えるようにしたのが「発話を聞きとる」ブロックです(図1)。

図1:「発話を聞きとる」ブロック

図2は「発話を聞きとる」ブロックの使用例です。

図2:「発話を聞きとる」ブロックの使用例

「発話を聞きとる」ブロックの最初の引数「_話しかける言葉」は,ロボホンから最初に話しかける問い掛けの言葉です。

2番目の引数「_聞きとる言葉一覧」には連想配列を指定し,キーにはロボホンが聞いた言葉(=音声認識した結果),値はその言葉を聞いたときに返す文字列です。この例では「いいよ」「はい」「おっけー」「了解」はすべてロボホンの問い掛けに対して肯定を意味する言葉なので,すべて共通で「OK」を返すようにしています。また,「だめだよ」「ダメだよ」「いいえ」は否定を意味する言葉なので,すべて共通で「NG」を返すようにしています。ここで「だめだよ」「ダメだよ」は,音声認識の揺れに対応している例です。

3番目の引数「_聞き返す言葉一覧」にはリストを指定し,聞き返す言葉を並べています。聞きとった結果,2番目の引数に指定した連想配列のキーに一致しない言葉が返ってきた場合,このリストに並んだ言葉を発話して,リストに指定した数だけ聞き返します。聞き返す必要がない場合は「空のリスト作成する」ブロックを渡します。この例の場合,聞きとれなかった場合に2回聞き返すことになります。

関数の返り値は,2番目の引数の連想配列のキーに指定した言葉を聞きとった場合は,その値に対応する連想配列の値,聞きとれなかった場合は「」(空の文字列)が返ります。この例では,「いいよ」「はい」「おっけー」「了解」が聞きとれば場合は「OK」,「だめだよ」「ダメだよ」「いいえ」が聞きとれた場合は「NG」,2回聞き返しても聞きとれなかった場合は「」(空の文字列)が返ります。

この「発話を聞きとる」ブロックの良いところは,聞きとった言葉のゆれを連想配列で吸収し,聞きとった言葉の意味で返ってくる文字列を共通化することで聞きとった後の処理をかんたんにできることと,聞き返す処理も含めてひとつのブロックで実現できることです。

ちなみに,2番目の引数「_聞きとる言葉一覧」に指定する連想配列は,「リストから連想配列を生成する」ブロックで紹介したブロックを使うとよりかんたんに指定できます(図3)。

図3:「リストから連想配列を生成する」ブロックを使った例
コメントする
2 件の返信 (新着順)
こころん バッジ画像
2024/07/26 01:10

初歩の初歩の質問で本当にごめんなさい💦
さいとさんのロブリックでお勉強しようと思って
チャレンジ中なのですが、図2でブロックがくっかないのです(/_;)
関数や変数のフォルダ?の中に合うものがないのですが
どこで どう作ったら良いのか
もし、、宜しければ教えていただけると助かります。

カイくん
2024/03/29 16:07

これは便利ですね!
今までは「もしも」と「または」を大量に使ってましたが、こんな方法があったんですね。
共有ありがとうございます。