狠狠撸

狠狠撸Share a Scribd company logo
わんくま同盟 東京勉強会 #84
Kinect
深度情報処理入門
暁 紫電
@akatukisiden
わんくま同盟 東京勉強会 #84
自己紹介
本名: 伊藤 伸男
年齢: 26歳
? 興味分野
? Windows クライアントア
プリ
? COM
? WinAPI
? .NET/Native 相互運用
? 使用言語
? C++
? C++/CLI
? C#
HN: 暁 紫電
twitter: @akatukisiden
職業: フリープログラマー
わんくま同盟 東京勉強会 #84
アジェンダ
? Kinectとは(Kinectの歴史)
? Kinectで出来る事
? なぜ深度に注目するのか
? 解説とデモ
? まとめ
わんくま同盟 東京勉強会 #84
Kinect (for Xbox 360)とは
? Microsoftが販売するゲーム機「Xbox 360」用のコ
ントローラー
? コントローラーを持つ必要が無く、身体の動きや、
ジェスチャー、音声などによる操作が可能なこと
が特徴
NUI (Natural User Interface)
? Kinect自体にもCPUを搭載し
Xbox側の負荷を下げている。
? 2010年11月「Kinect for Xbox 360」発売
わんくま同盟 東京勉強会 #84
Kinect ハック
? もともとはXboxでしか使えなかったが、
PC用のドライバー等を開発?公開する人があらわ
れる
(KinectのUSB接続はあえて暗号化されていなかっ
た)
? PC用のKinectアプリ開発
(Kinect ハック)が ブームになる
? 2011年06月 「Kinect for Windows SDK」 β版公開
? 2012年2月
Kinect for Windows 販売
Kinect for Windows SDK 公開
(Windows PC専用 商用利用可能)
わんくま同盟 東京勉強会 #84
The Kinect Effect
Kinectはゲーム?エンターテイメントを目的として
作られたが、
その他の分野にも活用されており、
この広がりは「The Kinect Effect」と呼ばれてる
? ゲーム
? リビングルーム
? 医療現場
? リハビリテーショ
ン
? 見守り支援
? 教育
? 人流計測
? ヒューマンエラー防止
? 商品統計
? アパレル
? デジタルサイネージ
? アミューズメント施設
? 危険区域における構造調査
? 等々…
わんくま同盟 東京勉強会 #84
次世代Kinect
? 2013年5月 「Xbox One」と共に再設計された次世
代「Kinect」を公開
? 2014年 「Xbox One(+Kinect for Xbox One)」
「次世代型 Kinect for Windows」 発売予定
? 3Dセンサの原理を変更、解像度、奥行き方向分解
能ともに向上
? センサーに近い場所、狭い部屋でも認識精度が向
上。
? スケルトン、ユーザー認識(後述)精度も向上
? 心拍数も取得可能(RGBカメラとIRカメラから推
測)
? Etc…
わんくま同盟 東京勉強会 #84
Kinectで出来る事
わんくま同盟 東京勉強会 #84
カメラ(RGB/YUV/Bayer)
※サンプルアプリ Kinect Explorerの映像を撮影
わんくま同盟 東京勉強会 #84
深度センサー
? 0.8m~4m(通常モード) or 0.4m~3m(Nearモー
ド)
? 13bit
※サンプルアプリ Kinect Explorerの映像を撮
影
わんくま同盟 東京勉強会 #84
スケルトントラッキング
(簡易モーションキャプチャー)
※サンプルアプリ Kinect Explorerの映像を撮
影
わんくま同盟 東京勉強会 #84
? 全身20箇所の関節などの座標と向きを取得
? 上半身10箇所のみの取得も可能(Nearモード)
? 2人分まで取得可能
わんくま同盟 東京勉強会 #84
ユーザーの認識
? 最大6人まで認識可能(3bit)
? 深度データ13bitと一緒に16bitデータとして
取得
※サンプルアプリ Kinect Explorerの映像を撮
影
わんくま同盟 東京勉強会 #84
マイク
? 音声の取得
? 音源方向の認識(指向性マイク×4)
? マイクデバイスとして使用可能
わんくま同盟 東京勉強会 #84
セッションタイトルでもわかるように、
今回は深度センサー、
深度情報の扱い(画像処理)
に特化した話をします。
わんくま同盟 東京勉強会 #84
スケルトンがあるのに
なぜ深度に注目するのか
? そもそもスケルトンは深度から計算してる
? スケルトンでは体勢?距離?設置場所などに
制限がかかる
(正面に配置 全身or 上半身が写る必要があ
る。)
? 深度+画像処理 (+RGBカメラ)なら
画像処理の知識次第で様々なデータや、
ジェスチャーが取得できるはず。
わんくま同盟 東京勉強会 #84
デモと解説
今回は、深度情報を元に
簡単なジェスチャーを取得します。
わんくま同盟 東京勉強会 #84
深度情報の取得
? Kinectの返す情報は、
ユーザー情報3bit,深度情報13bitの計16bit
? 深度情報のみを表示する場合は3bitシフト
して表示する。
015 14 13 12 11 10 9 8 7 6 5 4 3 2 1
深度情報(13bit) ユーザー情報(3bit)
わんくま同盟 東京勉強会 #84
深度情報取得コールバック関数の
実行スレッド
? 深度情報の取得時に呼び出されるコールバック関
数は、
通常UIスレッドで実行されてしまう。
? 取得した深度情報は、表示するまでに様々な処理
を加える場合があり、これらの処理をUIスレッド
で行うと、
UIスレッドをブロックしてしまい、操作に対する
レスポンスが悪くなってしまうため、
深度情報の処理は別スレッドで処理を行いたい。
? コールバック関数の登録を別スレッド(Task)で行
うことで
コールバック関数の実行も別スレッドで実行され
る。
わんくま同盟 東京勉強会 #84
深度情報の取得コールバック関数は
通常UIスレッドで実行されてしまう。
//UIスレッドでコールバックを
登録
深度情報の取得
画像の処理が
UIスレッドで実行されて
しまっている
わんくま同盟 東京勉強会 #84
コールバック関数の登録を別スレッドで行うと
それが実行されるのも別スレッドになる。
深度情報の取得
画像の処理が
別スレッドで実行されて
いる
//別スレッド
わんくま同盟 東京勉強会 #84
わんくま同盟 東京勉強会 #84
わんくま同盟 東京勉強会 #84
認識深度の絞込み
? Kinectから近すぎて要らないデータ、
遠すぎて要らないデータは認識の邪魔なの
で、
認識する最大値、最小値を決めて取り除く
? (画像処理ライブラリOpenCVを使用する
場合)
処理内容によっては処理対象が
8bitの画像でなければならない場合があるの
で
ついでに256分割して8bit化する
わんくま同盟 東京勉強会 #84
わんくま同盟 東京勉強会 #84
しきい値処理で二値化(白黒画像化)
? 0~255(8bit化済み)の適当な値を基準にして
白黒2色の画像に変換する。
? 白黒画像であれば、輪郭データを抽出可能
? 輪郭データからは外接矩形を取得できる
わんくま同盟 東京勉強会 #84
わんくま同盟 東京勉強会 #84
わんくま同盟 東京勉強会 #84
わんくま同盟 東京勉強会 #84
不定値の対処(※次世代版だと改善してるかも)
? 光の反射や、Kinectとの角度などが理由で深度を
上手く取得できない箇所がある。(不定値)
? これのせいでジェスチャーなど
を思うように認識できない場合がある。
? 画像を不定値による穴が塞がるまで膨張させ
その後同じだけ収縮することで正常に認識させる
ことが出来る。
※縮小するのは膨張で画像全体が広がったのを
もとに戻すため
わんくま同盟 東京勉強会 #84
膨張?縮小処理
? 膨張処理
– 注目している画素を
その画素とその周囲の画素のうち一番濃い色にする。
縮小処理
– 注目している画素を
その画素とその周囲の画素のうち一番薄い色にする。
わんくま同盟 東京勉強会 #84
周囲の定義
周囲の定義は要件に応じて8近傍、4近傍、
斜め,etc を使い分ける
今回は8近傍を使用
8近傍 4近傍 斜め
わんくま同盟 東京勉強会 #84
通常 → 膨張
わんくま同盟 東京勉強会 #84
膨張 → 縮小
わんくま同盟 東京勉強会 #84
わんくま同盟 東京勉強会 #84
ろくろ回しポーズ検出に挑戦
? しきい値をろくろ回しポーズ時の
手の辺りになるように調整。
? 最も大きい2つの外接矩形が以下の条件を
満たす場合を検出状態とする。
– 両方とも縦長である。 (Height>Width)
– 重なってない
– Y軸の値が重なっている
わんくま同盟 東京勉強会 #84
わんくま同盟 東京勉強会 #84
角度付き外接矩形
? 腕の角度などが取れるので
? 工夫すれば様々なジェスチャーを取得可能
わんくま同盟 東京勉強会 #84
わんくま同盟 東京勉強会 #84
輪郭画像の簡易取得
? ここまでで行った二値データからの輪郭取得は
外接矩形が取れるということは
座標を持っているはずなので
内側でかなり複雑な処理をしてるはず。
? 外接矩形や、座標データなどが必要なく、
輪郭を表示だけすればいい場合、
元の画像を膨張させた画像から縮小させた画像を
引くことで簡単に輪郭を取得できる
わんくま同盟 東京勉強会 #84
わんくま同盟 東京勉強会 #84
わんくま同盟 東京勉強会 #84
まとめ
? 近すぎ、遠すぎて要らないデータを削除する
? 膨張?縮小処理で不定値による誤認識問題を解
決
? しきい値処理で2値化
? 輪郭?外接矩形等をの取得
? 矩形の座標、サイズ、
角度などによりジェスチャーを定義
わんくま同盟 東京勉強会 #84
最後に
? 画像処理を用いれば深度情報から
様々なデータが取得出来るはず。
? どんな処理でどんなデータが取れるのかがわかれば、
アプリのアイデアも湧きやすいし、
アイデアを実装に写すのにも役に立つはず。
? Kinectアプリに興味がある人は
一緒に画像処理も勉強してみてはどうでしょうか

More Related Content

わんくまT84 kinect深度情報処理入門