こかげむら

ゲーム好きな理系大学生のお話

webカメラで撮った自分の顔の動画から心拍測ってみた

顔の動画から心拍が測れるらしい

前にちらっと,顔の動画から心拍を図ることができると聞いたことがあったが,にわかには信じられない.ネットで検索していると実際にやってる方がいたのでその記事を参考にさせてもらいながら,自分でもやってみた.

qiita.com

顔の動画から心拍が測れる原理

  • 心拍によってヘモグロビンの量が変化
  • ヘモグロビンは緑の光を吸収する特性がある
  • 顔とカメラを動かさないように固定し,動画を撮って顔の一部のRGB値のGを時系列でプロットすると,心拍が出てくる

つまり,人間の顔色は緑色っぽくなったり,ならなかったりを繰り返しているってことらしい.目で見ても全然わからないから早速やってみる.

実際にやってみた

  1. 自分の顔をできるだけ動かさないようにしてPCのwebカメラで撮影する
  2. 顔の頬の部分のピクセル位置を探す(手作業)
  3. 上の記事のプログラムをコピペして顔の部分のピクセル位置だけ変えて実行
  4. 画像のG値(緑)をプロットすると以下のようになった

f:id:agry:20191004071721p:plain

 確かに緑色の値が大きくなったり小さくなったりを周期的に繰り返している.顔の固定も甘かったし,蛍光灯の光しか当ててないから参考にさせてもらった記事ほどきれいに出なかったけど.

信じられなかったけど,顔は緑色になったりならなかったりしているらしい.

思ったこと

力を入れている部位にはほかの部位に比べて血が多く流れて,ヘモグロビンの量が多くなっていると仮定する.(ソースはない,思いつき)

上の仮定が正しければ画像から力を入れている部位を検出できるんじゃないか?と思って,自分の腕の動画を撮影し,力を入れていない時と入れているときを比較してみた.

解析する腕の位置が若干ずれていたり,撮影してるとき腕が振るえてしまったりと,結構適当に実験したから,正確な値ではないと思うけど一応結果を載せる.

力を入れてない時(左),力を入れてる時(右)

f:id:agry:20191004071818p:plainf:id:agry:20191004071931p:plain

もしかすると力を入れているときはヘモグロビンの量が多くなってG値が低くなってる?

上手く撮れてないだけかも.また追実験してみて結果を書こうと思う.