指パッチン検出アプリとは?
その名の通り、指パッチンを検出する男の夢を叶えたアプリケーションです。
以下の動画では指パッチンでGoogleAssistantを起動させていますが、今回紹介するのは指パッチンの音を検知する機能のみです。
男の夢を叶えました。女性を家に呼んでご利用ください。
— imajo@指パッチンで何かする人 (@imasirooo) 2018年10月24日
1.まず指パッチンをします
2.単発音をスペクトル解析(音の特徴を取得)
3.機械学習を使って指パッチンかを判断
4.スマートスピーカー起動
5.ドヤ顔で「電気つけて」 pic.twitter.com/6SyPTS70xw
多数の方に「使ってみたい!」といっていただけたので、公開することにしました。
Twitter等でお声をいただいた皆さまありがとうございます。
環境
以下の環境で動くことを確認しています。
- Python3.5.1
- Mac OS X(10.14.1)
Python3.7以上だとtensorflowのインストールにミスるみたいです。3.6以下を推薦します。
仕組みを超簡単に紹介します
「仕組みなんて興味ねえ!早く使いてえ!」って方は飛ばしてください。
以下の流れで指パッチンを検出しています。
- 単発音を検出
- 検出した単発音をスペクトル解析
- 機械学習を使って指パッチンかを判断
もっと詳細を知りたい方は以下をご覧ください。
非エンジニアでもわかる指パッチンで電球を色っぽくした話
インストール方法
それでは今お使いのPC(Mac推薦)で指パッチン検出アプリを使えるようにしていきます。
指パッチンをあなたの指にインストール()
すでにインストールされている方は飛ばしてください。インストールされていない方にとってはここが最大の難関かと思われます。
しかし、動作環境等によってインストール方法が変わってくるかと思われますので説明は省きます。ご了承ください
以下のサイト等が参考になるかと思われるので、ぜひ習得してみてください。
指パッチンのやり方にはコツがあった!大きい音の鳴らし方はコレ!
clone
冗談はさておき、ここからが実際にインストールの作業になります。
まずは、コード自体をcloneします。cdもしておきましょう。
$ git clone https://github.com/imajoriri/finger-snap.git
$ cd finger-snap
モジュールのインストール
残念ながらこれだけでは動かないので、その他必要なモジュール等を入れていきます。
まずは、音声処理に必要なPortAudio
というライブラリをインストールします。
Macですと以下のコマンドでインストールできます。
$ brew install portaudio
申し訳ないのですが、windowsだとインストール方法が違うようです。
ググってみてください。
その他、必要なPythonのモジュールをpipでインストールします。
$ sudo pip install -r requirements.txt
# もしくは
$ sudo pip install numpy matplotlib tensorflow wave
うまくインストールできない場合は以下のサイト等を参考にしてください。
macOSにpyaudioをインストールする
使ってみる
以下のコマンドで実行可能です。指パッチン検出が始まると指パッチンの検出を始めます
と表示されます。
$ python detection_only.py 100
指パッチンの検出を始めます
100
の部分は検出する時間[秒]です。
指パッチンを検出すると、以下の表示が出ます。
これは指パッチンです
また、指パッチン以外の単発音を検出した場合は以下の表示が出ます。
これは指パッチンではないです
使い方を動画で見たい方は以下のツイートからみることができます。
指パッチンとそれ以外を区別している動画 pic.twitter.com/YuTp99vx7e
— imajo@指パッチンで何かする人 (@imasirooo) 2018年11月7日
GitHub
以下が実際のコードです。スターをもらえると少しやる気が増えます。(あとこの記事自体にもいいねを、、、)
https://github.com/imajoriri/finger-snap
うまく動かない
Macとラズパイのみでしか動作検証していないので、環境によってはうまくいかない場合もあります。ご了承ください。
もしうまく動かない時は@imasiroooまでご連絡いただけると嬉しいです(解決できるとは言っていない)
うまく動くけど認識率が悪い、、、って場合は私の指パッチンの音と違う可能性が考えられます。
残念ながら100%私の指パッチンのデータを使っているので、、、
そんな時はあなたの指パッチンデータを入れてあげましょう!!
指パッチンデータを入れる
以下のコマンドでデータを入れることができます。
$ python3 for_develop/input_data.py
検出を始めます。50秒間です
すると50秒間、単発音を検出します。
ここで、指パッチンをしてみてください。すると以下のような表示になり、単発音が指パッチンの音かそれ以外かを求められます。
finger:1
not finger: 2
>>
指パッチンの場合は1
。それ以外は2
を入力してください。
以下は指パッチンの場合です。
finger:1
not finger: 2
>> 1
検出を終了します
すると、./sounds/finger-16000
ディレクトリにwaveファイルとして保存します。
最低でもそれぞれ5つくらいのデータを入れるといいかと思います。
学習させる
何個かデータを入れられたら実際に学習を回します。
$ python3 for_develop/do_learning.py
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
...学習中...
これであなたの指パッチンでも反応するようになりました(多分)
最後に
なんとなくの思いつきで作り始めたものですが、試していただきありがとうございます。
ちなみに機械学習等は初めて使ったので、大したコードは書いていません。
精度云々の話は置いておき、使う人、見る人、何より作っている自分がわくわくできるようなものだと思ってます。
こう言うくだらないものをたくさん作っていきたい〜〜
Ttwitterフォローしてもらえるとやる気元気パワーアップするのでよろしくです。
@imasirooo