2014-10-07

[OF]Kinect v2 學習筆記(一) Kinect v2 基本介紹

前一陣子跑去東京渡過了一個星期左右的假期
這中間除了去Tokyo Game Show以及Akiba朝聖外
也順道帶回了台灣還未上市的互動好朋友
Kinect V2 for windwos
在正式介紹Kinect V2之前, 先來簡單介紹一下什麼是Kinect好了

(根據Google圖片搜尋可以證明它們這個角度最上相)

Kinect 是什麼?
Kinect是由微軟開發, 用於XBox 360/XBox One主機上的體感週邊裝置
搭載RGB攝影機與紅外線深度感測器, 讓開發者可以得到使用者肢體資訊與影像

Kinect 能做什麼?
基礎的功能包含人體辨識、追蹤、骨架追蹤、3D Model建立..等
這些都是建立在紅外線深度度感測器所得到的Depth Map(深度圖)
透過Computer Vision與Machine Learning等等技術得到的結果~讓我們心懷感激!
延伸運用上就包含了拍照去背、體感遊戲、手勢操作...等

Kinect的開發?
Kinect v1的部份有分「原生的SDK」跟「OpenNI」兩種
前者想當然爾只能在Windows上使用,而且在C#下寫起來非常方便
後者雖然部份功能有缺,但除了可以在Mac跟Linux下使用外,也支援另一個類似的硬體「Xtion」
詳細可以參考Heresy大神的Blog[1],它的文章對於Kinect的開發有莫大的幫助!

Kinect v2的話,目前似乎只有今年7月才Release的原生SDK,而且還附帶了一個另人不悅的使用條件...
只支援Windows 8以上
我相信這點應該過沒多久就會被神人們破解吧?
身為普通人的我還是乖乖的裝上Win 8.1了(覺得難用)
目前Kinect v2的SDK代號為Kinect SDK 2.0,感覺上比較像是把Kinect SDK 1.8改版成Kinect v2用的版本
因此沒有出現太多特殊的功能,但具友人表示,已經比一開始的Kinect SDK好太多了。

Kinect v1 vs Kinect v2
先簡單列一些跟筆者的運用上比較有關係的項目:
(關於Kinect v2更完整的規格可以參考的官方網站[2])

接下來就實際看一下兩者在相似環境下,內建Demo程式的執行結果吧!
首先是RGB camera
明顯能看出Kinect v2的鏡頭廣了許多,畫質部份因為有縮小所以不太明顯。


再來是Depth map
邊緣更明顯、整體更穩定、破洞更少、細節更多...我都快懷疑以前為啥能接受Kinect v1了

這裡特別補充一點,因為IR技術改變(wide-angle time-of-flight camera)
Kinect v1之前在戶外會接近失效的缺點,Kinect v2已經有大幅的改進了!所以...
Kinect v2可以在戶外使用了!!

當然機器本身或人體被陽光直射什麼的還是會有影響,但比起Kinect v1已經進步許多!
這對做互動的人來說真是一大進步啊

回來比較結果,Skeletal tracking(骨架追蹤)
手的部份有明顯增加更多關節點,另外原先關節的位置也有所調整(屁股總算不在腰上面了)

可以看到Kinect v2有多兩個綠色的圈圈,那是用來判斷手的開合,這點待下次一起介紹。 

再來是同樣跑Coordinate Mapping的結果,可以當作是最簡單的去背
RGB的畫質就不說了,身體邊緣破洞的情況少了許多,不過頭髮的部份還是一樣。

最後是3D View的結果,Depth map的差距完全反應出來了。
Kinect v1是有填入color並做成surface的樣子,而Kinect v2只是單純的Point clouds就已經很密了

===============分隔線==============

我想到這裡已經足夠瞭解到Kinect v2確實是有進步的!(特別是戶外這件事)
下一步就來透過一個簡單的Demo來瞭解Kinect v2如何在OF上使用吧!

=好寶寶Reference=

10 則留言:

  1. 您好,初学Kinect的大陆孩子,在Google上找到了您的文章。
    作为初学者,很想请教您一个问题。Kinect的学习,您有哪些
    比较好的学习资料推荐? 除了微软官方发布的文档还有哪些
    值得关注的博客(blog)或是网站么?
    希望前辈能给些建议,谢谢!
    ——MummyDing

    回覆刪除
    回覆
    1. 不知道你基礎的程式底子如何呢?
      如果C++ or C#有一定程度的話, 其實官方給的example就滿足夠了
      另外文章中提到Heresy's Space的Blog非常值得參考
      以下是Heresy's Space的連結~
      http://kheresy.wordpress.com/

      刪除
    2. 哦哦,这样子。
      我现在大二,一年半的编程经验。学过C,接触过C++。平时在搞ACM竞赛,虽然使用的是C++,但是并不涉及到面向对象(OO)的知识,一般代码量在50~100行(更加注重编程技巧+算法 代码会比较精简)。前段时间用MFC写过几个小东西。
      目前是期末考试阶段,接下来的寒假是打算学习C#+Kinect+opencv
      Heresy's Space 先Mark下,谢谢您的分享。

      刪除
    3. 原來如此,加油嘍!
      有什麼問題儘管問~如果幫得上忙會盡量回答的!

      刪除
  2. 你好,初學C++的學生,一點C++的底子都沒有,因為課業的關係,需要學習到Kinect v2的程式編譯,但是我一點都不會程式,所以有沒有甚麼推薦書籍可以給我做打底子做參考,希望老師你可以給我一些建議,謝謝你!

    回覆刪除
    回覆
    1. 因為不太確定你的狀況...所以就提供很自作主張的小測驗來判斷一下吧~
      ============
      1.有一定要用Kinect V2嗎?
      否→改用Kinect 1吧,資源多很多,就算不喜歡官方API還有OpenNI可以用
      是→請看下一題

      2.有一定要用C++嗎?
      否→考量到初學的問題,我會建議可以用C#
      是→請看下一題

      3.有時間壓力嗎?
      否→建議你可以從基礎的C++開始學起
      網路資源我會推薦以下兩個:
      http://openhome.cc/Gossip/CppGossip/
      http://pydoing.blogspot.tw/2014/06/cpp-guide.html
      書籍的話...建議是去書店多翻翻,畢竟每個人喜歡的風格差很多
      是→恩...這會是條辛苦的道路

      ==================
      能的話我還是不建議你走C++ + Kinect V2這條路
      歡迎有問題隨時提問喔

      刪除
    2. 因為我現在手上只有V2的機器,我現在手上有一些關於V2的一些測試程式碼,有一組程式是負責追蹤手部的位置,我想要用來做控制遊戲選單的部分,是不是改個地方就能使用了呢?

      刪除
    3. 如果你的使用需求就只有需要用到手部的話,應該只要找出他取得手部關節點的部分,就有機會直接拿來使用喔!
      不過前提是你這支測試的程式碼要與開發遊戲的環境類似

      刪除
    4. 我已經有寄過去給您了哦~

      刪除
  3. 您好 我是初學KinectV2的學生 想請問如果寫判斷手掌開闔的程式 手部的節點部分要怎麼進行判斷 希望老師你可以給我一些建議 謝謝你~

    回覆刪除