見出し画像

「Alexaエージェント、通信を開いて!」(OpenCV×VUI)

はじめに

この記事は OpenCV Advent Calendar 2018 の 18日目の記事です。

視覚情報を扱うOpenCVと聴覚情報を扱うスマートスピーカーを合わせて何かつくろう

私はここ数年仕事ではOpenCVなどで画像を扱ったりしていますが、プライベートではVUIを満喫しています。
昨年は 万年アドベントカレンダーを実装した(OpenCV+Deep Neural Network+RoBoHoN) という「OpenCV×ロボット」をしたのですが、今年は「OpenCV×スマートスピーカー」をすることにしました。

視覚情報を聴覚へ(情報量と「要約」)

定量的な情報量としては、

  視覚 >>>>(越えられない壁)> 聴覚

なので視覚情報を音声で伝えると、伝達される情報量は圧倒的に減りますが

  情報の要約

が必要なケースでは、俄然、メリットがでてきます。

メリットが出るケースの一例
(「この領域に”あの男”がいるのか/いないのかの2値の情報が重要なケース)

必要な情報について、情報の送り手と受け手が『前提』を共有している”ケースでメリットが出そうです。

前提『羽田空港駐車場の混雑具合が知りたい』

先日、都営バスの中でこんなステッカーをみかけました。(「羽田空港の駐車場は繁忙期に大変混雑します、数時間待ちもあるから気をつけて」の趣旨)

なるほど!と思いました。

(アドベントカレンダー投稿予定日当日が終わりそうな時間帯にこれを書いており(実装は終わってます…!)気が急くあまり、論旨が飛んで恐縮ですが)そこで、今回つくるものの前提を「羽田空港駐車場の混雑具合が知りたい」と置いて、このようなイメージのものを実装しました。
(スパイ映画の要素を混ぜ込んでいるのは、個人的趣味の「声に出して読みたい日本語」のひとつを実装したものです)

実装は、こんなかんじです(OpenCVのロゴをやっと出せました!)
OpenCV dnnライブラリを利用して、TensorFlow 等の DeepLearning プラットフォームなし、OpenCV のみで YOLOv3 での object detection をしています。

ライブカメラの映像はこちらのものを参照しており、二次利用は不可かとおもいます…。そのため、AWS公式審査に出してのAlexaスキルリリースには進めません。
プロトタイプとしてざっと実装し、動作させた動画がこちらです。

動画における要約情報の元画像はこちら(ゼロ時前で車がいない(不覚))

早朝や日中の状況は下記。

参考情報

実装の手順概要は下記です。
1.認識用環境つくる
 ・ubuntu16.04, t2xlarge(vcpu4, mem16GB)
2.モデル選ぶ
 ・同一元画像に対して、左がYOLOv3、右がMobileNetSSDで認識処理実行した時の結果(今回のライブカメラ画像において、右は精度的に利用が難しい様子が判る)

 ・OpenCVv4になって、dnnライブリの公式ドキュメントやリソースがより拡充してうれしいです!
https://github.com/opencv/opencv/tree/master/samples/dnn
https://github.com/opencv/opencv_extra/blob/master/testdata/dnn/download_models.py
3.FlaskでAPI化する
 ・Lambdaに載らず(50MB制限)、プロトタイプの構成部品が増えて残念
 ・認識結果返却APIにするためにFlaskをつかう
4.Alexa応答用のLambda関数をつくる
 ・嬉々として、男女エージェントにしたり、(エージェントが物陰に潜んでいる脳内設定による)ささやき声にしたり、SoundEffectを選んだりする
5.Alexa対話モデルの作成
 ・スキル起動コマンド定型句「~を開いて」由来で、プロトタイプのタイトルと呼び出し名を”エージェント通信”にする(エージェント、通信を開いて!)

まとめ

視覚的状況を聴覚メッセージに要約するソリューションは、たとえば
 ・「店頭状況の要約による適切な品出し+機会ロス防止」や
 ・「駅前の放置自転車の状況を要約しアラート」など、
”あったらいいな”のユースケースが色々考えられるかな、と思いました!
(今回の実装に関する直接的な感想としては、007のエンジニア”Q”のような気分を味わえたので大変満足です)