【本サイトのご利用指針】
当サイトはSPAM対策等のためJavaScriptを使っています。
JavaScriptの実行を可能な状態にしてご利用下さい。
Please enable the execution of JavaScript!







































































【俺センシング】『PCのカメラで非接触バイタル・センシングができる』

~トランジスタ技術【メルマガ第100回】『PCのカメラで脈拍リアルタイム・センシング』~
~トランジスタ技術【メルマガ第103回】『PCのカメラで呼吸リアルタイム・センシング』~

『Kinectが変えるセンシングの世界』
    【リンクフリー】 私設研究所ネオテックラボ Neo-Tech-Lab.co.uk
【記載者】 【私設研究所Neo-Tech-Lab】 上田 智章
作成日 2013/03/30
ここにチェックボックス型外部コンテンツ・メニューが入ります。




【ブラウザはGoogle Chrome】
●最新版ダウンロードはこちら

【お知らせ】

Windows7でChromeがフリーズを起こす場合は、コントロールパネル⇒管理ツール⇒サービス でWindows Media Player Network Sharing Serviceを停止かつ無効にします。Micorosoftのバグです。

【CQ出版インターフェース誌 連載】~個人で試せる!生体センシング実験室~

 非接触バイタルセンシングにおいて基礎知識にあたる心電計関連記事をCQ出版のインターフェース誌2015年12月号から連載を開始した『個人で試せる!生体センシング実験室』で記載しています。サンプル・プログラムのダウンロード・サポートを行うためのサイトページは下記URLです。
連載記事のダウンロードページはこちら

  

【生体計測学習キット】第1弾:心電計ボード

 CQ出版から、近日発売予定です。製品単価は2万円前後の予定です。
 詳しくはCQ出版インターフェース誌のページをご覧ください。
      ●【心電計ボードのドキュメント】
  


【講演・技術セミナー予定メモ】

【トリケップス セミナー】

【題  名】『透過型3Dディスプレイを搭載した一体型Windows10デバイスHololens』
【副  題】~HololensがもたらすMixed Reality(複合現実)の未来~
【開催日時】2017年02月20日(月) 10:00~17:00
【会  場】オーム ビル(千代田区神田錦町)
【概略内容】Hololensの概要説明、背景、基本操作、動作原理、体験デモ等

【トリケップス セミナー】

【題  名】『3Dセンシング技術(Light Coding / Time of Flight/ Infrared Depth)の動作原理と非接触生体センシング』
【副  題】~Microsoft Kinect V2, Intel RealSense SR-300など~
【開催日時】2017年03月24日(金) 10:00~17:00
【会  場】オーム ビル(千代田区神田錦町)
【開催履歴】
  (1)2013年05月24日 (2)2013年08月30日 (3)2014年02月07日
  (4)2014年06月20日 (5)2014年08月29日 (6)2014年11月28日
  (7)2015年03月18日 (8)2015年07月10日 (9)2015年11月06日
  (10)2016年03月17日 (11)2016年4月14日 (12)2016年07月14日
  (13)2016年11月02日
【概略内容】
デプス・センシング・アルゴリズム(Light Coding 技術[V1] / Time of Flight 技術[V2] / Infrared Depth [次世代] )の理解から、それを用いた非接触生体センシングの動作原理、ヒューマン・ ヘルスケア関連アプリケーションへの展開、及び次世代デバイス Hololens までを解説
■その他、SDKのセットアップや基本的な事例の資料は添付、あるいはサンプルプログラムのダウンロードができます。

【情報機構 セミナー】

【題  名】③『3Dセンシング技術の基礎・各方式の特徴からヘルスケア分野等への実応用 』
【開催日時】2016年08月29日(月)10:30~17:30
【会  場】東京大井町 きゅりあん
【開催履歴】 (1)2014年04月10日 (2)2015年02月12日

【日本テクノセンター セミナー】

【題  名】④『Kinect for Windows V2(ToF方式3D距離画像センサ)の基礎と点群処理データへの活用』
【開催日時】2016年09月01日(木)10:30~17:30
【会  場】都内(新宿)
【開催履歴】 (1)2014年09月25日 (2)2015年01月28日 (3)2015年11月26日


Microsoft社のKinect V2


Intel社のRealSense F-200(左)とR-200(右)


Microsoft社のHololens



浴室見守りシステム(KinectV2で撮影)

岩手大学 小林宏一郎教授、大川井宏明教授、Network21 佐藤恭之氏らと共同研究。平成26年中の交通事故死者数は4,113人でしたが、浴室は家庭内にありながら1年間に16,000人(浴槽内8,000人、洗い場4,000人、脱衣所4,000人)が死亡している非常に危険なゾーンです。同居家族がいる場合でもプライバシーの問題から発見までに時間を要してしまうことが影響していると考えられています。デプスカメラによる測距データによる見守りでプライバシーに配慮しながら通報時に状況を把握しやすいシステムを研究・開発しています。

最大血圧200~220時の頬の血圧脈動(RealSense F-200で撮影)

立命館大学スポーツ健康科学部 / スポーツ健康科学科 佐久間春夫教授、同大学院 笹塲育子氏との共同研究。スポーツ選手が普段の練習通りの成績が出せるように行う加圧式呼吸法によるバイオコントロールに関して、KinectV1による非接触バイタルセンシングを用いて研究を実施。加圧式呼吸法で血圧コントロールができることも判明。

【学会講演】

●第127回微小光学研究会『ランダムドットパターン投影法によるデプスカメラの動作原理』上田智章(Neo-Tech-Lab)
●日本光学会年次学術講演会 Optics & Photonics Japan 2013『ランダムドットパター投影法によるデプスカメラの動作原理』上田智章(私設研究所 Neo-Tech-Lab)
●ジェロンテクノロジーフォーラム2015『デプスカメラによる見守りシステム』上田智章(株式会社フォスメガ NeoTechLab)、小林宏一郎(岩手大学)、大川井宏明(岩手大学)
●SICE SI2015『KinectV2を用いたセンシング技術動向』上田智章(Neo-Tech-Lab)


【はじめに】

 このページは、CQ出版株式会社トランジスタ技術メルマガ第100回(2013年3月29日送信分)にて配信しました連載『俺センシング』の記事『PCのカメラで脈拍と呼吸を非接触センシング』の筆者個人サイト内サポートページです。この内容は、筆者が第127回微小光学研究会(2013年3月7日)及びトランジスタ技術2013年4月号(3月9日発売)の記事で紹介したKinectの赤外線脈波検出プログラム(Visual C#)を修正して、Webプログラム(HTML5+JavaScript)に移植したものです。Webカメラに対応した最新のブラウザ(Google Chrome, FireFox, Opera)ならPC内蔵カメラかUSB接続のカメラを使って上記リンクで脈拍非接触センシングを試すことができます。ヘモグロビンの吸光特性の可視光領域(緑色)を使っているか、赤外線領域を使っているかの違いだけです。なお、測定精度はもう少しソフトウェアを手直しすれば1ミリ秒程度まで時間分解能を向上させることが可能です。

■現状、Google Chromeの仕様変更に伴い、WebCamの認識が動作しなくなりました。今修正の時間は取れないので暫く放置させていただきます。2014/08/31

                         『Kinectが変えるセンシングの世界』

【参考】
 ●富士通さんが可視光(緑色)で脈波を取る方法を2013年3月18日にメディア発表。●岐阜で開催の電子情報通信学会で前記メディア発表の内容を2013年3月19日に学会発表された模様。 記載日 2013/03/20 ページ分離 2013/03/30
 ●Microsoft社のKinect2.0ではRGBとIrカメラ画像から心拍測定を行う機能が追加される予定です。 ●WiredのKinect2.0の機能紹介YouTube動画 記載日 2013/09/15

『顔・胸部追尾型バイタルモニタ(心拍・呼吸)』【Version0.17】

『顔・胸部追尾型バイタルモニタ(心拍・呼吸)』【Version0.18】

Kinectの骨格追尾(Skeleton Tracking)を利用して顔追尾(Face Tracking)と胸部追尾(Breast Tracking)を行い、心拍と呼吸を1.2m~1.5m離れた位置でセンシングします。椅子に腰かけ、安静状態でお試しください。骨格認識終了後に波形が表示されます。Depth設定は設定変更は行わずDefaultモードのままお使いください。
以前に公開したバージョンでは顔追尾(Face Tracking)を行っていないプログラムであったため、50cm程度の距離で心拍を測ることしかできませんでした。また今回のものであれば呼吸は3mから4mの距離でも測定できるとは思います。
Ver.0.17はKinect for Windows Contest 2013のデモで使用したバージョンです。Ver.0.18はこれに胸部心拍動の処理を加えたものです。


【Kinect for Windows Contest 2013において技術賞受賞】[2013/09/19]
●Google検索でこちらに飛んでこられる方が多いので、このページにも貼り付けます。『Kinectが変えるセンシングの世界』をご覧ください。

■サンプルプログラムVer.0.17 (SDK Ver.1.7に対応)
■サンプルプログラムVer.0.18 (SDK Ver.1.8に対応)





顔・胸部追尾
測定中
分厚い布団の上からでも体に密着させれば呼吸センシング可能

【MONOistさんの関連記事】

Kinect for Windows Contest 2013の記事がMONOistさんで掲載されています。

●Kinect for Windows Contest 2013 リポート(1):
またしてもハイレベル!? 美と健康は「Kinect」にお任せあれ!

●Kinect for Windows Contest 2013 リポート(2):
「ロボット」から「プロジェクションマッピング」まで
――Kinect活用でビジネス化を目指せ!!【前編】


●Kinect for Windows Contest 2013 リポート(3):
「趣味」から「健康管理」まで、Kinectはシニア市場で花開く!?
――Kinect活用でビジネス化を目指せ!!【後編】


【HTML5+JavaScript+AR】【円形マーカー検出拡張現実センシング】


障害物でマーカーの一部が欠けても検出可能なオリジナル・アルゴリズムで開発。
アルゴリズムの動作原理はサポートページで詳細を記述・説明しています。




Kinectのデプスイメージから円形マーカーの中心座標を推定し、半径と法線ベクトルを取得する理論も記載。

【サンプル・プログラム】  【対応ブラウザ】最新版Google Chrome, FireFox, Opera
『円形マーカーによる距離測定デモ』  ●『回転するピラミッド拡張現実表示』
『マーカー移動履歴の表示』
 ★マーカー半径750mm, 黒枠太さ15mm~30mmで適当に作ってみて下さい。

【HTML5+JavaScript】【赤外線デプスカメラの製作】



ROHM製波長822nm単峰性光束ビームを持った赤外線レーザーRLD82PZJと市販Web赤外線カメラDC-NCR13Uで作るデプスカメラ。ピンホール方式フォトマスクでランダムドットパターンを投影。CADデータをプログラムで生成してプリント基板加工機で0.3mmφのドリル加工で製作。レーザー電源はStrawberry LinuxのLTC3490超小型LEDドライバモジュール(#13002)を使用。


【Webカメラで脈拍センシング】 Version0.48





【Webカメラで脈拍センシング】 Version0.48

【Webカメラで呼吸センシング】≪環境光≫ Version0.03

【Webカメラで呼吸センシング】≪スポット光≫ Version0.17

【説明】

 HTML5のgetUserMediaでローカルのカメラ映像を部分キャプチャして演算処理を行い、divタグのstyleでz-indexを用いて重畳表示しています。
 信号処理の内容はトランジスタ技術2013年4月号の記事、体験版サンプルのソースや以下のドキュメントを参考にしてください。

第127回微小光学研究会『ランダムドットパターン投影法によるデプスカメラの動作原理』(2013年3月7日)やトランジスタ技術2013年4月号(2013年3月9日発売)の記事で紹介したVisual C#のプログラムをちょっと修正して、JavaScriptに移植したプログラム(HTML5)を組んでみました。Webカメラに対応した最新のブラウザ(Google Chrome, FireFox, Opera)ならPC内蔵カメラかUSB接続のカメラを使って上記リンクで脈拍非接触センシングを試すことができます。記事で書いたように矩形波相関フィルタを使っています。検出領域のサイズは60×60画素です。内容的には記事と同じです。ヘモグロビンの吸光特性の可視光領域(緑色)を使っているか、赤外線領域を使っているかの違いだけです。上記URLは製作中のJavaScriptです。テキストなので、ブラウザの『ソースを表示』で閲覧できます。ソースを見ていただければわかりますが、緑色の画素データのみ使用しています。ここまでは1時間半でコーディング。まぁ、記事のC#プログラムをJavaScriptに移植しただけなので。

【体験の手順】

 ①インターネットに接続しているWindowsパソコンを用意。
 ②内蔵カメラまたはUSB接続のカメラをパソコンに接続します。
 ③以下のブラウザの最新版を起動します。
  Google Chrome,  Opera,  FireFox
  ★SafariとIEはHTML5のWebカメラ利用機能が未実装です。
 ④サンプル・プログラム【最新版】をアクセスします。
 ⑤カメラのアクセスを許可してください。
  (FireFoxはその後『FireFox開始』ボタンをクリックします。)
 ⑥赤い枠内に顔ならほっぺたとか額とか、あるいは手など皮膚が露出している部分を映して5秒待ちます。

【FireFoxの設定方法】

★FireFoxは米国時間で2013年4月2日にVersionが20.0になりました。
これに伴ってgetUserMedia自体は準備なく使う事ができるようになったのですが、他のブラウザと違い、同じ関数からgetUserMediaでstreamとsetTimeoutを使うとstreamばかり優先されてしまう構造のようです。
FireFoxのみ『FireFox開始』ボタンをクリック
してください。

【対外発表】

第127回微小光学研究会『ランダムドットパターン投影法によるデプスカメラの動作原理』上田智章(Neo-Tech-Lab)
 呼吸と脈波の実測デモと予稿内で紹介
 (2013年3月7日 東海大学高輪キャンパス)

【利用方法事例紹介】

ムダ サイエンティストで知られる平林純氏がこんな利用方法を考案されました。将来のTV視聴率、映画の人気調査の見守りセンシングに実装できる可能性があるようですね。面白い!(^_^) /2013/03/27/
   ●情報をいただいた徳叉迦@のーねーむさん、ありがとう!

【hirax.net】『ブラウザ上で動く心拍数センサで「自分の好み」を把握する!?』
【hirax.net】『測定点移動機能付きウソ発見器風ページ(Chrome限定)に仕立ててみた。』
【記事】『測定点移動機能付きウソ発見器風ページに仕立ててみた。』
  (平林純氏が測定枠をドラッグ・ドロップできるように改造されています。それを読んで私も測定枠をマウスでドラッグ&ドロップ風に動かせるようにしてみました。)

【ウェブカメラで脈波を非接触センシング!】体験できます。最新版Google Chrome, FireFox, Opera推奨。WebカメラかUSBカメラが必要です。

折角なのでリアルタイムに脈拍数でるようにしておきました。ついでに心電計の記事で紹介している心拍揺らぎマップを脈拍にも応用しました。プログラムの以前のバージョンを試した人はリロードしてください。
何何?試しに脈拍計測したけど数値が安定してないって?安心してください。それで正常です。安定してると言う事は死亡フラグです。老化したり重篤な病状の人ほど周期に揺らぎがないものなんですよ。数値の揺らぎは若さと健康の証だと憶えておいてください。右側に表示される脈拍ゆらぎマップをみてください。最大200拍の脈拍履歴を見る事ができます。リラックス状態や身体年齢が若い程、大きく揺らぎます。逆に1か所に固まったり、直線状になるようなら一度循環器系の病院に行かれることをお勧めいたします。
あと左側に黄色の四角いマーカーが表示されています。これは脈拍数を示しています。ゆっくり息を吐きながら脱力すると脈拍数が下がるはずです。心臓と呼吸には密接な関係があると確認できると思います。
ただどうしても脈拍数から呼吸曲線を得るのには少し無理があります。リアルタイムに呼吸計測を行うのであれば、PTAM (Point Tracking And Mapping)の応用で画像中に含まれる孤立点の位置変動をみるとか幾つかの方法が存在しています。各人で工夫してみるのも面白いと思います。将来的には、血圧や血中溶存酸素濃度もカメラだけで非接触センシングできることでしょう。さらにもう少し工夫すれば血糖値も夢ではなくなりましたね。
今後の予定を少し書いておくと、暗闇での非接触センシングを目指しているので、懐中電灯レベルで作ったランダム・ドット・パターンのプロジェクタでKinectもどきを作ろうとしています。呼吸も同時にセンシングするためです。PTAMでも可能だとは思いますが、S/N比を上げたいので。それとJavaScript(HTML5)を使う分には、DirectShowLib等のライセンス問題を回避することができるメリットがあります。

【体験用ファイル一式のダウンロード】

体験用ファイル一式

【過去のバージョン】

サンプル・プログラム1
 【YouTube動画】http://youtu.be/Qow10QA_7AY
サンプル・プログラム2
 脈拍ゆらぎマップを追加したもの
サンプル・プログラム3【最新版】
 ノイズ除去のために基底遷移アルゴリズムを加えたもの


【図1】Webカメラで呼吸をリアルタイム非接触センシング

【Webカメラで呼吸をリアルタイム
非接触センシング】

初期の成果です。製作物が不要でWebカメラがあれば体験できるので公開します。
RGBカメラの各色成分の輝度変化だけを見る方式です。矩形領域を鎖骨の下付近にドラッグしてください。服の色の影響は受けると思われます。300ルクス以上の照度のある部屋でご利用ください。概ね事務所の照明が500ルクスと言われています。背景にハレーションを起こすような明るい部分があるとうまく計測することができません。
使い方は脈拍センシングと変わりません。Google Chrome, Fire Fox, Operaの最新版で体験ページをアクセスしてください。
【Webカメラで呼吸をリアルタイム非接触センシング体験ページ】
 ■環境光の反射強度変化を見るタイプです。下にスポット光源を使うタイプを別に示します。
記載:/2013/05/30
◆【参考】医療装置応用に特化した特許を出願中。


【図2】Webカメラで呼吸をリアルタイム非接触センシング

【Webカメラで呼吸をリアルタイム非接触センシング】

     【最新レベル】Version0.17

もはやWebカメラによる呼吸の非接触センシングの観測分解能はご覧のようにKinectのデプス画像を処理して得られる最大距離分解能(50μm)を超えるレベルに達しました。実は左図の結果はKinectで使っているようなノイズ除去処理はまだ行っておらず、生波形です。
このソースにはまだ多くの改善要素を残しており、技術的にも試行錯誤要素を含んでいるため、現段階では非公開です。しかしながら、HTML5+JavaScriptで問題なくリアルタイム非接触センシングが行えることが実証できました。今後、呼吸・心拍・血中溶存酸素濃度等の統合センシングの実装作業に進む予定です。
     記載:/2013/06/09/
【体験ページ】GetDistance.htm
 ■スポット光方式のソフトウェアです。推定処理には基底遷移アルゴリズムを用いています。

【お知らせ】

Rohm様ブースにて、Rohm社製赤外線レーザーを用いた非接触呼吸センシングのデモが行われる予定です。
 ●2013年7月17日(水)~19日(金)
  TECHNO-FRONTIER 2013
  メカトロニクス・エレクトロニクス技術の発展と普及を支援する、要素技術専門展示会

【正常な脈拍が揺らぐ理由と非接触バイタルセンシングの可能性】


【図1】心臓の解剖図

【表1】組織導電率(L.A.Geddesらの文献抜粋) 【図2】帰還電流と心電図

【図3】心臓内の電気的興奮と心拍タイミングの関係

【図4】呼吸動作と血中溶存酸素濃度の関係

【図5】心電図におけるR-R間隔の揺らぎ
 心臓の解剖図を図1に示す。右心房内には心臓の拍動のタイミング(拍動周期)を決める洞房結節(SAノード)と呼ばれるペースメーカー組織がある。洞房結節が発する電気インパルスは右心房⇒左心房に伝搬してゆき、心房心筋の収縮が起動される。これによって心房内の血液は心室側に送り込まれる。これと並行して洞房結節からは別に神経のような刺激伝導路が出ており、電気インパルスは房室結節へと伝搬している。房室結節は遅延タイマーのような働きがある結節組織で、丁度、c心房内の血液が心室に送り込まれたタイミングで電気パルスを発生し、HIS束から心室中隔内の左右両束を通って心室心筋内のプルキンエ線維網へと興奮を伝搬し、同時に心室心筋を収縮させて心室内の血液を肺や全身に送り出す。
このように心臓は2サイクルのポンプを2つ持っている。
 洞房結節が右心房に位置しているのにはわけがある。右心房に入ってくる血液は全身から戻ってきた静脈血であり、全身各部で酸素を消費された結果、酸素濃度が低くなった状態の血液であるが、この静脈血の酸素濃度が低いと、洞房結節のパルス間隔は短くなり、心臓の拍動間隔は速くなる。即ち、脈拍数が増加する。反対に、戻ってきた静脈血の酸素濃度が十分であれば、洞房結節の電気パルスの間隔は長くなり、心臓の拍動間隔も伸び、心拍数は減少する。つまり、洞房結節は全身から戻ってくる血液の溶存酸素濃度を検出して、心拍数を調整するセンサ兼コントローラーなのだ。
 心臓以外の組織には骨も含めて電気導電性(表1に導電率を例示)があり、興奮電流とは逆向きに戻る帰還電流が体内を流れている。この帰還電流は体表面も流れているので、体表面の2点間の電位差を観測することで心電図の観測を行う事ができる。
 図3に示すように、心電図はP波, Q波, R波, S波, T波, U波からなるが、P波が右心房⇒左心房が興奮を伝搬するタイミング、QRS群は房室結節からプルキンエ線維網に興奮が伝搬するタイミングとなっている。QRS群は心室心筋が収縮して全身に血液が送られるタイミングを決める電気パルスなので、心電図に基づいて計測される心拍数は通常R波とR波の時間間隔(R-R間隔)であるΔtを求めて、60/Δt [拍/分]としたものが利用されています。
 ところで、図4に示すように、息を吐き出すという行為は肺から空気を大気中に押し出すことを意味しています。この為に肺内の圧力は大気圧より高い状態でなくてはなりません。酸素を運ぶのは赤血球に含まれるヘモグロビンです。肺胞内の圧力が高い方が効率よく、酸素がヘモグロビンに吸着します。このため、呼吸の息を吐き出すタイミングが一番効率よく酸素を血液中に取り込めるタイミングなのです。反対に、息を吸い込むタイミングは肺内の圧力が大気圧に比べて低い状態なので、このタイミングでは息を吐き出すときと比べると十分な酸素の取り込みを行うことができません。つまり全身への酸素供給量は不足気味になります。
 一般成人健常者の心拍数は50~90[拍/分]と言われます。これに対して呼吸は16~20[回/分]で、心拍動より呼吸の方が3~4.5倍ほどゆっくりした動作となっています。このため、右心房の洞房結節で血中溶存酸素濃度を検出した結果が反映されるのに呼吸とのタイミングが合わないと大きな時間遅れが発生してしまうわけなのです。
 その結果、図5の上段に示すように、通常の安静な状態では心拍数は安定せず、揺らぎを伴います。これが解剖学的にも制御理論的にも正常な状態なのです。しかし、人体に高負荷がかかったり、負荷に耐える体力がない状態ではむしろ制御が安定し、心拍数は安定する傾向にあるのです。私も徹夜48時間を経過した状態で心拍数を測定したら安定しており、一目で怖い状態である(棺桶に片足を突っ込んでいる)ことがわかりました。心電図などの瞬時心拍数測定手段を持っておられる方はゆっくりと脱力しながら息を吐き出すと心拍数を下げることができますから試してみて下さい。これがヨガや太極拳で呼吸法がマスターの重大要素とされる理由です。原理がわかってしまえば簡単に習得できるのかもしれません。

 体験版ソースのSample.htmの最初の部分の変数flagの設定を変更することで、緑色(Green)だけでなく、赤色(Red), 青色(Blue)の成分も表示することができます。緑色成分は心拍動に伴う血圧変動で毛細血管の動脈血の流れる部分の太さが変わることで変動する成分だけが良く観測できる波長帯域ですが、赤色は様子が違うはずです。血圧変動以外に、呼吸による血中溶存酸素濃度の変化に伴うピークも出現していることが確認できるはずです。図6に実測事例を示します。

 以上のように、通常のRGBカメラ画像には、いろいろな情報が含まれており、血圧、血流、溶存酸素濃度、血糖値などを非接触センシングできる余地が残されています。
                        2013年5月26日記載

【図6】RGB観測結果の事例

【FFTという周波数解析法は脈拍測定には不向き】

 以上の説明から明らかなように、脈拍は非定常な安定しない波です。脈拍に限らず生体の信号は全部周期が定常ではありません。ですから『FFT(Fast Fourier Transform)の解析で周波数成分を抽出する』という考え方は全く無意味な行為であり、正しい結果が得られません。何故ならFFTは同じ状態が永遠に継続する事を前提とした変換であるからです。
 医学関係やIT系の生体信号の解析等の論文にこうした間違いを平気で書かれている方がおり、しかも査読を通過しているというのは大変残念なことです。正しい理解で多くの非接触センシングの実用化がなされるであろうと思います。
 また、画像による非接触バイタルセンシングは、画像処理系のソフトウェアの範疇と思われがちですが、何か開発をされようとするなら、必ず心電図や血圧計、インピーダンス・プレチスモ・グラフィーなど古い機器で接触センシングする方法で目的のバイタルの計測を行って感覚を養うべきだと思います。

【File APIを使う方法を検討中】

HTML5のLocal multimediaに対応していないブラウザの救済策の必要性や、他のデバイスで撮影した動画を使う用途もあると考えたので、
File APIを使う方法を検討しています。File APIを使って、ローカルファイルを選択あるいはドラッグ・ドロップして読込ます。これを
Base64変換をかけてデータURI形式にして、videoタグのソースにするわけです。 ⇒ ■試作中のソース
IEはHTML5の対応が遅れているのでこの救済が目的です。 世界的にはIEのシェアは低下していますが、日本ではまだシェア50%もあるのです。
IEはこんなに動作が遅くて機能も残念なブラウザなのに、日本では新規にブラウザをダウンロードするマニアックなユーザーが少ないということなのでしょう。 (Microsoft社はWindows AZUREという独自クラウド・サービス推進のためわざとブラウザの機能を落としているようですね。セキュリティーは理由をつけているだけで、自社のクラウドサービス・シェア拡大が目的であることは明らかだと思います。)
canvasのgetContext('2d')は私のWindows7機では不具合がありますが、Googleが提供するexcanvas.jsを使えば一部機能を除いて機能しました。
IE10はFile APIに対応しているようですし、なんとかできる可能性はあります。
今後、枠の位置やサイズを動的に変更できる仕様にする必要がありますね。
利用方法としては、TVや撮影済み映像データからの脈拍センシングです。
例えば、キスシーン演技中の女優さんの心拍数の変化等を検出することができれば、芸能報道ネタになるかもしれません。
国会証言でも平静を装っても心拍数を誤魔化す事は常人には困難な行為だと思います。嘘発見には効力を発するでしょう。

声のスペクトル分析で電話の声などから嘘を見破るソフトの原理も、血圧上昇に伴って声帯組織の硬さ(音響特性)に変化がでて
主スペクトルがわずかに高くなるなどの原理を使っているわけですから、心拍数の上昇、呼吸等も映像データから取得できる
ようになれば、嘘は付けなくなるわけです。

【トランジスタ技術2013年4月号(3月9日発売)記事関連YouTube動画】

就寝中の人の呼吸と脈拍をセンシングするための見守りシステムの試作プログラム。就寝の妨げにならないように、暗闇でもKinectの赤外線プロジェクタを照明代わりにしている。

【Kinect版プロジェクトファイル】●SDK Ver.1.6用  ■Version3(/2013/01/25/) ■Version5(/2013/03/09/)

【YouTube】Upload Date 2013/01/24 19:57 GMT(Greenwich Mean Time)
 


【ゆらぎマップの実測事例紹介】

左は心電図のR-R間隔から求めた心拍揺らぎマップです。実質的に脈拍揺らぎマップと同じものです。多くの心電図計測結果を突き合わせたところ、ゆらぎ幅は身体年齢、疾患、リラックス度に関係がとても強いようです。入浴などの軽い運動負荷がかかった状態で、湯水を介して浴槽心電図の測定を行ったところ、この傾向はより顕著に現れることがわかっています。
まぁ、あくまでも目安程度のものでしかありませんが、一度遊んで見てください。





【タイマーイベント処理の説明】

サンプルソフトでは以下の処理を33ミリ秒毎に繰り返すコードになっています。

   //*****************************************************
   //【カメラ画像キャプチャ・イベント】
   //*****************************************************
   function VideoCapture()
   {
      //【タイマーをクリア】
      clearTimeout(NTL_Camera.Timer);

      //【もしカメラの映像Streamがあれば測定を実行】
      if (NTL_Camera.localMediaStream) {

         //【波形表示用canvasをクリアして透明にする】
         NTL_Camera.ctx1.clearRect(0,0,NTL_Camera.Width,NTL_Camera.Height);

         //【波形表示用フレームを定義】
         NTL_Camera.ctx1.strokeStyle="rgba(255,0,0,1.0)";
         NTL_Camera.ctx1.strokeRect(0,0,NTL_Camera.Width,NTL_Camera.Height);

         //【video映像を部分(60×60画素)的にcanvasに描画】
         NTL_Camera.ctx2.drawImage(
             NTL_Camera.video,
             NTL_Camera.Left, NTL_Camera.Top, NTL_Camera.Span, NTL_Camera.Span,
             0, 0, NTL_Camera.Span, NTL_Camera.Span );

         //【黄色の測定枠を描画】
         NTL_Camera.ctx1.strokeStyle="rgba(255,255,0,1.0)";
         NTL_Camera.ctx1.strokeRect(NTL_Camera.Left,NTL_Camera.Top,NTL_Camera.Span,NTL_Camera.Span);

         //【Drag中の測定枠を描画】
         if(NTL_Mouse.Drag=="true")
         {
            NTL_Camera.ctx1.strokeStyle="rgba(200,200,200,0.7)";
            NTL_Camera.ctx1.strokeRect(NTL_Mouse.MX,NTL_Mouse.MY,NTL_Camera.Span,NTL_Camera.Span);
         }

         //【画素データを読み込む】
         NTL_Camera.Buf = NTL_Camera.ctx2.getImageData(0,0,NTL_Camera.Span,NTL_Camera.Span);

         //【キャプチャした画像データに外枠を描画】
         NTL_Camera.ctx2.strokeStyle="rgba(255,128,0,1.0)";
         NTL_Camera.ctx2.strokeRect(0,0,NTL_Camera.Span,NTL_Camera.Span);

         //【脈波抽出処理】
         //*****************************************************
         //【脈波抽出処理】関数DetectWave();
         //*****************************************************
         //function DetectWave()
         //{
              GetSum();                     //【矩形領域内の総和を計算】
              GetFilter();                  //【矩形波相関フィルタの演算】
              PutFIFOData();                //【各演算結果を表示用FIFOに格納】
              GetMaxAmplitude();            //【最大振幅を取得】
              DisplayWave(NTL_Camera.ctx1); //【RGBをそれぞれ描画】
              GetHBRValue(flag&3);          //【脈拍検出処理】
         //}
      }

      //【次のタイマーをセット】
      NTL_Camera.Timer = setTimeout("VideoCapture()", NTL_Camera.Interval);
   }
【関数】GetSum()
NTL_Camera.Buf.data[]はBlue, Green, Red, Alphaの順で並んだバイト配列です。色別に60×60画素分の画素値の総和を求め、HB.Sum[0](青)、HB.Sum[1](緑)、HB.Sum[2](赤)に格納します。なお、HB.Sum[3]はサンプリング時刻(単位はミリ秒)です。

【関数】GetFilter()
矩形波相関フィルタですが、標準的な脈拍数は50~100拍/分を測定するために、窓幅20, 24, 28サンプルの矩形波相関フィルタを重ねてバンドパス型にしている。矩形波相関フィルタを通すと、バンドパスフィルタなので直流成分がカットされ、脈波は0を基準として正負に変動する。

【関数】PutFIFOData()
波形表示用に過去20秒分の測定データをポインタで管理されたFIFO(First-In First-Out)メモリに格納する。

【関数】GetMaxAmplitude()
FIFOに格納された脈波の最新5秒間の最大振幅を求め、表示スケールとしている。

【関数】GetHBRValue()
脈波のピーク間の時間Δtから60/Δtを求めて脈拍数としている。

【関数】NREstimation()
脈拍検出処理関数GetHBRValue()内で使用しているノイズ除去関数。測定曲線を最小二乗法で放物線近似する基底遷移アルゴリズムにより漸化式で未知数を推定している。
  var value=HB.RectSum[ch];
  NREstimation(value);
  value=NR.u[2]; //【未知数c】

【矩形波相関フィルタの改善点】

メルマガ配信時点では、4月号の記事の移植版に過ぎないものでしたが、最新版では、幅の異なる矩形波相関フィルタ(20,24,28サンプル)を3つ並列に接続しています。これにより心拍揺らぎにも応答しやすくなりました。
矩形波相関フィルタ自体は枯れた技術です。20年以上前に考案した技術です。PICマイコンのような非力なマイコンでさえ、リアルタイムに実行可能なアルゴリズムです。詳しくは【特願平2-262015】【特公平7-67440】を参考にしてください。

【ノイズ除去フィルタの理論】『基底遷移アルゴリズム』

~ノイズの混入したサンプリング・データを遅延させずにノイズ除去~

~推定した放物線ピーク時刻を用いて脈拍数の精度を飛躍的に向上が可能~

20年程前に思いついた基底遷移アルゴリズムを使って測定曲線をリアルタイムに放物線で近似してノイズ除去を行う方法です。
トランジスタ技術2012年8月号のKinect特集では、関節の円運動を推定するために同じアルゴリズムを使っています。
詳しくは、【特許第3718856】を参考にして下さい。
        記載日 /2013/04/16/

【アルゴリズムの説明】

通常、混入したノイズを除去するにはローパスフィルタ(LPF: Low pass Filter)や複数のサンプリング・データを加算平均する方法が取られます。しかし、どちらも時間方向に遅れを伴う欠点があります。そこで今回は、将来的にはフレーム毎(30FPS)に精確にサンプリングをΔt=33.3[ミリ秒]間隔で行うシステムが構築できると考えた前提条件の下で、時刻単位をΔtとし、現在時刻を時刻原点0と考えると、図1に示すように常にサンプリング・データが整数{ j=0, -1, -2, -3, -4, ・・・・・, -(n-1) }となることに着目して放物線で最小2乗近似を行うことにしました。といっても連立方程式を解くのではなく、トランジスタ技術2012年8月号のKinect特集で円運動を推定するジェスチャー判定のアルゴリズムで紹介した筆者考案の『基底遷移アルゴリズム』を用いています。


【図1】放物線近似の考え方

実測サンプルをS(t)、推定曲線をO(t)とします。

そうすると、瞬時誤差はe(t)=S(t)-O(t)となるので、最小二乗法の評価関数Eは例えば未知数aに関して次式のように変形できます。

ここで、



です。
最小二乗法を線形関数に適用すると図2に示すように評価関数Eは各未知数(a, b, c)に関して常に上に開いた放物線となります。未知数の良い推定値はより小さなEとなる値です。放物線の性質から未知数を放物線の軸値(B/A)に修正すればより良い未知数推定値が得られることがわかります。

【図2】未知数a, b, cと評価関数Eの関係

つまり未知数aの場合には次式のように軸値に修正することを意味します。

各未知数a, b, cを推定する次の漸化式が得られます。



上の漸化式の収束性は良好で交互に数回(10回程度)繰り返せば収束します。そして現在値はcで得られます。(但し、a, bもcとともに推定しなければなりません。)
ここで、上記各漸化式の第2項の分母は予め判明している整数値の時刻で演算できる要素です。



これらの係数Ka, Kb, Kcは最初に1回だけ演算しておけば演算負荷を節約することができます。
毎回の未知数推定アルゴリズムは次式のようになります。



実際に高精度なセンサを併用して脈拍測定を行えばわかりますが、脈波にはいろいろな原因で発生する波が含まれており、ピーク時相が識別しにくくなっています。これは心電図のR波ピークの場合と同じです。
そこで、放物線近似の特徴を生かして、放物線の軸の時刻とピークを求めることもできます。



【Apacheのインストール方法】

http://geocities.yahoo.co.jp/http://web.fc2.comなどの無料でレンタルできるサーバーがありますので
このページで紹介したHTML5+JavaScriptなプログラムは簡単に試すことができると思います。
しかしプログラムをいちいち外部サイトにFTPを使ってアップロードして動作確認を行うのは面倒な作業です。
ご自分のパソコンがWindowsパソコンなら無料のApacheをインストールすれば
外部サーバーを必要としないでスタンドアローンでのテストが可能になります。
以下のようにしてインターネットに接続しなくても3Dスキャナ向け角度検出の体験をすることができます。
以下にインストール手順を説明します。

【Apacheインストール時の表示画面】

ApacheのWindows用インストールプログラムは以下のサイトで入手することができます。
  【Apacheダウンロード・サイトURL】http://httpd.apache.org/download.cgi
Apache HTTP Server 2.0.64にはwindowsで動作するApacheのインストールプログラムがあります。
  ●Win32 Binary without crypto (no mod_ssl) (MSI Installer):
   httpd-2.0.64-win32-x86-no_ssl.msi
  ●Win32 Binary including OpenSSL 0.9.8o (MSI Installer):
   httpd-2.0.64-win32-x86-openssl-0.9.8o.msi
【概略導入手順】
  ① Nextボタンをクリックします。
  ② ライセンスに同意(accept)します。
  ③ Nextボタンをクリックします。
  ④ ドメイン名、サーバー名、サーバー管理者メールアドレスを入力します。
  (公開サーバーにするのでなければ適当に入力しても問題ありません。)
  ⑤ TypicalのままでNextボタンをクリックします。
  ⑥ Changeボタンをクリックしてフォルダをc:\Apache Groupeに変更します。
  ⑦ Installボタンをクリックしてインストールを開始します。
    ⇒⑧のように表示されます。
  ⑨ Finishボタンをクリックします。




【Apache設定手順】

前の節でApacheをC:\Apache Groupに設定すると、C:\Apache Group\Apache2\confフォルダ内に
httpd.confが見つかるはずです。以下のように修正します。
 ① LANに接続して他のコンピュータから使うのであれば、
  一行上の例に習ってそのコンピュータの固定IPアドレスに変更します。
   Listen 80  ⇒ 例:Listen 12.34.56.78:80
 ② サンプルプログラムを置いているフォルダを指定します。
   DocumentRoot "C:/Apache Group/Apache2/htdocs"
   ⇒ 例:DocumentRoot "C:/MyWeb/Uk"
 ③ 上記と同じフォルダを指定します。
   <Directory "C:/Apache Group/Apache2/htdocs">
   ⇒ 例:<Directory "C:/MyWeb/Uk">
 ④ 筆者は*.htmlとせず、*.htmとしています。
   DirectoryIndex index.html index.html.var
   ⇒ DirectoryIndex index.htm index.htm.var
 ⑤ 上書き保存します。
 ⑥ この設定でApacheを起動するため、一旦Apacheを停止します。
  スタートメニューでApacheを探すと、StopとStartが見つかるはずです。
  Stopを右クリックでメニューを出して、『管理者権限で起動』してください。
 ⑦ 同様にStartを右クリックでメニューを出して、『管理者権限で起動』してください。

【使い方】

最新のGoogle Chrome, FireFox, Operaのいずれかを立ち上げ、
例えばC:\MyWeb\UkにWebCamフォルダを設置している場合にはアドレス欄に
  http://localhost/WebCam/Sample.htm
と入力します。
Windows8の場合はスタートメニューがありません。
Modern Style画面の何もない壁紙上で右クリックを行うと
画面右下に下のようなアイコンが表示されるので
クリックすると、横に長い一覧が表示されます。
     
そこを丹念に調べれば、きっと以下のアイコンが見つかるはずです。
     
右クリックしてメニューを出し、『管理者として実行』します。

【その他の注意】

あなたのパソコン上でサンプルプログラムのデモを行う場合には以下のように設定します。

【Javaのアンインストール】

インターネットに接続するパソコンなら悪意のページをアクセスしてウィルスを感染させない様にするためアンインストール推奨です。
なお、JavaとJavaScriptは全くの別物です。

【セキュリティーソフト】

ウィルスバスター、マカフィー、カスペルスキー、RegClean等のソフトは全部アンインストールし、Microsoft社のSecurity Essentialをインストールします。

【Windows7のフリーズ対策】

『Windows7の頻繁なフリーズ現象の原因について』に書いた対策を取って下さい。

【Interface 2013年1月号】『研究 人間センシング』

  この記事のサポートページは『Kinectが変えるセンシングの世界』です。

■第1章
 距離/速度/傾斜角/衝撃/振動/周波数...マイコンに付け足してレベルアップ!
 動きセンシングの超定番! 加速度センサの基礎 pp.44-50
■第2章
 市販モジュールで試してわかる! 通信/設定/読み出しの基本
 動きセンシングの超定番! 加速度センサの使い方 pp.51-56
■Appendix 1
 温度センサ&マイクで呼吸を測る pp.67-69
■Appendix 2
 GPS×地図でセンサ・データをレベルアップ! pp.70-73
■第6章
 2m離れた対象との距離を精度1mm以下で! 奥行きカメラKinectの性能を高めるための信号処理
 研究! 非接触でヒトの息づかいを測る pp.98-105
■第7章
 チカチカ点滅する照明の影響を信号処理で低減!
 手の位置と叩いた瞬間を検出! バーチャル・ピアノの製作 pp.106-108
■第8章
 赤外線映像の新しい活用法を探る
 研究! 15~50cmの至近距離でジェスチャ検出 pp.109-113
■第9章
 微小な生体信号をとり出すにはアナログ回路とノイズ低減信号処理がカギ
 心電計に学ぶ! 医療/ヘルスケア装置づくりの勘どころ pp.114-126

【トランジスタ技術 2012年8月号】『奥行きカメラKinectで 3D計測』

  この記事のサポートページは『Kinectが変えるセンシングの世界』です。

■見えない量をビジュアルに!
 奥行きカメラ Kinectで3D計測  特集執筆:上田 智章
■イントロダクション 奥行きカメラKinectの誕生で広がる
 撮影して可視化! 3次元センシングの世界
■第1章 2万円そこそこのモーション・キャプチャ・センサ Kinectの誕生で個人でも試せるように
 センサで計測したデータをカメラ画像に重ねる「拡張現実技術」
■第2章 無数の光の玉をターゲットに照射して全体の距離情報を一気にGET!
 徹底研究! Kinectが3次元情報を抽出するしくみ
■Appendix1 USBカメラと点光源で奥行き検出を再現してみる!
 実験でわかる! Kinectの測距メカニズム
■第3章 3次元位置検出のアルゴリズムを実証し,さらにKinectの弱点を克服!
 USBカメラとプロジェクタでオリジナルKinectを手作り
■第4章 温度/明るさから磁界/3軸加速度までさまざまなセンサを接続できる
 汎用センシング・プローブの製作
■第5章 Kinect用の無償ソフトウェア開発キット Kinect for Windows SDKやVisual C# 2010 Express
 3次元センシング・アプリケーションの開発環境を無償で準備
■第6章 カラー画像や奥行きデータを取り込んだり,骨格を抽出したり
 Kinectの基本操作用プログラム・サンプル
■Appendix2 明示的に意図が表現される円弧運動でコマンドを出す
 ジェスチャでKinectに合図してリモート操縦 自由自在
■Appendix3 Start/Stopを認識させセンサ・データを取り込む
 声でKinectをリモート操縦
■Appendix4 X,Y,Zの3軸データを色分けしたりなめらかな曲線で結んだり
 実写画像に重ねる3次元測定データを2次元で見やすく表示する


秀和システムさんより発売中。
『Kinect for Windows SDKプログラミング Kinect for Windows V2センサー対応版』
   単行本発売開始 – 2015/5/22
   中村 薫 (著), 杉浦 司 (著),
   高田 智広 (著), 上田 智章 (著)
   単行本 ¥3,672   Kindle版 ¥3,060

 ■本書で紹介されているサンプルプログラムの入手に関して


【ルネサス センシングソリューション展 B2】

■2014年3月14日(大阪),18日,19日(東京)
 Smart Analogを非接触バイタル・センサへ応用する事例紹介
 PowerPoint資料のダウンロードサービスを行います。zip形式です。
 『静電容量型近接センサ』及び『Light Coding技術を用いた光学レンズを
 用いない赤外線モーション・非接触バイタルセンサ』
 ●イントロダクション (過去の取り組み:非接触画像センシング)
 ●静電容量式センサ
 ●赤外線式センサ
 ●赤外線式ハンドモーションセンサ
 ●Q&A

 そのうち暇を見つけて詳細な記事ページを用意します。

左側:IC101, 右側:IC500
●IC101:16ビットΣΔ-A/Dコンバータ(UART/SPI)+PGIA+温度センサ+電源+マルチプレクサ+フラッシュメモリ
●IC500:反転増幅/非反転増幅/差動増幅/IVコンバータが選択できるConfigアンプ3個+同期検波+LPF+HPF+温度センサ+OPアンプ1個+SPI

【静電容量式センサ】直列LCR共振回路のCをP板で構成。結合容量変化を捕捉。
【赤外線式センサ】単峰性赤外線レーザーを使ったLight Coding方式。レンズなしのフォトダイオードで環境光の10万分の1の反射量変化を捕捉。
【ハンドモーションセンサ】ドミソ(C4,E4,G4)の周波数でパルス変調した3光源とレンズなしのフォトダイオード。周波数ごとの振幅値から3次元座標を取得。