M5StickVで姿勢が悪くなったことをお知らせしてくれる姿勢チェッカー作りました。
<投稿者:Katsu Shun @katsushun89>
趣味で電子工作とか身の回りをちょっと便利にするものや、何の役にも立たないものを作って遊んでいます。
M5Stack UnitV Kendryte K210デュアルコア64ビットRISC-V CPUのAIカメラ最先端のニューラルネットワークプロセッサ (UnitV)
- 出版社/メーカー: M5Stack
- メディア: エレクトロニクス
何を作ったか
仕事中にPC操作しながら座っていると、だんだん姿勢が悪くなってしまいます。
なかなか気づけないので、姿勢が悪くなったことをお知らせしてくれる姿勢チェッカーをM5StickVを使って作りました。具体的には、カメラで悪い姿勢を検知すると、LEDが青く点灯し、それが5秒以上継続すると音声で「姿勢が悪いようです」とお伝えしてくれます。
どうしても作業していると姿勢が悪くなってしまうので、音声とLEDで通知してくれるやつを作りました。
— Katsu Shun (@katsushun89) 2019年11月18日
悪い姿勢、良い姿勢、離席中の画像を各々保存してMobileNetの転移学習を用いて、悪い姿勢を検出したときに通知してくれるようにしました!
♯M5StickV pic.twitter.com/TjqtM4D1TB
固定するためのケースのモデリング
M5StickVはそのままだと棚などに固定しづらかったので、Fusion360でケースをモデリングして、3Dプリンタで出力しました。取っ手的な部分でひっかけられるような構造にしています。
データ取りと学習
M5StickVはKPUというNeural Network用のプロセッサが載っています。これはTensorflowなどを用いて作った機械学習のモデルをM5StickV上で動かすことが出来ます。
TensorFlowはじめました3 Object Detection ─ 物体検出 (NextPublishing)
- 作者:有山 圭二
- 出版社/メーカー: インプレスR&D
- 発売日: 2018/01/26
- メディア: Kindle版
そのあたりは色々な方や公式が情報出しているので割愛しますが、今回はGoogle colabratoryで学習を実行しました。データ取りと学習のざっくりやったことはこういう流れです。
- M5StickVで10秒おきに静止画を撮影しSDカードに保存するコードを書く
- 仕事中に自分の姿が写るような位置にM5StickVを固定し、自動で撮影し続ける
- 帰ってから画像データを確認、クラス分け(ディレクトリを良い姿勢・悪い姿勢・離席中の3つに分ける)
- 分けた画像データをデータセットとしてGoogle colab上でMobileNetの転移学習にかける
- 5.正しく分類出来ていなかったら、2からやり直し
5は混同行列(confusion matrix)という正しく分類できているか評価するためのMatrixをみて判断します。最終的に、自分に非常に近い位置にカメラを設置することで良い姿勢と悪い姿勢を区別することが出来ました。比較すると、悪い姿勢の時だけ自分の顔が部分的にでも写っているような画像になっていました。
やってみてわかったこと
初めて機械学習というものをやってみましたが、コードはほぼ書かずに画像データだけディレクトリに分けて学習にかけるだけで出来たのでかなりお手軽でした。どちらかというと学習自体よりも、今回気づいたのは、自分が見分けたいものを見分けられるためにはどういうデータセットを用意しなければならないかということです。
最終的に座った自分に非常に近い位置にカメラを配置することで見分けることが出来ましたが、数日間位置に関しては試行錯誤しました。(といっても位置を変えてデータ取って自宅に帰って学習かけてハイだめやり直しーってなるだけなので、そこまで作業時間はかかっていないですが)
M5Stack UnitV Kendryte K210デュアルコア64ビットRISC-V CPUのAIカメラ最先端のニューラルネットワークプロセッサ (UnitV)
- 出版社/メーカー: M5Stack
- メディア: エレクトロニクス
また、取り組む、見分けたい問題も、必ず成功しなくても許せるようなものにした方が良さそうです。100%見分けるというのはなかなか厳しそうなのでまあ失敗しても許せるよねってレベルのものにするのが、趣味レベルではオススメです。他にもM5StickVの公式でV-Trainingという画像をアップロードするだけで、学習済みのModelを提供してくれるクラウドサービスもありますので、お気軽に試してみてください。
ソースコード
M5StickVのソースコードはこちらのgithubリポジトリに置いてあります。
<投稿者:Katsu Shun @katsushun89>
趣味で電子工作とか身の回りをちょっと便利にするものや、何の役にも立たないものを作って遊んでいます。