【Kinectが変えるセンシングの世界】

トランジスタ技術【増刊】『今すぐ使える パソコン計測USBマイコン基板』の付録で作る~
    【リンクフリー】 私設研究所ネオテックラボ Neo-Tech-Lab.jp
【記載者】 【私設研究所Neo-Tech-Lab】 上田 智章
作成日 2012/06/09
更新 2012/06/09
更新 2012/07/07
最終更新 2013/01/14
ここにチェックボックス型外部コンテンツ・メニューが入ります。




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

【お知らせ】

Windows7でChromeがフリーズを起こす場合は、コントロールパネル⇒管理ツール⇒サービス でWindows Media Player Network Sharing Serviceを停止かつ無効にします。Micorosoftのバグです。
NeoTechLabへ、ようこそ。現在、YouTube APIの仕様変更に伴い、BGM Playerは工事中です。

【はじめに】

 このページは、CQ出版株式会社トランジスタ技術2012年8月号(7月10日発売)に投稿した記事『見えない量をビジュアルに! 奥行きカメラKinectで3D計測』及びインターフェース2013年1月号(11月25日発売)の記事『研究 人間センシング』の筆者個人サイト内サポートページです。
 以下に記事に登場するサンプル・プログラムと実験や説明のYouTube動画を置いておきます。

★XBOX360用のKinectでもVisualC# 2010とSDKの基なら動作します。

CQ出版インターフェース5月号『あなたの知らない生体計測の世界』
CQ出版インターフェース5月号『あなたの知らない生体計測の世界』体験版ソフトウェア
   上田 智章、鈴木雅弘
 ①単眼3Dセンシングの機能を除いた機能限定版(Windows10対応版)
 ②起動後、左側にあるボタンをクリックしてimageフォルダ内の画像データを選択します。
 ③実行後有効になるもうひとつのボタンをクリックしたあと、imageフォルダを確認してください。
 ■見やすくするには、ヒストグラムの指定範囲に対してガンマ補正をかけるのが有効です。
 ■スマホやデジカメで撮影したJPEG写真データをいろいろお試しください。
 ■本ソフトウェアは皮膚と同様に衣服の繊維も透過する特性があるため3Dセンシングは現時点で実装から外しております。ご理解ください。
 


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

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

【題  名】㉑『距離画像センサの測距原理と3Dセンサの応用』
【副  題】~Structured Light, Time of Flight, LiDAR等の測距原理から非接触生体センシングの原理とその応用まで~
【開催日時】2019年4月12日(金) 10:00~17:00
【会  場】オーム ビル(千代田区神田錦町)
【受講料】47,000円(税別、1名) 59,000円(税別、1口・3名まで)
【開催履歴】
  (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日 (14)2017年03月24日 (15)2017年07月7日
  (16)2017年11月02日 (17)2018年03月13日 (18)2018年5月28日
  (19)2018年8月29日 (20)2018年12月5日

【概略内容】
 自動車分野では、自動運転化を実現するための探索センサ、搭乗者の健康状態モニタ、ユーザーインターフェースとして、距離画像センサを組み込んだ3Dセンサに関心が集まっている。また、世界的な先進国少子高齢化を踏まえ、2025年開催予定の大阪万博のテーマは『健康と医療』に決まり、見守り・看取りシステムに対する関心も高い。
 本セミナーでは距離画像センサとカラーカメラを組み込んだ3Dセンサの基本機能、ソフトウェアで実現できる応用事例をデモを通して紹介するとともに、方式別に測距原理の説明を行い、非接触生体センシングを中心とする応用とその原理について解説を行う。また、Shannonのチャンネル容量の法則を利用した増感処理やマッチング処理の原理や応用についても触れる。
■その他、SDKのセットアップや基本的な事例の資料は添付、あるいはサンプルプログラムのダウンロードができます。


Microsoft社のKinect V2 / Azure Kinect (V4)


高解像度デプスイメージの例


iPhone6で撮影したカラーJPEG画像から真皮層内毛細血管や皮下組織内の血管を可視化した事例など


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

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


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

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

  
  

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

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



【Long Exposure Depth Camera(Kinect Fusion風)ソース公開】

Developers Preview Kit購入者にのみ公開されているKinect Fusionですが、ToFノイズが大きく、V1に劣ります。そこで、似たような動作をするオリジナル・アルゴリズムを開発し、試作してみました。デプスデータを100フレーム分位蓄積できるFIFOメモリを使ってリアルタイムノイズ除去を行い、0.3mm程度の解像度を実現しました。C#のプロジェクトファイルを公開します。Microsoft社のKinect FusionはGPUに頼るアルゴリズムですが、本方式はCPU側で処理を行っています。STLファイル形式に落とす事もできます。STLの表示にはBlenderがお勧めです。
【プロジェクトファイル・ダウンロード】
Kinect for Windows V2 SDK2.0 open beta版Long Exposure Depth(長時間露光デプスVer.0.03)
Kinect for Windows V1 SDK1.8版Long Exposure Depth(長時間露光デプスVer.0.03)




●Long Exposure Depth(長時間露光デプス)の動作原理

●Kinect for Windows V1 (SDK Ver.1.8)に移植した結果

●最新100フレーム分のFIFOによるToFノイズ低減処理部分(カメラ空間座標演算部を含む)

●画素単位の光源計算処理部分


●上半身が写っているケース

●全身が写っているケース


【WebSocket】『Kinect for Windows SDK Ver.1.8』

WebSocketという機能を使えば、簡単にテキストやバイナリのデータをブラウザに転送して利用することが可能になります。ブラウザでHTML5+JavaScriptを使えば、KinectとWebカメラやWebGL(3次元グラフィックス), WebAudioの共存利用などが行えるわけです。
このデモではブラウザはChromeを使用。320×240画素のデプスイメージをリアルタイムに伝送することができる。
【C#サンプルプログラムのプロジェクトファイルをダウンロード】

【WebSocket】『Kinect Ver.2.0』

Kinect2.0のデプス画像は512×424画素なので、かなり重くなる。

【Disclaimer】

“This is preliminary software and/or hardware and APIs are preliminary and subject to change.”

【YouTube】【Kinect+WebCam+MMD on WebGLのデモ動画】

【ルネサス センシングソリューション展 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次元座標を取得。

【Kinect for Windows SDK Ver.1.8】【HTML+JavaScriptでKinect】

Kinect for Windows SDK Ver.1.8が公開されました。
1)背景除去が行えるStream 2)HTML5+JavaScriptで使える 3)Kinect FusionでRGBキャプチャ画像の張り込みが可能になった 4)Kinect Fusionの安定性改善等。

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

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

  【注意事項】
   ■サンプルプログラムVer.0.17 (SDK Ver.1.7に対応)
   ■サンプルプログラムVer.0.18 (SDK Ver.1.8に対応)
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ではTOF(Time of Flight)方式でデプスカメラを実現しているのでより遠方でもこれが可能になると考えられます。(胸部心拍動0.3mmpp)

【Kinect for Windows Contest 2013】
【技術賞受賞】


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

【Kinect for Windows Contest 2013】
【技術賞受賞】
 [2013/09/19]

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活用でビジネス化を目指せ!!【後編】


【Kinect for Windows SDK Ver.1.7 or 1.8】【C#サンプルプログラム集】

Kinect for Windows SDK Ver.1.8はVer.1.7のサンプルを変換してくれるようです。SDK Ver.1.7またはVer.1.8で使える15種類のサンプルプログラムをプロジェクトファイルごと公開します。

①『RGBカメラと内蔵3軸直交加速度センサ』

RGBカメラを640×480画素30FPSで初期化し、キャプチャーを行います。Kinect内蔵の3軸直交加速度センサの値を読み取ることができます。また、±27°の範囲で仰角を設定変更することができます。水平方向が0°になります。

②『デプスカメラ(疑似カラー)』

デプスカメラを640×480画素30FPSで初期化します。疑似カラー表示で表示を行います。Defaultモード(800mm~4000mm)とNearモード(400mm~3000mm)の切り替えが可能です。画面中央のクロスライン上の点までの距離を表示することができます。

③『デプス画像を人物部分だけ切り取って背景画像上に表示』

デプス値(16bit)の下位3bitのPlayerIDを使って、人物部分だけを切り取る方法を使っています。PlayerIDを取得するにはSkeletonStreamを許可しておく必要があります。

④『デプス画像を人物部分だけ切り取ってRGBカメラ画像上に表示』

カラー画像とデプス画像の位置合わせを行うために最大10mまでデプス観測のできるモードを使っています。DepthImagePixel構造体ではデプス値を16bitで取り扱うことができます。Coordinate Mapperという機能によりデプス画像をRGBカラー画像の座標に変換しています。

⑤『骨格追尾』

骨格追尾では人体の20カ所の関節の3次元座標(単位m)の取得が可能です。

⑥『骨格追尾で両手の移動履歴を表示』

このサンプルでは右手と左手の移動履歴を表示することができます。Kinectの骨格追尾では人体はKinect側を向いていることが前提となっているため、反対側を向くと左右が入れ替わってしまいます。

⑦『両手の円運動を検出するジェスチャー判定』

右手あるいは左手の運動履歴から円の中心座標を推定し、半径や移動領域と中心の関係から、点、線分、円弧、円の4通りのジェスチャーを判定します。

⑧『YouTube動画をジェスチャーで切り替える』

右手の所定半径以上の円運動を検出して、YouTube動画を切り替えます。本来は音声認識との併用が好ましいです。

⑨『音声認識、音源方向推定、ビームフォーミング』

上、下、水平と発音するとKinectの仰角が変わります。他にもForm上に記載した予約語がありますので試してみてください。また声の方向を検出することや音を拾い易くするアクティブビームフォーミングも実行することができます。

⑩『拡張現実演奏システムLite版』

キャリブレーションボタンのクリックで、枠内のデプス値を記憶します。手でその枠内に手を触れると音が鳴ります。何でも楽器にできる拡張現実演奏システムの体験版です。あらゆる場所にタッチスイッチを設けることができる方法として応用可能です。

⑪『サイバーアイ(Cyber Eye) Ver.2.0』

音で物を見る代替視覚システムです。音階は距離に対応しています。

⑫『Kinect版呼吸・心拍センシング』

下側の枠を鎖骨下付近に、上側の枠を顔(頬)・手のひらなど皮膚の露出部分に来るようにして静止状態で5秒間ほど待つと心拍(ピンク)・呼吸(緑色)で表示します。

⑬『呼吸センシング(単体)』

かなり初期の呼吸センシングのデモ。基底遷移アルゴリズムによるノイズ除去と波形予測のデモを行っています。

⑭『DirectXとKinect SDKを同時に使う例』

キャプチャ画像を背景画像として表示し、手前にDirectXで描画した画像を表示するサンプル

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

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

Kinect for Windows Contest 2013に出したデモ・プログラムです。骨格追尾の処理辺りは近々改良の予定です。

【その他関連ページやHTML5+JavaScriptのサンプルプログラム】

以下のページを参考にしてください。

【Kinectの動作原理関連】

【Kinectや非接触バイタルセンシング関連】

【Webカメラによる非接触バイタルセンシング関連】

【円形マーカーと円運動推定の関連】

【Webカメラ画像でm系列符号を用いた回転角度を読み取る】

【HTML5+JavaScriptで3次元グラフィックス描画】


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


Interface2013年10月号

3次元グラフィックスはWebGLを使わず、Canvas用NTL3D.jsを使用しています。
障害物でマーカーの一部が欠けても検出可能なオリジナル・アルゴリズムで開発。アルゴリズムの動作原理はサポートページで詳細を記述・説明しています。





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

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

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



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


【HTML5+JavaScript】『Canvasで3次元グラフィックス』

   【最新レベル】『NTL3D.js』 Version0.20

WebGLは使えるブラウザに制約があるので、HTML5+JavaScriptでCanvas(2D)に改造を施し、ソフトウェア的に3次元グラフィックスを実装する作業(NTL3D.jsの開発)を進めています。現在最新のGoogle Chrome, Fire Fox, IE11, IE10, IE9, Opera, Safariに対応しました。XP, VistaのIE9でも動作可能になりました。

 ●基本サンプル『テクスチャーマッピング』
 ●サンプル1『回転するピラミッド』
 ●サンプル2  ●サンプル3  ●サンプル4
 ●サンプル5『Webカメラ等高線図処理』
  サンプル5はWebカメラを使うので、Google Chrome, FireFoxのみ対応。
NTL3D.jsのサポートページは別ページにて情報公開中。

【参考】

●WebGLに関しては別ページにて情報公開中。
 ■Perfume Global Dataの例
●MikuMikuDanceのPMDフォーマットやExcel VBAの3次元描画ライブラリに関しては別ページにて情報公開中。
●Web音声合成に関しては別ページにて情報公開中。




【Webカメラと市販プロジェクタでプロジェクションマッピング】

   【最新レベル】『NTL3D.js』 Version0.19

呼吸センシングの座標計測技術とテクスチャーマッピングを応用して、プロジェクション・マッピングに挑戦してみました。狭い部屋の壁に35cmの段差があるのですが、この部分に市販プロジェクタで投影して凹凸段差を解消した投影を行う実験を行いました。今後より複雑な凹凸にも対応するソフトウェアを作成しようと思います。



【トランジスタ技術2013年08月号】
2013年7月10日発売

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

     【最新レベル】Version0.17

右図にWebカメラによる呼吸センシングの最新実測結果を例示します。ご覧のようにKinectのデプス画像を処理して得られる最大距離分解能(50μm)を超える観測分解能レベルに達しました。しかもノイズ除去処理はまだ行っておらず、生波形です。
アルゴリズムは基底遷移アルゴリズムを用いていますが、現段階では式の導出は非公開(2013年8月30日(金) トリケップス 非接触生体計測関係技術セミナー1日コースにて公開予定。)です。 今後、呼吸・心拍・血中溶存酸素濃度等の統合センシングの実装作業に進む予定です。
    記載:/2013/06/09/ 追記:/2013/07/07
  ●【HTML+JavaScript】『Webカメラで呼吸センシング体験ページ』≪スポット光≫
   推定アルゴリズムは基底遷移則を使用。



【Webカメラで呼吸センシング!】

            Version0.03

トラ技メルマガ(2013年5月31日)配信の『Webカメラで呼吸をリアルタイム非接触センシング』の体験リンクを示しておきます。きわめて初期の成果物ですが、Webカメラだけで体験することができます。使い方はサポートページに記載しましたので、そちらをご覧ください。呼吸を測定しやすい場所は私の場合には、鎖骨の下でしたが、肋骨の剣状突起付近がよいという方もおられるようです。現時点の感度は不足していますが、KinectやWebカメラで心拍・呼吸を初めて検出に成功した段階ではこれより悲惨な状態でしたからきれいな測定曲線は得られると確信しています。
  ●【HTML+JavaScript】『Webカメラで呼吸センシング体験ページ』≪環境光反射量変化≫


【Interface2013年08月号】
2013年6月25日発売

【ベールを脱いだKinect2.0】

2013年5月21日に米国ワシントン州レドモンドでMicrosoft社がPress Conferenceを開催し、年末にXBOX Oneを発売することと、同梱されるKinect2.0の新機能などを公開した。右のWIREDのYouTube動画にはKinect2.0の新機能が詳しく紹介されている。デプスカメラはTOF(Time Of Flight)方式に変更になった。これは光の飛行時間を変調波の位相遅れという形で検出する方法だ。対応する特許はUS20110188028で詳しく説明されている。これによって距離によらず精確な測距が可能となったため、骨格追尾(Skeletal Tracking)の精度が向上し、親指とそれ以外の指の追尾も可能になった。Grab/Pan(グー/パー)の認識が可能になったわけだ。
加えて、Orientationモードが追加された。これはボーン・ベクトルと回転がキャプチャできる。つまり、ポーズを折れ線近似でキャプチャーするのではなく、顔や体の向きまでもキャプチャーできるようになったのだ。
それだけではない。Muscle+Forceモードという『ドラゴンボール』に登場する『スカウター』のようなモードもある。フレーム間の観測から各部の速度、加速度を検出し、物理エンジンと組み合わせて、重力の影響も考慮して、筋肉にかかる力(f=ma)の可視化が行えるようになり、キックやパンチの強さ(エネルギーE=1/2・mv^2)までわかるようになったようなのだ。
さらに、Expressionモードという表情判断機能があり、右眼・左眼・口の開閉状態、会話中か否か、メガネの有無、何かを注視しているか、表情は喜怒哀楽のいずれかなどもわかるようだ。



【ベールを脱いだKinect2.0の仕様】
2014年にPC接続用Kinect2.0も発売される予定とのこと。
7月末までに申し込んで選ばれれば、399ドル(約4万円)で購入することができ、SDKのα版、β版の試用も可能だ。
最後に心拍計測機能も実装された。赤外線カメラ画像とRGBカメラ画像(最大1920×1080画素)を組み合わせて推定しており、測定位置も自動的に合わせている。また、測定中動くと検出してリトライできる模様だ。

これとは別に、9月にSDK Ver.1.8がリリースされる予定で、Kinect Fusionで実写画像の張り込みも可能になるようだ。

Kinect2.0をいち早くGETできる先行販売プログラムに『個人資格』で応募してみたところ、8/30に『K4W Wants You!』とタイトルの付いたメールが来ました。嬉しいことに選定してもらえたようです。メモを残しておきます。
実際に入手できたらレポートも行いたいと思います。

【XBOX WIRE Media Assetsからの抜粋】

Microsoft社のXbox Wire Media Assets内の『Kinect Video_Tech_ProRes_0517』という動画(.MOV)がお勧めです。







【Interface2013年07月号】
2013年5月25日発売

【Webカメラで3Dスキャナ!】『ターンテーブルの回転角度を検出する』

【全体構成】(サポートページを分離)

製作中の3Dスキャナの全体構成を図1に示します。CDケースを利用したターンテーブルとラインレーザーとウェブカメラのみで構成される簡単な3Dスキャナです。光切断法を使って対象物の3次元形状を測定して3Dポリゴンモデルへ変換することを目的としています。
ターンテーブルに動力や回転角を検出するセンサを用いるのでは製作にお金がかかってしまうので、回転角度を検出するために写真のようなパターンをレーベル印刷しており、手動で回転させてることを前提としています。
プログラムはHTML5+JavaScriptで記述していますので、最新のブラウザ(Google Chrome, FireFox, Opera)でアクセスするだけで体験できます。
  ●【HTML+JavaScript】『ターンテーブルの回転角度を検出する』


【図1】全体構成            【図2】光切断法で3Dポリゴンモデルへ 【図3】ラインレーザー

【m系列符号パターンで角度を検出】

m系列符号は、GPSや携帯電話の通信で用いられている擬似乱数です。乱数なので白色ノイズと同様非常にシャープな自己相関特性を持っています。127ビット長のm系列符号を採用しています。カメラから観測できる手前の15ビット分のパターンと原符号の相互相関を取ると最大相関ピークの位相が回転角度に対応することを利用して回転角度を検出します。今回の分解能は1/381としましたが、さらに改善することが可能です。

【ラインレーザー】

市販の400円台の赤色レーザーポインタ・モジュールを改造して作りました。実は比較的簡単にラインレーザーを作ることができます。直径6mmのアクリル棒またはホットボンドの棒を輪切りにして接着するだけで作ることができます。アクリル棒の場合、近距離だとレーザーの輝度が高く、ハレーションを起しやすいかもしれません。ホットボンドは不透明なので内部で拡散してからラインを形成するため近距離の距離測定に適しているかもしれません。自作は面倒だという方は2200円でラインレーザーモジュールが販売されていますのでそちらをご利用ください。
 ●【ラインレーザー通販サイト①】青紫2200円
 ●【ラインレーザー通販サイト②】赤色1260円

【YouTube動画】『概要説明と角度検出原理の説明』





2013年5月10日発売
【連載】
奥行カメラで俺センシング〈3〉
『手持ちのカメラで顔や手を撮影するだけ 脈拍のイメージング』

トランジスタ技術2013年6月号

【Webカメラで脈拍センシング】(サポートページを分離)

★第100回トラ技メルマガで配信されました『第2弾 俺センシング』の『Webカメラで脈拍センシング』のページを独立分離いたします。この内容は、筆者が第127回微小光学研究会(2013年3月7日)及びトランジスタ技術2013年4月号(3月9日発売)の記事で紹介したKinectの赤外線脈波検出プログラム(Visual C#)を修正して、JavaScriptに移植したプログラム(HTML5)を組んでみたものです。Webカメラに対応した最新のブラウザ(Google Chrome, FireFox, Opera)ならPC内蔵カメラかUSB接続のカメラを使って上記リンクで脈拍非接触センシングを試すことができます。環境光ノイズ除去のため矩形波相関フィルタを使っています。検出領域のサイズは60×60画素です。内容的には記事と同じです。ヘモグロビンの吸光特性の可視光領域(緑色)を使っているか、赤外線領域を使っているかの違いだけです。上記URLは製作中のJavaScriptです。テキストなので、ブラウザの『ソースを表示』で閲覧できます。ソースを見ていただければわかりますが、緑色の画素データのみ使用しています。身体の老化やストレス度をチェックできる脈拍揺らぎマップ機能も追加いたしました。
【体験!】『Webカメラで脈拍センシング』
【サポートページ】『Webカメラで脈拍センシング』

【HTML5+JavaScript】【Version 0.48】


【参考】
富士通さんが可視光(緑色)で脈波を取る方法を2013年3月18日にメディア発表、2013年3月19日に学会発表



2013年4月10日発売
【連載】
スポーツやヘルスケアの可能性を探る
『奥行カメラで俺センシング! 第2回 知覚コンバータCyber Eyeを作る』

トランジスタ技術2013年5月号

【連載】スポーツやヘルスケアの可能性を探る

『奥行カメラで俺センシング!
   第2回 知覚コンバータCyber Eyeを作る』




【Kinectの深度情報を音に変換するサイバー・アイ】
   ダウンロードはサポートページで!
視覚障害を克服し、駅のプラット・フォームからの転落を防止するツールとして、Visual C#で試作しました。サイバー・アイ (Cyber Eye)は、Kinectのデプス・カメラで取得できる深度情報を音に変換する知覚変換デバイスです。現在は、ウェアラブルにするための研究段階にあります。将来的には、健常者にとっても後方を見守る防犯ツールとして統合する予定です。

【サポート・ページ】⇒ 『知覚コンバータCyber Eye』


2013年3月9日発売
【連載】
スポーツやヘルスケアの可能性を探る
『奥行カメラで俺センシング! 第1回 脈波と呼吸の可視化』

トランジスタ技術2013年4月号

【連載】スポーツやヘルスケアの可能性を探る

『奥行カメラで俺センシング! 第1回 脈波と呼吸の可視化』

【サンプル・プログラム】【ダウンロード】⇒ 『Kinect非接触脈拍・呼吸モニタ』[Version5]
【ノイズ除去アルゴリズムの動作原理】⇒ 『Webカメラで脈拍センシング』[Version0.48]
    (高校数学程度の学力で十分理解できる簡単な原理です。)[Base Transition Rule (1993)]

実行ファイルも添付してありますので、Kinect for Windows SDKがインストールしてあり、Kinectの接続が行われていれば、
64ビットOSのWindows7またはWindows8であれば
   Kinect_VitalMonitor5/Kinect_VitalMonitor5/bin/Release/Kinect_VitalMonitor5.exe
の実行で体験する事ができます。
最新版プロジェクトファイルです。少し矛盾していますが、胸をKinectから50cm以上離し、できるだけ頬をKinectに近づけて測定します。画面中央枠に頬が、画面左下枠が左側大胸筋あるいは心臓付近に位置するようにして、10秒程待つと自動オフセット調整が有効になります。このバージョンはKinect本来のデプス・アルゴリズムを使っているバージョンです。(Kinectの機差が未確認のためです)
以前に公開したプログラムに比べ、呼吸も赤外線脈波も処理アルゴリズムは改善しています。呼吸は応答性が良くなり、フィルタによる遅れが全くなくなりました。呼吸だけなら0.5~2.5mの範囲で捕捉できるはずです。
顔は露出している必要がありますが、呼吸の方は着衣状態は勿論、薄いタオルケットや布団の上からでも捕捉する事ができます。
測定領域の位置や大きさは、Rectangle形式で設定してありますので、数字を編集すれば簡単に変更可能です。
最近、オリジナルの骨格追尾アルゴリズムも手を出し始めたので、将来的には人に自動的にロックオンしてバイタルを計測するシステムに改良を重ねたいと思います。
Kinect for Windows SDKのバージョンは1.7でなければなりません。(もし、SDK Ver.1.6を使うのであればMicrosoft.Kinectの参照を取りなおして下さい) 起動後しばらくはKinect本来のデプス探索アルゴリズムのせいで大きな変動が伴う場合があります。(探索型だとわかりますよね)
NTL.KinectLibは都合により今回部分公開になります。幾つかのクラスのソースを添付しています。NTL.KinectLibのメソッド、プロパティーなどはオブジェクト・ブラウザで見る事ができます。 記載日 2013/03/09


【Kinectの赤外線で脈拍・デプスで呼吸の非接触モニタに成功!!】

Kinectの驚きの性能が今明らかに。反射型の赤外線脈波センシングを非接触で実現!
   Version0.3[2013年01月25日]
普通に座った状態で、『赤外線ランダム・ドット・パターンによる脈波』と『デプスによる呼吸』を非接触モニタリングすることに成功しました。
新規に考えたアルゴリズムのソフトウェア処理のおかげでInterface1月号オフ会(/2013/01/16/)のデモのときよりロバストになりました。
今後、基底遷移アルゴリズム(小脳の無意識推定処理に相当)を導入し、さらにロバスト性を高めたいと思います。
(オフ会のデモのときには脈波センシングはまだまだ不安定で頭をしっかり固定しないと検出不可能でした。今はかなり改善しています。)
YouTubeにアップロードした動画では、途中、何回か少し身体を動かしたり、首を動かしたりしてみたりしています。
波形が表示枠内に収まるようにオートレンジで実験しているので少し見づらいかもしれませんが、ちゃんと測定できているように思います。
【近未来の可能性】
★従来の赤外線脈波センサは、耳たぶに挟んだり、指を指し込んで使うタイプが殆どでした。
直接肌に接触させてさえ、慎重に取扱わないと、脈波検出を行うことができませんでした。
今回40cmとは言え、非接触でしっかりと脈波を捕捉できた事により、パルスオキシドメータとして知られる血中溶存酸素濃度のモニタ、
さらには血糖計に至るまで、非接触で離れた位置からモニタリングできる可能性が高まったと言えます。
★私設研究所Neo-Tech-Lab.comとしては、Kinectと同じように乱数の計測応用技術を駆使して、常温心磁センサ
(MCG:心臓が発する地磁気の百万分の1程度の微弱磁界)、たった1チャンネルの観測で超音波断層撮影を可能に
するHolophonic Acoustic Random Pass Sensorをも含めて実現していきたいと思う。
★最終的に目指すのは、SF映画『スタートレック』に登場する『医療用トリコーダー』です。
MRIも開放型かつ基底遷移アルゴリズムの活用で高分解能化を実現する見込みがでてきました。
非接触・無拘束・非侵襲の多機能生体情報モニタリング・システムの実現を最終目標とします。

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


【Kinectのランダムドットパターンで非接触で赤外線脈波センシング】

【Infrared Heart Rate Monitor by using Kinect Random Dot Pattern】

【古い内容です】★最新の結果は【Kinectのデプスで呼吸・赤外線で脈拍の非接触モニタに成功!!】

Kinectの赤外線ランダム・ドット・パターンを使って、顔面の脈波を非接触で計測してみました。
呼吸では距離を精密計測していましたが、脈波では反射する赤外線の強度変化を計測しています。
SDK Ver.1.6から赤外線カメラ映像のキャプチャが可能になり、16bit/画素のデータ取得が可能になりました。
照射されている赤外線の波長は恐らく827nmであると考えられます。
Kinectブログに暗視カメラを構成する場合に照射を停止させて外部に波長827nmの赤外線LED光源を使うように記載されているからです。
血液に含まれる赤血球にはヘモグロビンが含まれています。ヘモグロビンには赤外線を吸収する性質があるので、
脈拍の血圧変動に伴って毛細血管の太さが変化するので、赤外線反射量も脈拍によって変動するのです。
SDK Ver.1.6では赤外線レーザープロジェクタの照射を停止することができるようになりましたので、
2波長で測定を行えば、HbとHbO2の赤外線吸光率の違いから、連立方程式を解いて
血中溶存酸素濃度も非接触でセンシングが可能になると考えられます。



【Kinectのランダムドットパターンで非接触で赤外線脈波センシング】

【古い内容です】★最新の結果は【Kinectのデプスで呼吸・赤外線で脈拍の非接触モニタに成功!!】

こっちは掌で計測した赤外線脈波の事例です。
明らかに、顔面の方が有利のようです。



【古くなったコンテンツやドキュメント類】を分離しました。


【説明】
トランジスタ技術2012年8月号、インターフェース2013年1月号に関連したドキュメント類を分離します。

【拡張現実】KINECT、拡張現実関連動画集


【説明】
2012年8月号のKinect特集に関連した動画集です。

【Kinectで非接触・非侵襲で呼吸・脈拍モニタに成功!!】

【古い内容です】★最新の結果は【Kinectのデプスで呼吸・赤外線で脈拍の非接触モニタに成功!!】

Kinectの驚きの性能が今明らかに。
   Version0.01[2012年10月15日]、Version 0.02[2012年10月16日]、Version 0.03[2012年10月20日]
市販品のKinect for Windows, Kinect for XBOX360で1m離れた位置から呼吸をモニタすることに成功しました。
雑談していてちょっと思いついたんで、サンプルBitmap_GetDepthImageを修正してプログラムを作ってみたんですが、
(ちなみに、サンプルBitmap_GetColorImageを修正する方が簡単でした。)
予想を超える超高感度でした。.....しかも、これ、半そでTシャツに半そでポロシャツ着ている服の上からですよ?
途中で、脈を取りながら呼吸を止め、脈拍もとれるか確認してみました。
ノイズに埋もれ気味ですが、確かに脈拍も取れています。..........Kinect恐るべし!
心電計や赤外線脈波計の自作経験があるだけに、受けた精神的ショックによるダメージがでかい。
呼吸によって胸部は数mmpp位距離が変わります。脈拍変動だと0.3mmpp位になります。これはそれが検出可能であることを示しています。
勿論、Kinectのデプス値(深度情報)は1画素辺り16bitでそのうち上位13bitが深度(デプス)値で単位をmmとする値しか得られません。
しかし、40×40画素の加算平均処理によって分解能を40倍に向上することができるのです。
加算平均処理で小数点以下の情報が取り出せるのは、Kinectがランダム・ドット・パターンを投影してデプス・イメージを取得しているからなのです。
仮に胸が完全な平板だとしても、乱数パターンの『おかげ』で同時に桁上がりが発生することはありません。
それ故、加算平均で滑らかに小数点以下の情報が取り出せるのです。
(各画素のデプス値は呼吸情報取り出しのための相関処理の乗算演算が完了した段階に相当するので、加算平均処理によるローパス・フィルタをかければ相関処理が完了します)


情報理論に登場するC.E.Shannonのチャンネル容量の法則に従っています。
チャンネル容量の法則によれば、
   C=Wlog2(1+S/N)
ここに、Cはチャンネルから取り出せる情報量[bps]、Wは測定に用いる帯域幅[Hz]、Sは信号電力[W]、Nはノイズ電力[W]です。
意味は、S/Nが非常に悪く、例えば0.1程度だとすると、信号は完全にノイズに埋もれて観測することは困難ですが、
そのような状態においてさえ、本来含まれている情報の観測に必要な帯域幅よりも非常に大きな帯域幅を使って計測を行えば、
ノイズに埋もれていても取り出せるケースがあるということなのです。(参考:ノイズの数学的性質を使ったスペクトラム拡散センシング技術)
センサ・デバイスの方には手を加えず、感度を100~1000倍(現在、1万倍にトライ中)に増感する回路技術が存在します。
それを知っていれば、これはその応用に過ぎません。
呼吸はせいぜい1分間に16回から20回ですから情報取り出しに必要な帯域幅は1Hzあれば十分です。
秒あたり30FPSで観測を行えば、1画素は15Hzの帯域幅を持ちます。
そこに、40×40画素を投入すると、1600×15[Hz]もの帯域幅を使うことになります。
その背景には40×40画素の近接した画素集合の矩形領域には、呼吸に伴って同程度に同じ方向に変位しているという事実があり、重要です。
別の言い方をすれば、n×n画素の加算平均で、分解能はn倍に改善されます。
Version0.03のプログラムでは、時間軸方向にも10サンプル幅の移動平均によるLPFを構成してノイズを抑制しています。

米SF映画『スタートレック』に登場する医療用トリコーダーも夢では無くなったと理解しました。
それどころか、例えば国会で証言中の議員に遠距離赤外線ランダム・ドット・パターンを照射する『リモート嘘発見器』だって可能ということなんですよ。
.....何何?そんなの使う必要は無いって?......ごもっとも!



【プログラムの説明】
 起動直後はDefaultモード(800mm~4000mm)なので、Nearモード(400mm~3000mm)に切り替えた方が良いでしょう。
 左右反転チェックボックスのクリックで反転表示が行えます。
 仰角を変更するには、テキストボックス内に±27の範囲で数値を入力し、設定ボタンをクリックします。
 スクリーン中央の矩形枠の場所の変動を捉えます。位置を合わせてから『測定開始』ボタンをクリックします。
 最新データ20秒分が自動スケール調整されて表示されます。
 『測定開始』ボタンをクリック後100秒すると測定データがテキストボックス内に表示されます。
 このデータをメモ帳に貼り付け、xxxxx.csvと保存すればExcelで取り扱うことができます。
 呼吸の取り易い場所がありますが、いろいろ試してみて下さい。


【インターフェース2013年1月号】【2012年11月25日発売】

スポーツ/医療/ヘルスケア…動き解析処理&プログラムを徹底解説!
『研究 人間センシング』   (Interface2013年1月号はCQ出版Webショップで購入できます)

【最新情報】

【第127回微小光学研究会「3D空間情報と微小光学」】
 『ランダムドットパターン投影法によるデプスカメラの動作原理』



Kionix直交3軸加速度センサ
KXTI9-1001[I2Cインターフェース]

第1部 センサ部品 活用編
【加速度センサ基礎編】
第1章
距離/速度/傾斜角/衝撃/振動/周波数...マイコンに付け足してレベルアップ!
動きセンシングの超定番! 加速度センサの基礎
pp.44-50

【参考資料】
シロアリの音(元ネタ)
シロアリの出す音(葉)

ヘッド・バンギング(日本人)
コンサートの「縦ノリ」で周辺の住宅が揺れる 縦ノリ編
【I2C直交3軸加速度センサ】
第2章
市販モジュールで試してわかる! 通信/設定/読み出しの基本
動きセンシングの超定番! 加速度センサの使い方
pp.51-56

【過去記事】トラ技2007年12月号
『GPS+赤外線脈波+3軸加速度センサでジョギング・モニタ』
【サンプル・プログラム】
『FT232RでI2Cインターフェースを構成して3軸加速度センサKXTI9-1001に接続』
【SAS(睡眠時無呼吸症候群) いびきと呼吸編】
Appendix 1
温度センサ&マイクで呼吸を測る
pp.67-69
【サンプル・プログラム】
『いびきと鼻呼吸を記録』
【GPSセンサとGoogle Map編】
Appendix 2
GPS×地図でセンサ・データをレベルアップ!

【Google Maps API v3の使い方】(4サンプル有り)New
Google Maps API Version3.0の使い方についてサンプルがあります。

【GoogleMap応用例】
★当サイトでは自作ソフトでアクセス解析を行っています。[Google Maps API ver.3.0]
『ムカデに刺されたら...』のページの解析事例を示します。
【Bigデータ】『ムカデ被害日本地図』のインデックスページです。
『ムカデ治療アクセス解析2012年10月』(12464点)
『ムカデ治療アクセス解析2012年12月』(1369点)
 地図左下のボタンをクリックすると地図を表示。詳細はJavaScript参照。
 表示点数が多いと実行には分単位の時間がかかります。
pp.70-73
【過去記事】トラ技2007年12月号
『GPS+赤外線脈波+3軸加速度センサでジョギング・モニタ』

【Google Maps APIの使い方】

【サンプル・プログラム】
『FT232RでGPSの吐き出すデータを記録』
『GPSの緯度・経度データを地図上に表示する』
第2部 カメラを使って動きを検出編
【Kinect編】『非接触 呼吸モニタ』
第6章
2m離れた対象との距離を精度1mm以下で! 奥行きカメラKinectの性能を高めるための信号処理
研究! 非接触でヒトの息づかいを測る

【備考】最新版では、赤外線ランダム・ドット・パターン投影と赤外線カメラでヘモグロビンの赤外線吸光特性を利用して赤外線強度の変動から脈波を非接触センシング、デプスカメラを利用して呼吸をモニタすることに40~50cmの距離で成功しています。
今後、パルスオキシドメータ(血中溶存酸素濃度モニタ)や赤外線血糖計、放射温度計の機能を加えた非接触・無拘束・非侵襲多機能人間モニタリングへの応用展開が考えられます。
pp.98-105

【サンプル・プログラム】
『Kinect非接触脈拍・呼吸モニタv5』
『Kinect非接触脈拍・呼吸モニタv3』
『Kinectによる非接触呼吸モニタ』
『Kinectデプスカメラ(SDK Ver.1.6)』
【動画】
【脈波・呼吸非接触モニタ】New
 ▼【Kinectで赤外線脈波(顔)】
 ▼
【Kinectで赤外線脈波(掌)】
 ▼
【Kinectで非接触呼吸モニタ】
【Kinectで人間センシング】New
【Kinectのデプス測定範囲】New
【Kinect編】『バーチャル・ピアノ(ドラム)』
第7章
チカチカ点滅する照明の影響を信号処理で低減!
手の位置と叩いた瞬間を検出! バーチャル・ピアノの製作
pp.106-108

【サンプル・プログラム】
『Excel VBAでエレクトーン風のWave File(*.wav)を作成』
『Kinectによる拡張現実楽器演奏システムの簡易体験版』(加速度センサ無し)[デバッグモードでは使用不可]
【参考】DDS方式Web Vocaloid
【Kinect編】『赤外線近接センサ 簡易NUI』
第8章
赤外線映像の新しい活用法を探る
研究! 15~50cmの至近距離でジェスチャ検出
pp.109-113

【サンプル・プログラム】
『Kinectによる近接位置での手操作のデモを行う』
(NUI: Natural User Interface)
第3部 直接人間センシング編
【心電計編】(無拘束で入浴中の心電図を観測する浴槽心電計を含む)
第9章
微小な生体信号をとり出すにはアナログ回路とノイズ低減信号処理がカギ
心電計に学ぶ! 医療/ヘルスケア装置づくりの勘どころ
pp.114-126

【サンプル・プログラム】
『Excel VBAで心電図データを処理(リアルタイム処理向け)』
【旧ドキュメント残骸エントリ】
古い『心電計の製作』関連記事
【過去記事】トラ技2006年1月号
『心電計の製作』関連資料

★Kinectの基本的なサンプルプログラムも本ページ内でダウンロードすることができます。
 (詳細はトランジスタ技術2012年8月号を参照してください。)
 【Kinect for Windows SDK Ver.1.6】『サンプル・プログラム集』【ダウンロード・サービス】



トランジスタ技術2012年8月号特集記事の概略目次

■イントロダクション  Kinectを使った拡張現実センシングについて
■第1章        『拡張現実』とはどんな技術なのか
■第2章        Kinectが3次元情報を抽出する仕組みについて(デプス・カメラの動作原理、測距原理)
             (イスラエルのPrime Sense社がKinectセンサで採用しているLight Coding技術の基本原理)
■第3章        USBカメラとPCプロジェクタで次世代Kinect
■第4章        拡張現実センシングで用いる汎用センシング・プローブの製作
■第5章        開発環境(Visual C# 2010 ExpressとKinect for Windows SDK)の導入方法
■第6章        プログラム・サンプル(ジェスチャーや音声認識を含む)
★Kinectのデプス・カメラの動作原理や円運動を検出する独自ジェスチャー判定アルゴリズムに関しては
記事に詳しく書いております。   トランジスタ技術2012年8月号はCQ出版Webショップで購入できます。

【メニュー】

【次世代Kinect製作プロジェクト】
■最新動画News
  ●【USBカメラでKinectのデプスカメラを実現する為のプロジェクト】New
  ●【拡張現実楽器演奏システムデモ】
  ●【拡張現実ドラム演奏システム】【試作版】
  ●【Kinect 赤外線で脈波、デプスで呼吸の非接触モニタリング】New
  ●【Kinectで赤外線脈波(顔)】New
  ●【Kinectで赤外線脈波(掌)】New
  ●【Kinectデプスで呼吸・脈拍モニタ ~1m離れた位置から非接触でモニタできる~】
  ●【Kinectで近接トラッキング】
  ●【Kinectで熱源追尾】
  ●【Kinectで人間センシング】New
  ●【Kinectのデプス測定範囲】New
【Kinect for Windows SDK Ver.1.6 インストールの概略方法】
【Kinect for Windows SDK Ver.1.6】『サンプル・プログラム集』【ダウンロード・サービス】
【Kinect for Windows SDK Ver.1.0】『サンプル・プログラム集』【ダウンロード・サービス】
 ※1点修正(参照の取り直し)だけでSDK Ver.1.5で動作します
【拡張現実センシング移植へのヒント】
【第2章Appendix1で使った実験用プログラムについて】
【ランダム・ドット・パターンの生成】
【小型・低価格Kinect実現のためのヒント】【My Kinectプロジェクト】
【放射線センサとホットスポットの可視化】メモ
【拡張現実】動画集
  ●【拡張現実】KINECTが変えるセンシングの世界【トラ技8月号】
  ●【Kinect】ジェスチャーでエアコン制御にトライ!【その3】
  ●【Kinect】音声認識Speech APIでエアコン制御【その2】
  ●【Kinect】音声認識Speechで家電制御の準備実験【その1】
  ●【Kinect】PCから出ている40kHzの超音波を可視化【その2】
  ●【Kinect】エアコンの吹き出し口付近の温度を可視化【その2】
  ●【Kinect】蛍光灯付近の照度を可視化【その2】
  ●【Kinect】金属検出センサ【その2】
  ●【Kinect】NTCサーミスタでファンヒータ吹き出し口付近の温度分布を可視化
  ●【Kinect】デプスカメラの動作原理
  ●【Kinect関連】レーザービームとウェブカメラで行う測距原理検証実験
  ●【Kinectセンサ】骨格追尾の残像履歴から円運動を検出【拡張現実】
  ●【NyARToolKitCSとKinect】Augmented Reality Sensor【拡張現実センサ 事例】
【Kinect】代替視覚Cyber Eye【拡張現実】
【Holophonic Sensor with Random Holes】1chで音源座標を特定できるマイクロフォン
【Prime Sense社の発明のクレーム】
【Kinectに馴染めない方へ】Kinectを使って MikuMikuDanceで遊んでみませんか?
【トラ技オフ会ジェスチャーデモ用1】YouTube動画ビューワー
 【トラ技オフ会ジェスチャーデモ用2】YouTube動画ビューワー
 【YouTube APIの使い方】サンプルプログラム
 【Google Maps APIの使い方】サンプルプログラム

【小型・低価格Kinect実現のためのヒント】

【説明】
Twitterで2名の方が発言されていたので書いておきます。

Q:Kinectはどこまでコンパクトにできる?

A:記事でやったようにm系列パターンでフレーム毎に反転させるプロジェクタなら、カメラとプロジェクタの同期手段さえあれば、プロジェクタの量産原価は数100円切る可能性があります。
 無論、Prime Sense社の現行アルゴリズムでは専用プロセッサが必要となるのでそんなに安くできません。コンパクト化は無理でしょう。
 しかし、実はこの処理には別解が複数存在しています。その場合、携帯のプロセッサで十分ではないかと思われます。
 またリアルタイム性にこだわらず、単眼式3次元立体カメラ程度の話なら、そもそも現行アルゴリズムでも十分ですね。
 しかも、将来のモバイル機器には情報提供用にコンパクトなプロジェクタが実装される可能性が高いです。
 そうなると、アプリ開発のレベルで済みそうですね。

Q:記事の手作りKinectはプロジェクタが勿体ない。

A:ですね。しかし、実験条件を絞り込む必要があり、結局はエプソン製のプロジェクタを購入して正解でした。
 記事でも少し図を入れていますが、160×120画素程度のモノクロ液晶パネルを使ってプロジェクタは構成できます。
 ロボットの視覚センサなら、トラ技2012年3月号の頒布カメラと組み合わせて作れそうでしょ?
 赤外線でプロジェクタを構成するなら、パターンを反転させる必要もありませんから、スライドやガラス板に蒸着させるなどの方法で印刷したランダムパターン板を使う事だってできます。もうこうなると、LED懐中電灯に毛が生えた程度のコストで携帯電話に機能追加したり、ロボット・アイが製作できますよね。
 GERBERフォーマットで穴データを作成してプリント基板加工機でメタルマスク用の薄いアルミ板に穴をあけるとか、P板.comに発注するとかも考えてみたが、製作に時間がかかりすぎる欠点があります。
 筆者は、ネットで検索して見つけた、京都大学の直ぐ傍にある株式会社 鈴木マイクロフィルム研究所で【画像データ⇒スライド】にしていただきました。送料別で2,310円でした。
 可視光3次元スキャナを作るのなら、これが使えるのでは?


【図】低価格版Kinect実現のためのヒント

右側の写真は、手作りランダム・ドット・プロジェクタとUSBカメラでデプス・カメラを構成したもの。スライド方式でランダム・ドットを投影。カメラ用のレンズは比較的容易に入手することができる。秋月電子通商でも購入可能。ライトは100円ショップで見つけたLED5個の懐中電灯。50cmくらいは投影できます。三脚も100円ショップで調達しました。

【自作Kinectもどき Version 2.1】




【超高性能な次世代Kinectを自作するプロジェクト】

Kinectの特許調査の結果、イスラエルのPrime Sense社の現行の請求項には全てマイクロレンズアレイを使っている条件が含まれている。
つまり、プロジェクタにマイクロレンズアレイを使わなければ抵触しない。
ランダム・ドット・パターンを投影する方法は他に幾らでもあるし、極端な話、漢字を投影してもデプス・カメラは構成できる。
他にも回避策は無数に有る事が判明した。
Kinectには、XBOX360に搭載されているIBM PowerPCカスタムのXenon 3.2GHz(3コアプロセッサ)と同じものが1プロセッサ搭載されているが、
XBOX360のCPUコアの性能は115GFLOPSとされているから、Kinectでは38GFLOPS程度が使われていることになる。
Kinectのデプスカメラのアルゴリズムは、様々なケースでのスループットを検証した結果、
1988年頃の情報処理技術(イスラエル)で構成されているように思える。
(★イスラエルの科学技術力は日本より概ね20年先行している。勿論、当時はスパコンでなんとか動作する程度のものであったろうが.....。)
距離レンジを設定しており、背後に鏡がある状態だとデプスカメラは1FPS程度でしか動作しない事から探索型アルゴリズムである。
つまり、1989年以降に開発済みの高速アルゴリズム(10種程度)を使えば最大1000倍に高速化が行えるので、
距離レンジ・フリーで30FPSで動作するデプスカメラを2GFLOPS程度で実現できる計算だ。



2012年10月、Kinect for Windows SDKがVersion1.6になった事で、IRカメラ画像の取得と赤外線プロジェクタのオフが行えるようになった。
これによって、Kinectで撮影されたIRカメラ画像を使って、パソコン側でデプス・カメラ・アルゴリズムの検証が可能になったのだ。
自作のUSBカメラ+プロジェクタだと照度の関係や構造の堅牢さに問題があって検証しづらいことも多かったので、
Kinectを使って、
  ①デプス・カメラ・超高速アルゴリズムの検証
  ②顔追尾(face tracking)・顔認識、表情キャプチャの改良
  ③骨格追尾アルゴリズムの改良(トラ技2012年8月号で公開した円運動推定アルゴリズムの上位版)
  ④手追尾(finger tracking)
等を行おうと思う。
とはいえ、最新のアルゴリズム(ポリゴン・モデル・トラッキング)はまだ一般のPC(1台)には荷が重い。
1989年レベルから徐々にやっていこうと思う。(★恐らく2000年以降のレベルはGPUを使ってもまだ無理だろう。)
Intel CORE i3~i5で動作する程度を見極めたい。

【Kinect for Windows SDK Version1.7】

米国時間2013年3月18日にKinect for Windows SDK Version1.7がリリースされた。
3月19日の深夜にダウンロードして早速使ってみた。ダウンロードサイトはKinect for Windows SDKだ。
ヒューマン・インターフェースが改良された模様。つかんだり(Grip)、移動したり、とアプリ開発しやすくなるようだ。但し、WPFの利用が大前提のようで、多分私が利用する事はないだろう...。(Kinect相当のシステムを組み込み応用で使いたいので....やっぱり一から自分で作るか.....)
Kinect Fusionも提供されている。複数のショットから1つの3次元構造を作成できるようになった。ただし、Kinect Fusionにはハードウェア仕様の制約(CPUやGPU)もあるので注意のこと。
また、新しいMicrosoftのデプス・アルゴリズムでは日本人の髪の毛の深度検出は以前より困難になったようだ。明らかに改悪。赤外線輝度の閾値を上げ過ぎだな。フィルター・アルゴリズムが悪い。白髪の人や脱色している人は検出できるのかもしれないが.......。(-_-;)
他にもバグが増えた。CoordinateMapperにも深刻なバグがある.....位置が補正されていない。浮動小数点で加算すべきところを四捨五入して整数で加算してないだろうか? おまけに、旧マップ関数を思い切り消してない? どうしようもないねぇ....ハッシュ関数を自分で作らないと回避できないようだ。
【備考】
1) ヒューマンインタフェースガイドライン(HIG)
2) 3次元レンダリング
3) OpenCVとMATLABのサンプル
4) キネクト対応アプリケーション
5) Kinect Interaction
6) ジェスチャーベース





【番外】

【NyARToolKitCS】はこちら。
【OpenNI】はこちら。【注意】★OpenNIは10機種以上試しましたが、『機種依存性』があり、最新版が動作しないこともあります。

【最新動画News】

【拡張現実楽器演奏システムデモ】

【CEATEC2012 Rohmブース実演デモ】『Augmented Reality Virtual Music System』



【Kinectを用いた音の拡張現実】
≪なんでも身近な物を楽器にしてしまう拡張現実楽器システム≫
●場所 Ceatec2012 2012年10月2日~6日
●音の種類判別は、ソフトウェア初期化時にKinectのデプスイメージを8回取得してZ値テンプレートとし、
テンプレートから1cm~15cmの範囲に手が入った場合に、所定の音(オルガン調あるいはドラムや動物の鳴き声)が選択されたものとしている。
●デプス・イメージ上に見える白い枠線内のデプス値が所定内(1cm~15cm)の変化をしたときにその音源が選択中であると判定している。
なので、なんでも手近なものを楽器化することができる。
デモでは、タジン鍋、皿、おたま、カップ、フライパンなどキッチンスペースにある物を楽器化している。
●音出しタイミングはKinect単体では実質的に毎秒25フレーム程度なので弾きづらく、両手首の加速度センサが必要となる。
Kionix社(Rohmの子会社)製のI2Cインターフェース3軸直交加速度センサKXTI9-1001をUSBシリアルコンバータ(FT232R)でBitBangモードで接続。
(注:実はKinect本体にもKionix社製3軸直交加速度センサ(Kionix KXSD9-1026)が内蔵しています。)
但し、エレクトーン経験の豊富なコンパニオンさんが弾いているので、デモのように何とか演奏で来ているが、
今後、より一層の改良を繰り返さないとまだまだライブ演奏には使えるレベルではないかも。
●デモではお玉やコップ付近は間隔が接近し過ぎて弾きづらい原因になっている。
●当初、ドラム・システムでのデモを考えたが、ドラム・ソロは演奏者が限定されてしまうので、エレクトーン風味に変更。
音源(wavファイル)はExcel VBAでDDS(Direct Digital Synthesizer)アルゴリズムで作製。
●プログラムはKinect for Windows SDK Version 1.5を使い、Visual C#で記述。
●同時に複数音を再生させるために、DirectX.AudioVideoPlaybackを利用。

【拡張現実ドラム演奏システム】【試作版】

【Kinect】『Augmented Reality Virtual Drums System』【Prototype】


≪我が家でドラム演奏を楽しめる≫
●2012年8月1日のトラ技オフ会でお話していた拡張現実ドラムシステムの試作段階の物。スタンダードドラムセット。
同時に複数の音が出るようにDirectX.AudioVideoPlaybackを使用。
スクリーン・キャプチャとサウンド・レコーダーの音ズレすみません。
●ドラム演奏は両手、右足に加速度センサ、左足にフットスイッチを使う。
両手にはヒッコリー材のスティックを持って演奏できる。
右足はバスドラム。左足はハイハット・ペダルで、オープン・ハイハットとクローズド・ハイハットの切り替えに使う。

【USBカメラでKinectのデプスカメラを実現する為のプロジェクト】

【Kinect】『高速デプス・アルゴリズムの試作 Version 0.01』



●2012年8月のオフ会でお話ししていましたデプスカメラの高速アルゴリズムのひとつについて検証を行いました。
今回は1990年に考案したPre-Convoluted Codeを使う高速アルゴリズムをKinectのデプスカメラに応用してみました。
当サイトの3値論理型AIシステムWeb Agentでは広域拡散型ホログラム記憶として採用している方法で、その計測応用に該当します。
Kinect for Windows SDK Version 1.6から赤外線カメラ画像の取得が可能になりました。投影しているランダム・ドット・パターンのテンプレート画像は公開されてはいないようなので、まず1.25m離れた壁に投影されているランダム・ドット・パターンを16回キャプチャして参照画像を取得し、この画像を300画素水平にシフトしながらPre-Convoluted Code Patternを作成します。Pre-Convoluted Codeを作る際に原画像に係数をかけることがこの方式の最大特徴です。
こうして得たPre-Convoluted Code Patternを1回赤外線カメラ画像に畳み込むだけで水平シフトマップを得ることができます。Kinectでは水平シフトマップを得る為に、各シフト量毎の相互相関を取りながら探索不要になるまで処理を繰り返していたはずですので、処理速度は約200倍になったはずです。YouTube動画の実験では、赤外線カメラ画像からキャプチャしたパターンをIntel Core i3 2.27GHzのWindows7機でリアルタイムに処理することに成功しています。
これでPre-Convoluted Code方式が演算負荷を節約できることが実証できました。実験した部屋は究極に狭い部屋だったので壁が段差を持っているので少し結果が変ではありますが。将来的にはUSBカメラと安いプロジェクタ(懐中電灯でパターンを投影)程度でデプスカメラが実現できることになり、組み込みへの応用にも道が開けました。
記事でも書きましたが、こういった高速アルゴリズムは私が思いつく限りでも100種を超えます。数学の別解は非常に多いのです。可能性は無限大ということになります。このアルゴリズムに関しては2013年3月7日(木)に東海大学(東京品川)にて開催される第127回微小光学研究会にて発表(というより解説?)いたします。

次のステップは、1992年に考案した基底遷移アルゴリズムにより超高精度デプスマップを取得する方法の実証ステップになります。
Kinectでも赤外線カメラ画像を見ていると面白い現象に出会います。カメラの近くに物体を近づけると、その物体に投影されている『光点群が揺らぐ』のです。ところが壁やその他の動いていない物体へ投影されている光点群は揺らがないんです。でもプロジェクタはメカ的に局所変調できるような仕組みではないはずです。本当は赤外線カメラには640×480画素どころか、もっと多くの画素があって意図的に選択して分解能を引き上げているのではないかと思えるのです。Multi-lense arrayで光点の位置が固定されているはずだからです。いやあるいは光点ごとにフィルタを実装し、光源波長をアクティブに変えてやれば変調は行えるのでそれかもしれない。まぁ、分解したわけではないのでわかりませんが。
これの方式はまだ特定できませんが、他に別アルゴリズムを幾つか思いつくのでそちらを試してみようと思います。
下はKinectの赤外線カメラ画像の例です。基本的に光点が1画素程度の大きさです。意外にも密度が低いので、光点を1個ずつ追いかけるのも実は簡単かもしれないですね。仮に1ライン中に画素が200個程度とすれば、1画面に96000個(スキャンライン480本)しか光点はありません。8×8画素(64ビット)のパターンを登録すればGPUの荒いマッチングでも可能ではないだろうか? なぜなら同一スキャンラインにあるはずの200個の光点を識別できれば良いだけだからです。ドットは水平方向にしか移動しないので他のスキャンラインのドットは探索から除外することができるからです。さらに、例えばフレーム間マッチングで移動した光点群は特定できる。予め探索候補から動いていない画素は外すこともできる。意外に少ない演算負荷で探せそうだ。
試にExcel VBAで数えてみたら、せいぜい3万個程度しか光点はないことが判明。但し、近くに被写体が存在する場合は光点の数が増えているっぽい? 散乱光のせいなのか変調で増やしたのかは定かではない。
個々の光点が識別できれば、3Dポリゴン描画で途中部分のデプス値は描画で解決できる。Zバッファ(デプスバッファ)でデプスイメージが直接得られる。この方法を私はポリゴン・フィッティングと呼んでいる。あっ、でも、これはMicrosoft(Prime Sense社)の方式ではないだろう。もし、やってたらKinect Fusionやるのにこの方法使うはずだし、Skeleton Trackingが馬鹿みたいに簡単になるはずだ。例えば各スキャンラインy単位に偏移した光点群のxz平面で光点群を円弧と考えれば、中心座標を求めることができる(トラ技2012年8月号参照)。つまり、人体断面の中心座標がわかる。これをy方向につなげれば骨格のラインを構成するはずだ。基底遷移アルゴリズムでSkeleton Trackingが行えそうだ。そもそもなぜPolygon Streamがないのだろう? Kinectはセンシング的にはネタが満載で面白い。






【Kinect for Windows SDK Ver.1.6インストール】

① Visual C# 2010 Expressをダウンロードしてインストールしてください
  http://www.microsoft.com/ja-jp/dev/express/default.aspx
  Microsoft社のLive IDを取得して正規登録(無料)をしてください。
  http://www.microsoft.com/ja-jp/mscorp/account/default.aspx
② Kinect for Windows SDK Ver.1.6をダウンロードしてインストールしてください
  http://www.microsoft.com/en-us/kinectforwindows/
③ Kinect for Windows Developer Toolkitをダウンロードしてインストールしてください
  (上記のサイトで連続して作業できます)
  http://www.microsoft.com/en-us/download/details.aspx?id=27226
④ Microsoft Speech Platform - Software Development Kit (SDK) (Version 11)を
  ダウンロードしてインストールしてください
⑤ http://www.microsoft.com/en-us/download/details.aspx?id=34809
  日本語ランゲージパックをダウンロードしてインストールしてください
⑥ http://www.neo-tech-lab.jp/ARsensing/DownloadVer1.6/
  私のサイトにもサンプルプログラムを用意していますのでもしよろしければ参考にしてください。

【Kinect for Windows SDK Ver.1.6】『サンプル・プログラム集』

2012年10月にリリースされたKinect for Windows SDK Version1.6で動作する基本サンプル・プログラムを用意しました。(^_^;)
下記の通りサンプル・プログラム集ツリーの中に個別ダウンロード・リンクを用意してあります。

【説明】 こまごまと作業があるので、現時点で準備できたサンプルプログラム集です。

【動作条件】
 プログラムは筆者の元で動作を確認済みです.
 プログラムは,Microsoft社のVisual C# 2010とKinect for Windows SDK Version1.6を用いて記述しています.

 1)ソフトウェア開発は、Windows7以降のOSが稼働するパソコン上で行う必要があります。
  この制約は、Microsoft社のKinect for Windows SDKが動作可能な環境がWindows7以上である必要があるためです.
 2)Microsoft社のVisual Studio 2010 Express版のVisual C# 2010 Express Editionのダウンロードが必要です.
  【ダウンロードURL】http://www.microsoft.com/ja-JP/dev/express/default.aspx
 3)Microsoft社のKinect for Windows SDK Version1.6をダウンロードしてください.
  現在、最新版のバージョンは1.6ですが,オンライン・ドキュメントが読みづらいので,Version1.0をダウンロードしてください.
  【ダウンロードURL】http://www.microsoft.com/en-us/kinectforwindows/

【利用条件】
 1)プログラムは,Kinect for Windows SDK Version1.6を用いてVisual C# 2010で記述しています。
   Windows7以降でしか動作いたしません。
 2)プログラムのバイナリは添付していませんので,Visual C# 2010 Express Editionでビルドしなければなりません.
  Visual Studio 2012 Expressでは現時点で動作確認を行っていません。

【著作権】
 今回収録したプログラム(C#)のソースコードの全部または一部は,商用/非商用に関わりなくご利用いただくことができます.
 プログラムの改編はご自由にしていただいてかまいませんが,動作の補償は一切行いません.
 ただし,サンプル・プログラムや本アーカイブ自体の2次配布や販売は行わないでください.
 また,個別の質問や技術相談等のサポートは有償となります.

【免責】
(1)プログラムやデータの使用により,使用者に損失が生じたとしても,著作権者は,その責任を負いません.
(2)プログラムやデータにバグや欠陥があったとしても,著作権者は,修正や改良の義務を負いません.

【Kinect for Windows SDK Version1.6用サンプルコード】

2012年10月にKinect for Windows SDK Version1.6がリリースされましたので、【ダウンロードフォルダ】http://www.neo-tech-lab.jp/ARsensing/DownloadVer1.6にサンプルコードを置いておきます。
<KinectProjectVer1.6>
 |
 ├─<Bitmap_GetColorImage>           【サンプル・プログラム】『Kinectからカラー画像をキャプチャーする』
 |  ├─Bitmap_GetColorImage.sln     【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<Bitmap_GetColorImage>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<Bitmap_GetDepthImage>           【サンプル・プログラム】『Kinectからデプス・イメージをキャプチャーする』
 |  ├─Bitmap_GetDepthImage.sln     【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<Bitmap_GetDepthImage>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     ├─NTL_ColorBar.cs        【奥行き値を表示色に変換する為のツールのソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<Bitmap_GetPlayerDepthImage>        【サンプル・プログラム】『Kinectから取得したデプス・イメージから人物部分を切り取って表示する』
 |  ├─Bitmap_GetPlayerDepthImage.sln  【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<Bitmap_GetPlayerDepthImage>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     ├─NTL_ColorBar.cs        【奥行き値を表示色に変換する為のツールのソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<Bitmap_GetPlayerColorImage>        【サンプル・プログラム】『Kinectから取得したカラー画像から位置ズレを補正して人物部分を切り取って表示する』
 |  ├─Bitmap_GetPlayerColorImage.sln  【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<Bitmap_GetPlayerColorImage>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     ├─NTL_ColorBar.cs        【奥行き値を表示色に変換する為のツールのソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<Bitmap_GetSkeletonData>          【サンプル・プログラム】『Kinectから取得した骨格情報を表示する(人物部分切取処理を含む)』
 |  ├─Bitmap_GetSkeletonData.sln    【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<Bitmap_GetSkeletonData>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     ├─NTL_ColorBar.cs        【奥行き値を表示色に変換する為のツールのソース】
 |     ├─SkeletonData.cs        【骨格情報を取り扱う為のツールのソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<Bitmap_GetSkeletonAfterimage>      【サンプル・プログラム】『Kinectから取得した骨格情報のうち右手と左手の軌跡を残像表示する』
 |  ├─Bitmap_GetSkeletonAfterimage.sln 【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<Bitmap_GetSkeletonAfterimage>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     ├─NTL_ColorBar.cs        【奥行き値を表示色に変換する為のツールのソース】
 |     ├─SkeletonData.cs        【骨格情報を取り扱う為のツールのソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<Bitmap_CircleEstimation>        【サンプル・プログラム】『Kinectから取得した右手と左手の残像履歴から円運動を検出・表示する』
 |  ├─Bitmap_CircleEstimation.sln    【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<Bitmap_CircleEstimation>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     ├─NTL_ColorBar.cs        【奥行き値を表示色に変換する為のツールのソース】
 |     ├─NTL_SkeletonData.cs      【骨格情報を取り扱う為のツールのソース】
 |     ├─NTL_EstimationCircle.cs    【残像履歴から円または円弧の中心座標、半径、軌跡の種類を判別する為のツールのソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<Bitmap_GestureDetect>           【サンプル・プログラム】『Kinectから取得した右手の残像履歴から円運動を検出してYouTube動画を切り替える』
 |  |                  ★このサンプル・プログラムはブロードバンド・インターネット接続環境で使用する必要があります.
 |  ├─Bitmap_GestureDetect.sln       【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<Bitmap_GestureDetect>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     ├─NTL_ColorBar.cs        【奥行き値を表示色に変換する為のツールのソース】
 |     ├─NTL_SkeletonData.cs      【骨格情報を取り扱う為のツールのソース】
 |     ├─NTL_EstimationCircle.cs    【残像履歴から円または円弧の中心座標、半径、軌跡の種類を判別する為のツールのソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<HowToUseMDX3D>              【サンプル・プログラム】『Kinect設定環境下でManaged DirectXを利用する』デプスイメージ取得と回転キューブ描画表示の共存
 |  ├─HowToUseMDX3D.sln         【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<HowToUseMDX3D>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─App.config          【Managed DirectXをFrameworks4.0上で利用するための設定ファイル】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<KinectSpeech>               【サンプル・プログラム】『KinectのSpeech APIによる音声認識を行う』
 |  ├─KinectSpeech.sln          【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<KinectSpeech>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<KinectSpeechControl>           【サンプル・プログラム】『KinectのSpeech APIによる音声認識を使ってLEDやリモコン制御を行う』
 |  |                  ★このサンプル・プログラムの実行にはUSB-ADC基板と専用回路が必要です.
 |  ├─KinectSpeechControl.sln      【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<KinectSpeechControl>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<Kinect_GestureControl>          【サンプル・プログラム】『Kinectから取得した右手の残像履歴から円運動を検出してリモコンを制御する』
 |  |                  ★このサンプル・プログラムの実行にはUSB-ADC基板と専用回路が必要です.
 |  ├─Kinect_GestureControl.sln       【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<Kinect_GestureControl>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     ├─NTL_ColorBar.cs        【奥行き値を表示色に変換する為のツールのソース】
 |     ├─NTL_SkeletonData.cs      【骨格情報を取り扱う為のツールのソース】
 |     ├─NTL_EstimationCircle.cs    【残像履歴から円または円弧の中心座標、半径、軌跡の種類を判別する為のツールのソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<Kinect_ARSensing>              【サンプル・プログラム】『Kinectによる拡張現実センシングを行う』
 |  |                  ★このサンプル・プログラムの実行にはUSB-ADC基板と専用回路が必要です.
 |  ├─Kinect_ARSensing.sln        【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<Kinect_ARSensing>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     ├─NTL_ColorBar.cs        【奥行き値を表示色に変換する為のツールのソース】
 |     ├─NTL_FIFO.cs            【センサ値保存FIFOを利用する為のツールのソース】
 |     ├─NTL_SkeletonData.cs      【骨格情報を取り扱う為のツールのソース】
 |     ├─NTL_EstimationCircle.cs    【残像履歴から円または円弧の中心座標、半径、軌跡の種類を判別する為のツールのソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<KinectVitalMonitor>            【サンプル・プログラム】『Kinectによる呼吸モニタ』
 |  |                  ★このサンプル・プログラムはインターフェース2013年1月号に関係します.(2012年11月24日発売予定)
 |  ├─Kinect_KinectVitalMonitor.sln        【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<KinectVitalMonitor>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     ├─NTL_ColorBar.cs        【奥行き値を表示色に変換する為のツールのソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<Kinect_ProximitySensor>           【サンプル・プログラム】『Kinectによる近接位置での手操作のデモを行う』(NUI: Natural User Interface)
 |  |                  ★このサンプル・プログラムはインターフェース2013年1月号に関係します.(2012年11月24日発売予定)
 |  ├─Kinect_ProximitySensor.sln    【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<Kinect_ProximitySensor>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─<Wave>            【関係waveファイルフォルダ】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     ├─NTL_ColorBar.cs        【奥行き値を表示色に変換する為のツールのソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<FTDI_BitBangI2C_3>             【サンプル・プログラム】『FT232RでI2Cインターフェースを構成して3軸加速度センサKXTI9-1001に接続』
 |  |                  ★このサンプル・プログラムはインターフェース2013年1月号に関係します.(2012年11月24日発売予定)
 |  ├─FTDI_BitBangI2C_3.sln       【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<FTDI_BitBangI2C_3>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─<FTDI>            【関係waveファイルフォルダ】
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<WaveCreator6.xlsm>             【サンプル・プログラム】『Excel VBAでエレクトーン風のWave File(*.wav)を作成』
 |                     ★このサンプル・プログラムはインターフェース2013年1月号に関係します.(2012年11月24日発売予定)
 |
 ├─<Kinect_MusicSystemLite>           【サンプル・プログラム】『Kinectによる拡張現実楽器演奏システムの簡易体験版』(加速度センサ無し)
 |  |                  ★このサンプル・プログラムはインターフェース2013年1月号に関係します.(2012年11月24日発売予定)
 |  |                  ★Kinectのデプスカメラは30FPSですので、加速度センサ無しの単独音楽演奏はかなりきついです。
 |  ├─Kinect_MusicSystemLite.sln    【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<Kinect_MusicSystemLite>
 |     ├─<image>           【関係画像ファイルフォルダ】
 |     ├─<DataDrums>         【関係waveファイルフォルダ】標準ドラムセットの音
 |     ├─<DataWaves>         【関係waveファイルフォルダ】エレクトーン風味の音(WaveCreator[DDS]で合成)
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     ├─NTL_ColorBar.cs        【奥行き値を表示色に変換する為のツールのソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<GPS_recorder>                  【サンプル・プログラム】『FT232RでGPSの吐き出すデータを記録』
 |  |                  ★このサンプル・プログラムはインターフェース2013年1月号に関係します.(2012年11月24日発売予定)
 |  ├─GPS_recorder.sln            【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<GPS_recorder>
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 ├─<GPSsensor>                     【サンプル・プログラム】『GPSの緯度・経度データを地図上に表示する』
 |  |                  ★このサンプル・プログラムはインターフェース2013年1月号に関係します.(2012年11月24日発売予定)
 |  ├─MapViewer.htm               【HTMLとJavaScript】ダブルクリックでブラウザが起動してGoogle Mapが表示されます。(インターネット接続環境で使う必要があります)
 |  ├─GoogleMapViewer.js                【Googleマップを表示するJavaScript】
 |  └─JSONdata_for_GoogleMapViewer.js   【JavaScriptのJSON形式データ】
 |
 ├─<SASrecorder>                   【サンプル・プログラム】『いびきと鼻呼吸を記録』
 |  |                  ★このサンプル・プログラムはインターフェース2013年1月号に関係します.(2012年11月24日発売予定)
 |  ├─SASrecorder.sln           【Visual C#ソリューション】ダブルクリックでC#プロジェクトが起動します。
 |  └─<SASrecorder>
 |     ├─Form1.cs           【サンプル・プログラムの主要ソース】
 |     └─Program.cs          【起動部分】変更不要
 |
 └─<ECGsignal2.xlsm>               【サンプル・プログラム】『Excel VBAで心電図データを処理(リアルタイム処理向け)』
                       ★このサンプル・プログラムはインターフェース2013年1月号に関係します.(2012年11月24日発売予定)

★普段の整理が悪いので、どのパソコンでどのバージョンで作ったんだったか?  orz.....
 以下1件を追加予定です。
  【CyberBoard】幼児言語教育用クラウド版(インターネット接続環境で使用します)
★下記ソフトウェアは別の機会に公開する予定です。
 【Kinect_CyberEyes】
 【Kinect_HyperDepthCamera】
 【Kinect_InfraredHeartRateMonitor】


【HowToUseMDX3Dの表示例】

【拡張現実センシング移植へのヒント】

拡張現実センシング(Kinect_ARsensing)のソースはForm1.csだけを少し直せば流用できます。
Form1.csの後ろの部分に
●InitializeSerialPort(string com)
  仮想シリアルポートを設定して開く
●TerminateSerialPort()
  仮想シリアルポートを解放する
●SerialPort_for_ADC_DataReceived
  データ受信イベント
  (チャンネル切り替えが発生していた場合には再度ADCの初期化を行います)
●ADCInitialize()
  ADCの初期化設定を行います。
  サンプリング速度、入力チャンネルの切り替え等
●ADCTerminate()
  ADCをパワーダウンモード、停止状態に設定します
●ADCConvert()
  ADCの変換(コンバージョン)をスタートさせます
●ADCGetValue()
  ①ADcount AD変換値のバイナリー まずここに変換結果を格納します。
  ②SensorValue 0.0V~1.0Vになるように変換しています。所謂表示値です。
  ③sSensorValue 実際にlabelで表示するために、string形式に変換します。
単位も適当に[V]、[lux]、[℃]と付けてかまいません。
  ④MeasureValue 表示色に対応させるための変数です。0~255の値にすることで
    (最小)濃灰⇒灰⇒淡灰⇒青⇒淡青⇒緑⇒黄⇒橙⇒赤⇒白(最大)
   にカラーマッピングされます。
   なお、ソースにあるようにはみ出た分は強制的に0または255にされます。

【第2章Appendix1で使った実験用プログラムについて】

【説明】
必要なオープン・ソースのライブラリはソースフォージにあります。

①DirectShowNet ⇒ v2.1 ⇒ DirectShowLibV2-1.zip
 DirectShowLibV2-1.zipをダウンロードして解凍すると、libフォルダ内に、『DirectShowLib-2005.dll』があります。
②DirectShowSamples ⇒ 2010-February ⇒ DirectShowSamples-2010-February.zip
 DirectShowSamples-2010-February.zipをダウンロードして解凍すると、Samples/Capture/DxSnapフォルダの中に『Capture.cs』があります。
③『DirectShowLib-2005.dll』と『Capture.cs』を1つのフォルダの中にコピーしてください。
④Capture.csをメモ帳で開いて、namespaceを下のように書き換えます。

WebCamCapture.zipをダウンロードして解凍してください。
⑥WebCamCapture/WebCamCapture/Libフォルダ内に、『DirectShowLib-2005.dll』とメモ帳で修正した『Capture.cs』をコピーします。

⑦WebCamCapture/WebCamCapture.slnをダブル・クリックしてVisual C#プロジェクトを起動します。
⑧ソリューション・エクスプローラー内の『DirectShowLib-2005.dll』と『Capture.cs』を右クリックしてメニューを出して削除します。
⑨プロジェクト(P)-参照の追加(F)でLibフォルダ内にある『DirectShowLib-2005.dll』の参照を取ります。

⑩プロジェクト(P)-既存項目の追加(G)でLibフォルダ内にある『Capture.cs』を追加します。

【備考】
●USB接続できるWebカメラが必要です。
 起動すると、静止画を取り込むボタンをクリックするごとに、レーザー光点のスクリーン座標が得られます。
●部屋を暗くして、レーザー光源が目立つ状態で実験を行います。
 明るいと、レーザー光の光点座標が検出できません。
【GPLライセンス】
なんでこのプロジェクトだけ面倒くさい事をするのかって?
こうしないと、私のソースにGPLが感染してしまうからなのです。
DirectShowNetはGPLライセンスなので、それを組み込んだバイナリ(実行形式ファイル .dll, .exe)を第三者に
公開してしまうと、組み込んだForm1.csにまでGPLが及んでしまいます。つまり、全ソースの公開義務が生じて
しまいます。それを後になって別の手段でキャプチャーしてもGPLが外れない恐れが出てしまうのです。
従って、DirectShowNetを組み込んでしまった状態以降は、そのソースを改訂した後、皆さんがバイナリー(実行
形式ファイル .dll, .exe)を第3者に公開するのであれば、GPLにのっとってソース公開をしてくださいね?

【ランダム・ドット・パターンの生成】

超高精度Kinectを実現するためのランダム・ドット・パターン生成プログラムを例示します。
35mmスライド用相当のデータです。数値変更により別サイズのデータも作成可能です。
【言語】Excel VBA (独自開発のbitmap作成ライブラリを使っています)

【ソース】ランダム・ドット・パターン生成プログラム(Excel 2010 .xlsm 3.5MB)
【ソース】ランダム・ドット・パターン生成プログラム(旧バージョン .xls 25MB)

【画像データ】3200×2400画素のランダム・ドット・パターン(.bmp)
【画像データ】3200×2400画素のランダム・ドット・パターン(.png)
【画像データ】3200×2400画素のランダム・ドット・パターン(.jpg)
【画像データ】3200×2400画素のランダム・ドット・パターン(.gif)

★筆者は、京都大学の直ぐ傍にある株式会社 鈴木マイクロフィルム研究所
  画像データ⇒スライド にしていただきました。送料別で2,310円。

【3200×2400画素ランダム・ドット・パターン】


【Prime Sense社の発明のクレーム】

      ★クレーム:Claim とは、発明の『特許請求の範囲』のことです。
この辺の情報は、企業の特許部(知的財産部)あたりでなければ興味のない人が殆どだとは思いますが、一応書いておきましょう。
Kinectセンサの開発元であるイスラエルのPrime Sense社が出願している明細書
US20100118123 『DEPTH MAPPING USING PROJECTED PATTERNS』を眺めてみると面白いことがわかる。
下に請求項の部分を下に抜き出した。
クレーム 1-21、25-45 は削除されている。
これは、多くの場合、以下の2つのケースが考えられる。
  1) 先行技術が存在して請求項として権利を認められず削除された
  2) 異種の技術であるため、明細書を分離するよう米国特許庁から命令された
1)は軍事技術で利用されていたような技術の場合、ありがちなことなのだが、極秘文書扱いで封印されている場合がある。
しかし、誰か民間人が同じ発明をしてしまった場合には、極秘文書の扱いを解除され公開されることがあるのだ。
このような場合には、特許の権利は当然認められることはない。まあ、アメリカ特有の現象だ。
いずれにしても、この発明の基本部分はクレーム22, 46, 49, 51ということになる。
これらの請求項の要素を全て含んでいる後続の発明は全て抵触することになる。
さて、そこで問題なのは、これら4つの発明要素は全てマイクロレンズアレイによるランダムドットパターン・プロジェクタ
を想定していることだ。つまり、今回のパソコン用プロジェクタやスライド方式、プラネタリウム方式は範囲外となるのだ。
(でも商品化される際は自己責任でお願いします。)

【US20100118123の請求の範囲】



【典型的なピンホール型プラネタリウム・プロジェクタの構造】









































【Kinectに馴染めない方へ】

MikuMikuDanceで遊んでみませんか?

『記事読んでやってみたけど、やっぱり無理。
買ったKinectが勿体無いな...』という方に。
樋口優氏(ハンドルネーム)によって開発されたフリーウェアMikuMikuDanceで遊んでみませんか?
誰でも簡単に3次元グラフィックスの動画や静止画が作れます。
このMikuMikuDanceの最新版Ver.7.39.dotにはKinect接続機能があり、モーション・キャプチャで振り付けを行うことができます。

【インストール手順】

MikuMikuDanceのダウンロード・サイトの1.3 MikuMikuDance(DirectX9 Ver)をダウンロードします。
 zipファイルを解凍して、フォルダーごと保存してください。
②次に、Kinectを使うモジュールを提供されているMogg氏のサイトに行き、
 MoggNUIのVersion 0.3.2をダウンロードします。
 同梱ファイルのReadme_JPN.txtの指示に従ってください。


【動作確認】

①MikuMikuDance_v739dotフォルダ内のMikuMikudance.exeをダブル・クリックして起動します。
②『モデル操作』ボックス内の『読 込』ボタンをクリックし、『初音ミク.pmd』を読み込みます。
 モデル情報が表示されるので、『Ok』ボタンを押します。
③メニューの『物理演算(P)』のプルダウン・メニューから『常に演算(E)』を選択してチェックを入れます。
 物理演算の結果、重力の影響がリアルタイムにシミュレーションされ、髪の毛が動いたはずです。
④『物理演算(P)』-『重力設定(G)』の『ノイズ付加』のチェックを入れ、向きxのスライドをどちらかに動かすと、風が吹いているようになります。『OK』ボタンをクリックして戻ります。
⑤『モーションキャプチャ(K)』のプルダウン・メニューのKinect(K)を選びます。
 Kinectの2m位の位置に立つと赤人(red human)が画面右上に現れるはずです。
⑥『モーションキャプチャ(K)』-『capture(C)』を選ぶとモーション・キャプチャの記録が開始されます。
 同じメニューで停止させるまで、モーションを記録する事ができます。
⑦記録が終了したら結果を見てみましょう。
 右下の『再生』ボックスの『再生』ボタンをクリックすればキャプチャーした内容を確認することができます。
⑧『ファイル』メニューの保存やモーション・データの保存などを使えば、モデルごと保存したり、他のモデルの振り付けに使えるモーション・データだけを保存したりできます。
★詳しくお知りになりたい方は、MMDの入門書がありますので、そちらをご覧ください。