このコンテンツには閲覧パスワードが必要です。
【科学・数学 ✕ Python = ∞】#2 「1-1 スマホで血管年齢(動脈硬化)を診断してみる」
平林 純著「なんでもPythonプログラミング 平林万能IT技術研究所の奇妙な実験」で紹介されている実験をなぞってみます。
今回はタイトルのとおりスマホで血管年齢を調べてみようという実験です。
その前に、前回本書のとおりターミナルからAnacondaで仮想環境の構築しましたが、そうするとPython3.9がインストールされてしまい、Scipyとかインストールしようとすると競合が起きて入りません。AnacondaのソフトからPython3.7系で仮想環境を作成してからopencv等のライブラリを、これもAnacondaのソフトからインストールした方がよいです。
では、今回の実験ですが、指先にスマホの背面カメラのライトの光を当てて、指先から返ってくる光量を撮影し、脈波と呼ばれる血流量の変化を測定し、血管の柔らかさを推定するというものです。
【やり方】
(1) スマホのライトを点灯状態にして、指先でカメラを覆って動画を3分弱撮影する。
(2) 著者が撮影した指先の動画やコードはこちら(※)
(3) 撮影した動画を「AccelerationOfPulseWaveformAnalysis_draft.ipynb」と同じフォルダに入れて、JupyterNoteBookで順番にコードを実行していく。
※ https://gihyo.jp/assets/files/book/2020/978-4-297-11637-8/download/1-1.zip
一応、コードがすべて動くことは確認できました。本書の中でこのコードで実行した著者の血管年齢は「63歳」と書いてあるのですが、本書のサンプルの動画をこのコードで動かすと、血管年齢が男性なら81歳と表示されます。。。
余談ですが、サンプルの動画のプロパティに緯度と経度が入っていたので、撮影場所が特定できてしまいました。。。動画や写真をネットに上げる際は気をつけましょう。
さて、次に、私の指先を撮影して同じようにコードを実行していきましたが、結果としては → 失敗です。
血管年齢の計測にはいたりませんでした。。。
添付の写真をご覧ください。左のグラフは本書のサンプルで右が私の指先のグラフです。
詳細は本書に譲りますが、スマホでライトをつけて指先をの動画を撮影すると、緑色の画素値に「脈拍を反映した血流・血管の変化」が現れるはずで、著者の指先では確かに緑色に反応がありますが、私の指先の緑の画素値は0で全く何も捉えられていません。
私のスマホはiPhone11、著者のスマホはiPhone6sのように見えるので、動画のサイズをサンプルと同じ720✕1280にしてコーデックも互換性優先にし極力環境を近づけてみましたが、駄目でした。色々撮影方法を工夫しながらやっても緑の画素値は0のままでした。
動画を本書のサンプルに差し替えるとやはり左のグラフになるので、コードがおかしいわけではなく、私の撮影した動画がおかしいのだと思います。iPadProのカメラでも試してみましたが、同様に緑の画素値が0になってしましたね。うーん、なんでだろうか。
この緑の画素値が出ないことには先に進まないのですが、なんだかんだで4時間くらいは作業していて、煮詰まったので、この実験はおしまいにして、後日何か気づいたらまた試してみたいと思います。
しかしながら、OpenCVも使えるようになったので、その点は良しとします。