【要約】みまもりカメラを用いた睡眠検知システムの構築 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
筆者は、日々の健康管理を継続する中で、既存の睡眠分析アプリが抱えるUX上の課題に直面した。睡眠の質を定量化したいが、既存アプリは就寝前のスマートフォン操作を強いるため、睡眠の妨げになると感じたからである。具体的には以下の問題がある。
- ・既存アプリ(Pokémon Sleep等)は、就寝前にデバイスを操作する手間が発生する。
- ・高価な専用睡眠トラッカーは、学生にとって導入コストが高い。
- ・物体検出(YOLOv8)では、布団に覆われた状態の姿勢を正確に捉えることが困難である。
// Approach
筆者は、スマートフォン操作を不要にするため、監視カメラの映像から状態を判定する画像分類アプローチを採用した。物体検出による姿勢推定ではなく、ベッド全体の画像から状況を推論する手法に切り替えた。具体的な手順は以下の通りである。
- ・Tapo C210のRTSPストリームをffmpegで取得し、30日間の動画から3462枚の画像を収集した。
- ・sleeping、exist、emptyの3クラスに分類するデータセットを構築した。
- ・hgnetv2_b2.ssld_stage2_ft_in1kをベースモデルとして採用し、学習を行った。
- ・クラス不均衡対策として、出現頻度の逆数を用いた重み付けをCrossEntropyLossに適用した。
- ・検証データのmacro-F1が高い上位5モデルを組み合わせるアンサンブル学習を導入した。
// Result
構築したシステムは、実用的な精度と速度を両立し、健康管理への統合に成功した。筆者はMiniPC上のK8sを用いて、3分ごとの自動推論とアプリへのデータ可視化を実現している。定量的な成果は以下の通りである。
- ・テストセットにおいて、Accuracy 0.9204、macro-F1 0.9146を達成した。
- ・推論速度は1枚あたり1秒未満であり、リアルタイム性に耐えうる速度を実現した。
- ・単一モデルと比較し、アンサンブルにより精度を最大3.2pt向上させた。
Senior Engineer Insight
> リソース制約下での極めて現実的な解法である。物体検出の限界を認め、分類問題へ転換した判断が精度向上に直結している。アンサンブルによる精度底上げや、GPU上でのデータ拡張による学習効率化も評価できる。実運用では、照明変化や環境内の異物に対する堅牢性と、エッジデバイスでの継続的な推論安定性が真の課題となるだろう。