SlideShare a Scribd company logo
1 of 45
Kinect
      深度情報処理入門
 伊藤 伸男       @akatukisiden

2012/11/24 新しい.NETStyle 勉強会Ver
自己紹介
本名: 伊藤 伸男                    HN:        暁 紫電
年齢:  25歳                     twitter: @akatukisiden

職業:               フリープログラマー

   使用言語                興味分野
       C++                 Windows クライアントア
       C++/CLI              プリ
       C#                  画像処理
                            etc…
はじめに
   このセッションは2012年09月29日に
    首都圏コンピュータ技術者株式会社で行われた
    個人事業主文化祭というイベントで行ったセッショ
    ンに
    加筆修正したものです。

   KinectSDKのバージョンは1.5
   画像処理にはOpenCV 2.2を用いています。
アジェンダ
   Kinectとは
   Kinectで出来る事
   なぜ深度に注目するのか
   解説とデモ
   まとめ
Kinectとは
   Microsoftが販売するゲーム機
    「Xbox 360」用のコントローラー

   コントローラーを持つ必要が無く、身体の動きや、
    ジェスチャー、音声などによる操作が可能なことが
    特徴
    NUI (Natural User Interface)

   2010年11月発売
Kinect ハック
   もともとはXboxでしか使えなかったが、
    PC用のドライバーを開発・公開する人があらわれる
   PC用のKinectアプリ開発
     (Kinect ハック)が ブームになる

   2012年2月
     Kinect for Windows 販売
      Kinect for Windows SDK 公開
        (Windows PC専用 商用利用可能)
Kinectで出来る事
RGBカメラ




     ※サンプルアプリ Kinect Explorerの映像を撮影
深度センサー




                   ※サンプルアプリ Kinect Explorerの映像を撮
                   影
   0.8m~4m(通常モード) or 0.4m~3m(Nearモード)
   13bit
スケルトントラッキング
(簡易モーションキャプチャー)




          ※サンプルアプリ Kinect Explorerの映像を撮
          影
   全身20箇所の関節などの座標と向きを取得
   上半身10箇所のみの取得も可能
   2人分まで取得可能
ユーザーの認識




                ※サンプルアプリ Kinect Explorerの映像を撮
                影
   最大6人まで認識可能(3bit)
   深度データ13bitと一緒に16bitデータとして取得
マイク




 音声の取得
 音源方向の認識
      (指向性マイク×4)
セッションタイトルでもわかるように、
    今回は深度センサー、
   深度情報の扱い(画像処理)
   に特化した話をします。
スケルトンがあるのに
なぜ深度に注目するのか
   そもそもスケルトンは深度から計算してる

   スケルトンでは体勢・距離・設置場所などに
    制限がかかる
    (正面に配置 全身or 上半身が写る必要がある。)

   深度+画像処理 (+RGBカメラ)なら
    画像処理の知識次第で様々なデータや、
    ジェスチャーが取得できるはず。
デモと解説




今回は、深度情報を元に
簡単なジェスチャーを取得します。
深度情報の取得

   Kinectの返す情報は、
    ユーザー情報3bit,深度情報13bitの計16bit
   深度情報のみを表示する場合は3bitシフトして表示
    する。



     1   1   1   1   1     1
                               9   8   7   6   5   4   3    2   1   0
     5   4   3   2   1     0




                         深度情報(13bit)                       ユーザー情報(3bit)
深度情報取得コールバック関数の
実行スレッド
   深度情報の取得時に呼び出されるコールバック関数
    は、
    通常UIスレッドで実行されてしまう。

   取得した深度情報は、表示するまでに様々な処理を
    加える場合があり、これらの処理をUIスレッドで行
    うと、
    UIスレッドをブロックしてしまい、操作に対するレ
    スポンスが悪くなってしまうため、
    深度情報の処理は別スレッドで処理を行いたい。

   コールバック関数の登録を別スレッドで行うことで
    コールバック関数の実行も別スレッドで実行される。
深度情報の取得コールバック関数は
通常UIスレッドで実行されてしまう。




 //UIスレッドでコールバックを
 登録




                    深度情報の取得
                    画像の処理が
                    UIスレッドで実行されて
                    しまっている
コールバック関数の登録を別スレッドで行うと
それが実行されるのも別スレッドになる。




       //別スレッド


                 深度情報の取得
                 画像の処理が
                 別スレッドで実行されて
                 いる
認識深度の絞込み
   Kinectから近すぎて要らないデータ、
    遠すぎて要らないデータは認識の邪魔なので、
    認識する最大値、最小値を決めて取り除く

   (画像処理ライブラリOpenCVを使用する場合)
    処理内容によっては処理対象が
    8bitの画像でなければならない場合があるので
    ついでに255で割って8bit化する
しきい値処理で二値化(白黒画像化)

   0~255(8bit化済み)の適当な値を基準にして
    白黒2色の画像に変換する。

   白黒画像であれば、輪郭データを抽出可能

   輪郭データからは外接矩形を取得できる
不定値の対処

   光の反射や、Kinectとの角度などが理由で深度を上
    手く取得できない箇所がある。(不定値)

   これのせいでジェスチャーなど
    を思うように認識できない場合がある。

画像を不定値による穴が塞がるまで膨張させ
 その後同じだけ収縮することで正常に認識させるこ
 とが出来る。
※縮小するのは膨張で画像全体が広がったのを
  もとに戻すため
膨張・縮小処理
   膨張処理
       注目している画素を
        その画素とその周囲の画素のうち一番濃い色にする。




   縮小処理
       注目している画素を
        その画素とその周囲の画素のうち一番薄い色にする。
周囲の定義
周囲の定義は要件に応じて8近傍、4近傍、
斜め,etc を使い分ける
今回は8近傍を使用

 8近傍      4近傍      斜め
通常   →   膨張
膨張   →   縮小
ろくろ回しポーズ検出に挑戦
   しきい値を手の辺りになるように調整。
   最も大きい2つの外接矩形が以下の条件を
    みたす場合を検出状態とする。
       両方とも縦長である。 (Height>Width)
       重なってない
       Y軸が重なっている
       X軸は重なっていない。
角度付き外接矩形
   腕の角度などが取れるので
   工夫すれば様々なジェスチャーを取得可能
輪郭画像の簡易取得
   二値データからの輪郭取得は
    内側でかなり複雑な処理をしてるはず。

   外接矩形や、座標データなどが必要なく、
    輪郭を表示だけすればいい場合、
    元の画像を膨張させた画像から縮小させた画像を
    引くことで簡単に輪郭を取得できる

   輪郭部分だけではなく、内側にも膨張縮小は適応
    されているので、
    二値化すると等高線状の画像が得られる。
まとめ
   近すぎ、遠すぎて要らないデータを削除する
   膨張・縮小処理で不定値による誤認識問題を解
    決
   しきい値処理で2値化
   輪郭・外接矩形等をの取得
   矩形の座標、サイズ、
    角度などによりジェスチャーを定義
最後に
   画像処理を用いれば深度情報から
    様々なデータが取得出来るはず。

   どんな処理でどんなデータが取れるのかがわかれば、
    アプリのアイデアも湧きやすいし、
    アイデアを実装に写すのにも役に立つはず。

   Kinectアプリに興味がある人は
    一緒に画像処理も勉強してみてはどうでしょうか
お仕事募集中
       決まりました。

Itou.Nobuo@gmail.com

More Related Content

What's hot

モーションセンサーデバイス調査
モーションセンサーデバイス調査モーションセンサーデバイス調査
モーションセンサーデバイス調査@TMYSYSKW
 
ViEW2013 「SS-01 画像センサと応用事例の紹介」
ViEW2013 「SS-01 画像センサと応用事例の紹介」ViEW2013 「SS-01 画像センサと応用事例の紹介」
ViEW2013 「SS-01 画像センサと応用事例の紹介」Tsukasa Sugiura
 
Kinect for windows sdk cpp
Kinect for windows sdk cppKinect for windows sdk cpp
Kinect for windows sdk cppKaoru NAKAMURA
 
Project DAFTY 20140710 Tokyo MotionControl Network
Project DAFTY  20140710 Tokyo MotionControl NetworkProject DAFTY  20140710 Tokyo MotionControl Network
Project DAFTY 20140710 Tokyo MotionControl NetworkSatoshi Maemoto
 
Scratchとkinectで簡単モーションプログラミング
Scratchとkinectで簡単モーションプログラミングScratchとkinectで簡単モーションプログラミング
Scratchとkinectで簡単モーションプログラミングKaoru NAKAMURA
 
FMCN Kinectハンズオン
FMCN KinectハンズオンFMCN Kinectハンズオン
FMCN KinectハンズオンKeizo Nagamine
 
はじめてのKinect for windows v2
はじめてのKinect for windows v2はじめてのKinect for windows v2
はじめてのKinect for windows v2Kaoru NAKAMURA
 
続・Kinect v2を通してMicrosoft技術を考える
続・Kinect v2を通してMicrosoft技術を考える続・Kinect v2を通してMicrosoft技術を考える
続・Kinect v2を通してMicrosoft技術を考えるYuki Igarashi
 
KinebrickEV3におけるスタイリッシュモーションの取り組み
KinebrickEV3におけるスタイリッシュモーションの取り組みKinebrickEV3におけるスタイリッシュモーションの取り組み
KinebrickEV3におけるスタイリッシュモーションの取り組みAkira Hatsune
 
OpenNI 3Dセンサープログラミング
OpenNI 3DセンサープログラミングOpenNI 3Dセンサープログラミング
OpenNI 3DセンサープログラミングKaoru NAKAMURA
 
Kinect Camp with TMCN / Kinect v2 概要
Kinect Camp with TMCN /  Kinect v2 概要Kinect Camp with TMCN /  Kinect v2 概要
Kinect Camp with TMCN / Kinect v2 概要Akira Hatsune
 
Kinect for Windows およびDepthセンサーの動向
Kinect for Windows およびDepthセンサーの動向Kinect for Windows およびDepthセンサーの動向
Kinect for Windows およびDepthセンサーの動向Kaoru NAKAMURA
 
Unity meets Kinect -Unity で NUI を扱ってみた- / 2015.06.23 at TechBuzz Space
Unity meets Kinect -Unity で NUI を扱ってみた- / 2015.06.23 at TechBuzz SpaceUnity meets Kinect -Unity で NUI を扱ってみた- / 2015.06.23 at TechBuzz Space
Unity meets Kinect -Unity で NUI を扱ってみた- / 2015.06.23 at TechBuzz SpaceMori Tetsuya
 
Dev(ice)love デバイス祭り
Dev(ice)love デバイス祭りDev(ice)love デバイス祭り
Dev(ice)love デバイス祭りKaoru NAKAMURA
 
ジェスチャ認識・物体形状取得がもたらす新たな未来
ジェスチャ認識・物体形状取得がもたらす新たな未来ジェスチャ認識・物体形状取得がもたらす新たな未来
ジェスチャ認識・物体形状取得がもたらす新たな未来Kaoru NAKAMURA
 
KinectやRealSenseの概要とさまざまな使い方
KinectやRealSenseの概要とさまざまな使い方KinectやRealSenseの概要とさまざまな使い方
KinectやRealSenseの概要とさまざまな使い方Kaoru NAKAMURA
 

What's hot (20)

モーションセンサーデバイス調査
モーションセンサーデバイス調査モーションセンサーデバイス調査
モーションセンサーデバイス調査
 
ViEW2013 「SS-01 画像センサと応用事例の紹介」
ViEW2013 「SS-01 画像センサと応用事例の紹介」ViEW2013 「SS-01 画像センサと応用事例の紹介」
ViEW2013 「SS-01 画像センサと応用事例の紹介」
 
Kinect for windows sdk cpp
Kinect for windows sdk cppKinect for windows sdk cpp
Kinect for windows sdk cpp
 
Project DAFTY 20140710 Tokyo MotionControl Network
Project DAFTY  20140710 Tokyo MotionControl NetworkProject DAFTY  20140710 Tokyo MotionControl Network
Project DAFTY 20140710 Tokyo MotionControl Network
 
MVP Community Camp
MVP Community CampMVP Community Camp
MVP Community Camp
 
Scratchとkinectで簡単モーションプログラミング
Scratchとkinectで簡単モーションプログラミングScratchとkinectで簡単モーションプログラミング
Scratchとkinectで簡単モーションプログラミング
 
Kinect
KinectKinect
Kinect
 
FMCN Kinectハンズオン
FMCN KinectハンズオンFMCN Kinectハンズオン
FMCN Kinectハンズオン
 
はじめてのKinect for windows v2
はじめてのKinect for windows v2はじめてのKinect for windows v2
はじめてのKinect for windows v2
 
続・Kinect v2を通してMicrosoft技術を考える
続・Kinect v2を通してMicrosoft技術を考える続・Kinect v2を通してMicrosoft技術を考える
続・Kinect v2を通してMicrosoft技術を考える
 
TMCN Vol 8
TMCN Vol 8TMCN Vol 8
TMCN Vol 8
 
KinebrickEV3におけるスタイリッシュモーションの取り組み
KinebrickEV3におけるスタイリッシュモーションの取り組みKinebrickEV3におけるスタイリッシュモーションの取り組み
KinebrickEV3におけるスタイリッシュモーションの取り組み
 
OpenNI 3Dセンサープログラミング
OpenNI 3DセンサープログラミングOpenNI 3Dセンサープログラミング
OpenNI 3Dセンサープログラミング
 
Kinect Camp with TMCN / Kinect v2 概要
Kinect Camp with TMCN /  Kinect v2 概要Kinect Camp with TMCN /  Kinect v2 概要
Kinect Camp with TMCN / Kinect v2 概要
 
Kinect kihonnoki
Kinect kihonnokiKinect kihonnoki
Kinect kihonnoki
 
Kinect for Windows およびDepthセンサーの動向
Kinect for Windows およびDepthセンサーの動向Kinect for Windows およびDepthセンサーの動向
Kinect for Windows およびDepthセンサーの動向
 
Unity meets Kinect -Unity で NUI を扱ってみた- / 2015.06.23 at TechBuzz Space
Unity meets Kinect -Unity で NUI を扱ってみた- / 2015.06.23 at TechBuzz SpaceUnity meets Kinect -Unity で NUI を扱ってみた- / 2015.06.23 at TechBuzz Space
Unity meets Kinect -Unity で NUI を扱ってみた- / 2015.06.23 at TechBuzz Space
 
Dev(ice)love デバイス祭り
Dev(ice)love デバイス祭りDev(ice)love デバイス祭り
Dev(ice)love デバイス祭り
 
ジェスチャ認識・物体形状取得がもたらす新たな未来
ジェスチャ認識・物体形状取得がもたらす新たな未来ジェスチャ認識・物体形状取得がもたらす新たな未来
ジェスチャ認識・物体形状取得がもたらす新たな未来
 
KinectやRealSenseの概要とさまざまな使い方
KinectやRealSenseの概要とさまざまな使い方KinectやRealSenseの概要とさまざまな使い方
KinectやRealSenseの概要とさまざまな使い方
 

Similar to Kinect深度情報処理入門

Kinectプログラミング Step by Step
Kinectプログラミング Step by StepKinectプログラミング Step by Step
Kinectプログラミング Step by StepAkira Hatsune
 
Kinect技術紹介20140407
Kinect技術紹介20140407Kinect技術紹介20140407
Kinect技術紹介20140407fukuoka-t
 
KinectプログラミングStepByStep
KinectプログラミングStepByStepKinectプログラミングStepByStep
KinectプログラミングStepByStep信之 岩永
 
devsumi2012 17-D-1 Kinectで創る10年後のカタチ
devsumi2012 17-D-1 Kinectで創る10年後のカタチdevsumi2012 17-D-1 Kinectで創る10年後のカタチ
devsumi2012 17-D-1 Kinectで創る10年後のカタチKaoru NAKAMURA
 
3次元計測とフィルタリング
3次元計測とフィルタリング3次元計測とフィルタリング
3次元計測とフィルタリングNorishige Fukushima
 
ウェアラブルデバイスとモーションセンサーの融合
ウェアラブルデバイスとモーションセンサーの融合ウェアラブルデバイスとモーションセンサーの融合
ウェアラブルデバイスとモーションセンサーの融合Kaoru NAKAMURA
 
Kinect Camp with TMCN / Kinect入門ハンズオン 2015.06.06
Kinect Camp with TMCN/ Kinect入門ハンズオン 2015.06.06Kinect Camp with TMCN/ Kinect入門ハンズオン 2015.06.06
Kinect Camp with TMCN / Kinect入門ハンズオン 2015.06.06Akira Hatsune
 
20110819 関西 kinect勉強会 初級編
20110819 関西 kinect勉強会 初級編20110819 関西 kinect勉強会 初級編
20110819 関西 kinect勉強会 初級編誠 山崎
 
ICCV19読み会 "Learning Single Camera Depth Estimation using Dual-Pixels"
ICCV19読み会 "Learning Single Camera Depth Estimation using Dual-Pixels"ICCV19読み会 "Learning Single Camera Depth Estimation using Dual-Pixels"
ICCV19読み会 "Learning Single Camera Depth Estimation using Dual-Pixels"Hajime Mihara
 
すごいぞ!KinectV2!!
すごいぞ!KinectV2!!すごいぞ!KinectV2!!
すごいぞ!KinectV2!!Kotaro Yoshimoto
 
無料で始めるVTuber
無料で始めるVTuber無料で始めるVTuber
無料で始めるVTuberKatsuyaENDOH
 
Kinect演習#01課題編
Kinect演習#01課題編Kinect演習#01課題編
Kinect演習#01課題編Akihiko Shirai
 
関西MSP勉強会~Kinect編~ ハンズオン資料 Kinectで身長を計測しよう!
関西MSP勉強会~Kinect編~ ハンズオン資料 Kinectで身長を計測しよう!関西MSP勉強会~Kinect編~ ハンズオン資料 Kinectで身長を計測しよう!
関西MSP勉強会~Kinect編~ ハンズオン資料 Kinectで身長を計測しよう!Yasutomo Imairi
 
Cognitve Services × Azure Kinect DK
Cognitve Services × Azure Kinect DKCognitve Services × Azure Kinect DK
Cognitve Services × Azure Kinect DKru pic
 
Android & Nui & Physical Computing
Android & Nui & Physical ComputingAndroid & Nui & Physical Computing
Android & Nui & Physical ComputingTakahiro KUREBAYASHI
 
はじめようRGB-Dセンシングと画像処理
はじめようRGB-Dセンシングと画像処理はじめようRGB-Dセンシングと画像処理
はじめようRGB-Dセンシングと画像処理Takashi Yoshinaga
 
2012 kanemotolablecture7
2012 kanemotolablecture72012 kanemotolablecture7
2012 kanemotolablecture7ytanno
 
エヌビディアが加速するディープラーニング~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング~進化するニューラルネットワークとその開発方法について~エヌビディアが加速するディープラーニング~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング~進化するニューラルネットワークとその開発方法について~NVIDIA Japan
 
Google I/O 19 Extended in Kyushu: Design Update
Google I/O 19 Extended in Kyushu: Design UpdateGoogle I/O 19 Extended in Kyushu: Design Update
Google I/O 19 Extended in Kyushu: Design UpdateNobuya Sato
 

Similar to Kinect深度情報処理入門 (20)

Kinectプログラミング Step by Step
Kinectプログラミング Step by StepKinectプログラミング Step by Step
Kinectプログラミング Step by Step
 
Kinect技術紹介20140407
Kinect技術紹介20140407Kinect技術紹介20140407
Kinect技術紹介20140407
 
KinectプログラミングStepByStep
KinectプログラミングStepByStepKinectプログラミングStepByStep
KinectプログラミングStepByStep
 
devsumi2012 17-D-1 Kinectで創る10年後のカタチ
devsumi2012 17-D-1 Kinectで創る10年後のカタチdevsumi2012 17-D-1 Kinectで創る10年後のカタチ
devsumi2012 17-D-1 Kinectで創る10年後のカタチ
 
3次元計測とフィルタリング
3次元計測とフィルタリング3次元計測とフィルタリング
3次元計測とフィルタリング
 
ウェアラブルデバイスとモーションセンサーの融合
ウェアラブルデバイスとモーションセンサーの融合ウェアラブルデバイスとモーションセンサーの融合
ウェアラブルデバイスとモーションセンサーの融合
 
Kinect Camp with TMCN / Kinect入門ハンズオン 2015.06.06
Kinect Camp with TMCN/ Kinect入門ハンズオン 2015.06.06Kinect Camp with TMCN/ Kinect入門ハンズオン 2015.06.06
Kinect Camp with TMCN / Kinect入門ハンズオン 2015.06.06
 
20110819 関西 kinect勉強会 初級編
20110819 関西 kinect勉強会 初級編20110819 関西 kinect勉強会 初級編
20110819 関西 kinect勉強会 初級編
 
ICCV19読み会 "Learning Single Camera Depth Estimation using Dual-Pixels"
ICCV19読み会 "Learning Single Camera Depth Estimation using Dual-Pixels"ICCV19読み会 "Learning Single Camera Depth Estimation using Dual-Pixels"
ICCV19読み会 "Learning Single Camera Depth Estimation using Dual-Pixels"
 
すごいぞ!KinectV2!!
すごいぞ!KinectV2!!すごいぞ!KinectV2!!
すごいぞ!KinectV2!!
 
【de:code 2020】 Azure Kinect DK テクニカル Tips
【de:code 2020】 Azure Kinect DK テクニカル Tips【de:code 2020】 Azure Kinect DK テクニカル Tips
【de:code 2020】 Azure Kinect DK テクニカル Tips
 
無料で始めるVTuber
無料で始めるVTuber無料で始めるVTuber
無料で始めるVTuber
 
Kinect演習#01課題編
Kinect演習#01課題編Kinect演習#01課題編
Kinect演習#01課題編
 
関西MSP勉強会~Kinect編~ ハンズオン資料 Kinectで身長を計測しよう!
関西MSP勉強会~Kinect編~ ハンズオン資料 Kinectで身長を計測しよう!関西MSP勉強会~Kinect編~ ハンズオン資料 Kinectで身長を計測しよう!
関西MSP勉強会~Kinect編~ ハンズオン資料 Kinectで身長を計測しよう!
 
Cognitve Services × Azure Kinect DK
Cognitve Services × Azure Kinect DKCognitve Services × Azure Kinect DK
Cognitve Services × Azure Kinect DK
 
Android & Nui & Physical Computing
Android & Nui & Physical ComputingAndroid & Nui & Physical Computing
Android & Nui & Physical Computing
 
はじめようRGB-Dセンシングと画像処理
はじめようRGB-Dセンシングと画像処理はじめようRGB-Dセンシングと画像処理
はじめようRGB-Dセンシングと画像処理
 
2012 kanemotolablecture7
2012 kanemotolablecture72012 kanemotolablecture7
2012 kanemotolablecture7
 
エヌビディアが加速するディープラーニング~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング~進化するニューラルネットワークとその開発方法について~エヌビディアが加速するディープラーニング~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング~進化するニューラルネットワークとその開発方法について~
 
Google I/O 19 Extended in Kyushu: Design Update
Google I/O 19 Extended in Kyushu: Design UpdateGoogle I/O 19 Extended in Kyushu: Design Update
Google I/O 19 Extended in Kyushu: Design Update
 

More from 伸男 伊藤

T119_5年間の試行錯誤で進化したMVPVMパターン
T119_5年間の試行錯誤で進化したMVPVMパターンT119_5年間の試行錯誤で進化したMVPVMパターン
T119_5年間の試行錯誤で進化したMVPVMパターン伸男 伊藤
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm伸男 伊藤
 
没セッション 知識ゼロから学んだソフトウェアテスト
没セッション 知識ゼロから学んだソフトウェアテスト没セッション 知識ゼロから学んだソフトウェアテスト
没セッション 知識ゼロから学んだソフトウェアテスト伸男 伊藤
 
わんくまT78 mfcを始めようとしてみた
わんくまT78 mfcを始めようとしてみたわんくまT78 mfcを始めようとしてみた
わんくまT78 mfcを始めようとしてみた伸男 伊藤
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 

More from 伸男 伊藤 (6)

T119_5年間の試行錯誤で進化したMVPVMパターン
T119_5年間の試行錯誤で進化したMVPVMパターンT119_5年間の試行錯誤で進化したMVPVMパターン
T119_5年間の試行錯誤で進化したMVPVMパターン
 
T93 com入門
T93 com入門T93 com入門
T93 com入門
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
 
没セッション 知識ゼロから学んだソフトウェアテスト
没セッション 知識ゼロから学んだソフトウェアテスト没セッション 知識ゼロから学んだソフトウェアテスト
没セッション 知識ゼロから学んだソフトウェアテスト
 
わんくまT78 mfcを始めようとしてみた
わんくまT78 mfcを始めようとしてみたわんくまT78 mfcを始めようとしてみた
わんくまT78 mfcを始めようとしてみた
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 

Kinect深度情報処理入門

  • 1. Kinect 深度情報処理入門 伊藤 伸男 @akatukisiden 2012/11/24 新しい.NETStyle 勉強会Ver
  • 2. 自己紹介 本名: 伊藤 伸男 HN: 暁 紫電 年齢: 25歳 twitter: @akatukisiden 職業: フリープログラマー  使用言語  興味分野  C++  Windows クライアントア  C++/CLI プリ  C#  画像処理  etc…
  • 3. はじめに  このセッションは2012年09月29日に 首都圏コンピュータ技術者株式会社で行われた 個人事業主文化祭というイベントで行ったセッショ ンに 加筆修正したものです。  KinectSDKのバージョンは1.5  画像処理にはOpenCV 2.2を用いています。
  • 4. アジェンダ  Kinectとは  Kinectで出来る事  なぜ深度に注目するのか  解説とデモ  まとめ
  • 5. Kinectとは  Microsoftが販売するゲーム機 「Xbox 360」用のコントローラー  コントローラーを持つ必要が無く、身体の動きや、 ジェスチャー、音声などによる操作が可能なことが 特徴 NUI (Natural User Interface)  2010年11月発売
  • 6. Kinect ハック  もともとはXboxでしか使えなかったが、 PC用のドライバーを開発・公開する人があらわれる  PC用のKinectアプリ開発 (Kinect ハック)が ブームになる  2012年2月 Kinect for Windows 販売 Kinect for Windows SDK 公開 (Windows PC専用 商用利用可能)
  • 8. RGBカメラ ※サンプルアプリ Kinect Explorerの映像を撮影
  • 9. 深度センサー ※サンプルアプリ Kinect Explorerの映像を撮 影  0.8m~4m(通常モード) or 0.4m~3m(Nearモード)  13bit
  • 10. スケルトントラッキング (簡易モーションキャプチャー) ※サンプルアプリ Kinect Explorerの映像を撮 影
  • 11. 全身20箇所の関節などの座標と向きを取得  上半身10箇所のみの取得も可能  2人分まで取得可能
  • 12. ユーザーの認識 ※サンプルアプリ Kinect Explorerの映像を撮 影  最大6人まで認識可能(3bit)  深度データ13bitと一緒に16bitデータとして取得
  • 14. セッションタイトルでもわかるように、 今回は深度センサー、 深度情報の扱い(画像処理) に特化した話をします。
  • 15. スケルトンがあるのに なぜ深度に注目するのか  そもそもスケルトンは深度から計算してる  スケルトンでは体勢・距離・設置場所などに 制限がかかる (正面に配置 全身or 上半身が写る必要がある。)  深度+画像処理 (+RGBカメラ)なら 画像処理の知識次第で様々なデータや、 ジェスチャーが取得できるはず。
  • 17. 深度情報の取得  Kinectの返す情報は、 ユーザー情報3bit,深度情報13bitの計16bit  深度情報のみを表示する場合は3bitシフトして表示 する。 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 5 4 3 2 1 0 深度情報(13bit) ユーザー情報(3bit)
  • 18. 深度情報取得コールバック関数の 実行スレッド  深度情報の取得時に呼び出されるコールバック関数 は、 通常UIスレッドで実行されてしまう。  取得した深度情報は、表示するまでに様々な処理を 加える場合があり、これらの処理をUIスレッドで行 うと、 UIスレッドをブロックしてしまい、操作に対するレ スポンスが悪くなってしまうため、 深度情報の処理は別スレッドで処理を行いたい。  コールバック関数の登録を別スレッドで行うことで コールバック関数の実行も別スレッドで実行される。
  • 20. コールバック関数の登録を別スレッドで行うと それが実行されるのも別スレッドになる。 //別スレッド 深度情報の取得 画像の処理が 別スレッドで実行されて いる
  • 21.
  • 22.
  • 23. 認識深度の絞込み  Kinectから近すぎて要らないデータ、 遠すぎて要らないデータは認識の邪魔なので、 認識する最大値、最小値を決めて取り除く  (画像処理ライブラリOpenCVを使用する場合) 処理内容によっては処理対象が 8bitの画像でなければならない場合があるので ついでに255で割って8bit化する
  • 24.
  • 25. しきい値処理で二値化(白黒画像化)  0~255(8bit化済み)の適当な値を基準にして 白黒2色の画像に変換する。  白黒画像であれば、輪郭データを抽出可能  輪郭データからは外接矩形を取得できる
  • 26.
  • 27.
  • 28.
  • 29. 不定値の対処  光の反射や、Kinectとの角度などが理由で深度を上 手く取得できない箇所がある。(不定値)  これのせいでジェスチャーなど を思うように認識できない場合がある。 画像を不定値による穴が塞がるまで膨張させ その後同じだけ収縮することで正常に認識させるこ とが出来る。 ※縮小するのは膨張で画像全体が広がったのを もとに戻すため
  • 30. 膨張・縮小処理  膨張処理  注目している画素を その画素とその周囲の画素のうち一番濃い色にする。  縮小処理  注目している画素を その画素とその周囲の画素のうち一番薄い色にする。
  • 32. 通常 → 膨張
  • 33. 膨張 → 縮小
  • 34.
  • 35. ろくろ回しポーズ検出に挑戦  しきい値を手の辺りになるように調整。  最も大きい2つの外接矩形が以下の条件を みたす場合を検出状態とする。  両方とも縦長である。 (Height>Width)  重なってない  Y軸が重なっている  X軸は重なっていない。
  • 36.
  • 37. 角度付き外接矩形  腕の角度などが取れるので  工夫すれば様々なジェスチャーを取得可能
  • 38.
  • 39. 輪郭画像の簡易取得  二値データからの輪郭取得は 内側でかなり複雑な処理をしてるはず。  外接矩形や、座標データなどが必要なく、 輪郭を表示だけすればいい場合、 元の画像を膨張させた画像から縮小させた画像を 引くことで簡単に輪郭を取得できる  輪郭部分だけではなく、内側にも膨張縮小は適応 されているので、 二値化すると等高線状の画像が得られる。
  • 40.
  • 41.
  • 42.
  • 43. まとめ  近すぎ、遠すぎて要らないデータを削除する  膨張・縮小処理で不定値による誤認識問題を解 決  しきい値処理で2値化  輪郭・外接矩形等をの取得  矩形の座標、サイズ、 角度などによりジェスチャーを定義
  • 44. 最後に  画像処理を用いれば深度情報から 様々なデータが取得出来るはず。  どんな処理でどんなデータが取れるのかがわかれば、 アプリのアイデアも湧きやすいし、 アイデアを実装に写すのにも役に立つはず。  Kinectアプリに興味がある人は 一緒に画像処理も勉強してみてはどうでしょうか
  • 45. お仕事募集中 決まりました。 Itou.Nobuo@gmail.com