はじめに
先日Twitterで指パッチンで電球を色っぽくする動画をツイートしたところたくさんのいいねとRTをしていただきました。
「これ好き」などの声もいただいて、とても嬉しかったです(やってよかった!)。
指パッチンで部屋を色っぽくしてみた。
— imajo@指パッチンで何かする人 (@imasirooo) 2018年11月5日
伝わって欲しい。エンジニアってのは、ロマンチストな生き物だって事を。#機械学習の無駄遣い pic.twitter.com/CiFGXvl39I
さて、この記事ではなぜ僕がこんなものを作ろうかと思ったのかと、超ざっくりの仕組みを書きます。
しかし、コードや難しいアルゴリズムは書かず、非エンジニアでも大体の仕組みがわかるよな記事を書ければと思っていますので最後まで読んでいただけると感激です。
(技術的な話はまた後ほど書きます)
指パッチンと電球を繋ぐ構成
まずは構成。指パッチンでどのように電球を操作しているかです。
その前に私の部屋の電球をご紹介します。
私の部屋はheuという電球を使っています。
これはIoT電球というもので、スマホから操作したりスマートスピーカーでON、OFFすることができます。
ガジェット好きな方は知っている方も多い以下と思います。
そして、重要なのは、この電球はプログラムから操作することができるのです。
つまり、自作のアプリなどから部屋の電球を操作することができます。
ちょっとだけ難しいワードをチラつかせると、ローカルの(電球のハブの)IPアドレスにPUTするだけです。
今回は自作の指パッチン検出プログラムから電球を操作する仕組みです。
それでは、次にどのように指パッチンを検出するかを説明していきたいと思います。
指パッチンを認識する
単発音を検出する(音の大きさ)
まず、指パッチンを検出するにあたって単発音を検出します。
単発音とは一瞬だけ大きくなる音です。
以下の画像は指パッチンをした時の音の大きさのグラフです。
ほんの数ミリ秒だけの大きい音を検出した時に反応します。
しかし、以下のグラフを見てください。
前の画像とすごく似ていますよね?
しかし、これは指パッチンのグラフではなくて、手を叩いた時の音です。
このままでは指パッチン以外の音にも反応してしまいそうです。
スペクトル解析というものをやってみる(音の種類を見分ける)
このままでは手を叩いた音にも反応してしまうので、なんとかしないといけません。
人間である私たちは、音の違いを聞き分けられますよね。
指パッチンと手を叩いた音ってなんか違う。同じ大きさの音だとしてもです。
この、耳で聞いてわかる違いをグラフとして表現できれば、指パッチンの音だけを検出することができるはずです!!
そこで、この違いを抽出するためにスペクトル解析というものを行ってみました。
出てきましたね、難しい単語。僕も指パッチン検出プログラムを作るまでは「名前は聞いたことあるな〜」程度でした。
超ざっくり説明するとスペクトル解析とは先ほどの「音の大きさ」のグラフを「音の高さ」のグラフに変えることです。
どのようにやるかを説明すると数式とか出てきてしまうので飛ばします。
先ほどの指パッチンのグラフと手を叩いた音のグラフをそれぞれスペクトル解析してみたので比べてみましょう。
先ほどは違いがわからなかったグラフもこう見ると、なんか違うな〜ってのはわかってきました。
機械学習で違いを見分ける
さて、この「なんか違うな〜」ってのを手動で見分けるのもできなくはないかもしれませんが今っぽくないですね。(黙れ)
ということで、ミーハーな私は機械学習で見分けることにしました。
機械学習を知らない人は少ないかもしれませんが、超ざっくり説明します。
機械にデータを教えてあげて、機械に正解を求めさせるというものです。(機械学習に詳しい方はツッコミどころの多いい説明かもしれませんがスルーしてください)
つまり、今回は指パッチンの音をスペクトル解析したデータで機械に「これが指パッチンの音だよ」ってのを覚えさせます。そして、実際に指パッチンやそれ以外の音を聞かせて判断してもらうようになっています。
そして、これが指パッチンとそれ以外の音を見分けることができた動画になります。
指パッチンとそれ以外を区別している動画 pic.twitter.com/YuTp99vx7e
— imajo@指パッチンで何かする人 (@imasirooo) 2018年11月7日
電球(hue)を操作する
まあ、これは先ほど説明した通りにプログラム上で電球を操作するだけです。
最初にコードなどの難しいことは書かない宣言をしたので書きませんが、参考にした記事のみ載せておきます。興味があったらいじってみてください!
最後に(今後の展望?)
もともと最初に指パッチンと繋げたのがGoogleAssistantでした。
「OK Google」って言わなくても指パッチンで起動するスマートスピーカーを作りたかったのです。
男の夢を叶えました。女性を家に呼んでご利用ください。
— imajo@指パッチンで何かする人 (@imasirooo) 2018年10月24日
1.まず指パッチンをします
2.単発音をスペクトル解析(音の特徴を取得)
3.機械学習を使って指パッチンかを判断
4.スマートスピーカー起動
5.ドヤ顔で「電気つけて」 pic.twitter.com/6SyPTS70xw
こういうものを作って思うのは、なんの社会問題も解決しないけど作ってる方も使う方も楽しくなるようなものを作るのがエンジニアの醍醐味だなと思いました。
今後もこんな面白いものを作っていけたらな〜って思います。
技術的なブログはいつかあげます