心拍数をカメラで計測してみる
最近、スマホのカメラを使って心拍数を計測することができるアプリが色々とあることを知った。いくつかの方法があるようだけれど、簡単そうなアルゴリズムをOpenCVを使って実装してみた。実装したアルゴリズムは、かなり単純で以下の手順で画像から心拍数を算出する。
入力動画ファイルの準備
- スマホのライトを点灯した状態でカメラに指を押し付け動画を撮影する。ほとんどのアプリがこの方法で画像を取得している。長時間やると熱を持ってくるので注意が必要。撮影された動画は以下のような感じ。
- 撮影した動画をPCに取り込む。
画像処理
- 動画像の各フレームに対してメディアンフィルタをかける。
- 各フレームの緑(G)成分の平均輝度を算出する。算出された平均輝度値をプロットすると以下のようになる。ここでは、cv::plot::Plot2dを使ってプロットしてみた。このように、プロットした結果を見ると山と谷がはっきりと確認できる。
- 上記結果の谷の部分を検出する。今回は一定のウィンドウ内で最小となっている点を谷として検出した。
- 検出された谷の間隔とフレームレートから心拍数を算出する。算出された心拍数は以下の通り。心拍数はおよそ60になった。途中おかしな値が出ているが、これは谷の検出に失敗しているためで、何らかの異常値除去を行う必要がある。
今回、動画像から心拍数を算出する方法を試してみたが、単純な方法でも公開されているアプリと同じような結果を得ることができた。ただ、この方法で、どの程度の精度で算出できているのかは不明。
コメント
コメントを投稿