息子が寝返りをできるようになりました👶
うつ伏せ寝の危険があるので、寝返りをするとアラートを出してくれるようなAIを構築してみました。
AmazonSagemakerとAmazonRekognitionを使うとサクッと作ることができたので記載しておきます。
システム構成図
- ネットワークカメラで息子の様子を撮影
- FFmpegで画像に保存
- 画像をAWS CLIでS3にアップロード
- Amazon Rekognitionの推論APIをリクエスト
- 推論結果を元に寝返りをしていたらパソコンからアラートを出す(音を鳴らす)
- 2-5を繰り返す
ネットワークカメラ
ネットワークカメラには、今回はTP-LinkのTapoを利用しました。
RTSPプロトコルに対応しているので、撮った映像から画像に変換してPC内に保存することができます。
撮影した内容を画像に保存
画像の保存にはffmpegを利用しました。
RTSP経由で撮影した画像をサクッと画像として保存してくれます。
学習過程
まずは推論モデルを生成するために学習データを用意する必要があります。
ネットワークカメラとFFmpegを利用して収集した写真をAmazon Sagemaker Grand Truthを利用して、写真ごとに寝返りをしているかしていないかのフラグ付けします。
これについてはAWSのNyantechハンズオンシリーズが参考になります。
その後、Amazon Rekognition Custom Labelsを使って教師あり学習をさせます。
こちらもNyantechハンズオンを参考にしました。
20枚程度の画像で精度は82%程度、ちょっと精度は低いです。
推論過程
生成したモデルはAWS CLI経由またはPythonコードベースで利用できます。
今回はPythonコードベースで呼び出す形にし、推論結果を元に寝返りを検知したら音を鳴らす(MacだったのでSay()を利用して音声でお知らせ)形にしました。
結果
寝返りを検知するとうまくお知らせしてくれる仕組みができました。
ここまで大体10時間程度で開発できました。
ただし以下の課題があります。
- 精度が低いので誤検知が多い
- 推論Modelを起動するまで時間がかかる(約5分程度かかります)
- 画像を撮ってから推論が完了するまで10秒程度かかるのでタイムラグが発生します
- AmazonRekognitionは推論モデル稼働時間で費用が発生するので結構お金がかかる
SageMakerで頑張って学習モデルを作って、そのモデルをパソコン上で動かすようにすればこれらの課題は解決できそうです。
MLOpsも考えるとこんなイメージでしょうか。
その後
結局その後息子は敏感な背中スイッチを発動させてベビーベッドでは寝てくれなくなってしまいました😢
今は妻が息子に添い寝しながら布団で寝ているので今回のMLは不要になってしまいました。
子どもの成長は速いですね〜。