【计算机视觉】深度相机(五)--Kinect v2.0
原文:http://blog.csdn.NET/qq1175421841/article/details/50412994
----微軟Build2012大會:Kinect for Windows Programming Deep Dive
這個周末看了兩天的微軟Build
2012大會,真的是一次盛會,上面有很多的演講主題,都是微軟相關技術和產品的最新動態,我比較關注.NET、WPF、Office及Kinect相關開發,上面的演講視頻和PPT都可以下載,個人覺得比較精彩的有The
Evolution of .NET,回顧了微軟推出.NET以來的歷次開發者大會推出的新版本和新特性,里面還有10多年前比爾蓋子老師在開發者大會上宣布.NET戰略時的演講視頻,不覺得感嘆歲月是把殺豬刀啊。What's
New for Developers in Office 2013 and SharePoint 2013介紹了不同于以往的以VBA,SharedAddIn,以及VSTO的全新的Office開發方式OfficeApp,Building
apps for Office and SharePoint 2013 using the web technologies you know and love, Part 1、Part2介紹了如何使用各種我們熟悉的技術如Html、JavaScript、C#等來構建OfficeApp。上面還有很多關于Windows
Phone 8,WPF4.5等相關的介紹,主題很多,強烈建議大家有空可以上去看看。
大會上關于Kinect開發有三個,第一個是微軟研究院講的Super-Natural
Interaction這個PPT比演講視頻都大,達到了罕見的997M,為啥這么大呢,因為里面嵌入了一個長達40分鐘視頻,哈哈,這個演講主要演示了微軟研究院正在進行的各種人機交互,虛擬現實等研究,非常的Cutting-edge,里面也有和Kinect相關的部分,有興趣的可以看看。第二個是Kinect
Design Considerations,一則關于Kinect應用程序設計是應該考慮的問題比如交互方式的設計的演講,我沒有太仔細看,不過內容應該和Kinect
Human Interface Guideline內容差不多,您可以在Kinect Developer Toolkit中查看。第三篇演講是Kinect
for Windows Programming Deep Dive 我將這個翻譯為了深入理解Kinect for Windows開發,相對來說該演講和Kinect開發比較相關,現與大家分享,該演講上面寫的級別為 300-advanced,個人覺得這個演講內容其實很簡單,只是對Kinect能夠獲取的相關數據源,Kinect SDK處理過了的可供識別的數據源,以及未來的趨勢和大家做了一下介紹。Kinect
SDK中其實沒有太多的東西,真正的則在于各種模式識別算法,比如通過深度數據,紅外數據,進行各種物體識別等等,有了這些數據,尤其是1.6版本的SDK提供的獲取紅外原始數據,就可以通過這個數據,結合深度數據做出很多非常令人驚嘆的應用來。廢話不多說了,下面和大家分享一下該演講的主要內容,也算是一個關于Kinect開發的比較好的入門介紹吧。
一 大綱
演講大體分為5個部分,第一部分介紹了Kinect SDK的開發方式以及運行環境,第二部分是寫代碼,講解Kinect中的一些彩色,深度,骨骼等數據的處理和顯示,第三部分講解了傳感器直接產生的數據流,包括彩色,深度,紅外,語音,加速器數據源,第四部分講解了經過Kinect SDK對原始數據流處理后的可供用來進行直接識別的,骨骼,語音及面部識別數據源,最后一部分講解了未來Kinect可進行的一系列應用?,F在先來看第一部分吧。
二 Kinect應用場景及開發環境
首先介紹了一下Kinect的應用場景。主要有三大類方面的應用。第一是自然人機交互界面。比如說一些像少數派報告中的那種用手指非接觸即可操縱大屏幕上的顯示內容。這在一些高科技或者科幻類電影中經常能夠看到這類的場景。還有一些就是在國外已經有的應用如Kinect虛擬試衣間,Kinect車展演示廣告,Kinect 手術室影像操作,還有Kinect操作幻燈片,Kinect進行照片瀏覽等等,這些自然人機交互界面的應用帶來了新的用戶體驗。第二種是自然環境識別,比如根據Kinect
產生的深度數據,紅外數據對物體進行三維掃描重建,利用Kinect進行機器人導航進行障礙物自動回避等。第三種是自然用戶的識別,比如說利用Kinect來進行姿勢識別,人臉識別。比如說一些大家比較熟悉的XBOX360 中的舞林大會,運動會,大冒險等體感游戲,這些都是利用Kinect的一些數據來進行用戶的動作識別,從而參與到游戲中的互動。還有一些增強現實的應用,利用了上面的三個方面的特性,比如說利用Kinect來將熒幕變成觸摸屏,并在上面可以進行各種操作,等等應用。
要開發上面的應用,首先要了解一下開發環境,如這張幻燈片所示:
Kinect 提供了非托管(C++)和托管(.NET)兩種開發方式的SDK,如果您用C++開發的話,需要安裝Speech Runtime(V11),Kinect for Windows Runtime和驅動的,如果您使用C#和VB.Net的話,需要Microsoft.Kinect.dll和Mirosoft.Speech.dll兩個dll,這兩個其實是對前C++里面的兩個dll的.NET封裝,不論何種開發,您都需要安裝driver,所有這些都包含在Kinect
SDK安裝包中,安裝方法您可以參考之前的文章。Kinect開發支持Windows7/Windows
Embedded Standard/Windows8操作系統,最新的1.6版本的SDK還支持虛擬機里面的Windows系統,不過只要年代不太久遠的Windows系統應該都是可以的。上面寫的最好使用.NET
4.0/4.5也只是建議,老版本的應該也行。如果是使用.NET開發方式的話,您需要安裝.NET Framework,IDE可以使用Visual Studio 2010/2012。
三 代碼演示
這部分主要是通過編寫代碼演示Kinect的各項功能,代碼我在這里就不講了。
首先第一個演示是顯示彩色影像,比較簡單。然后是結合深度影像數據顯示彩色影像數據上對應某一點的深度值。
圖上使用鼠標點擊就能夠加上一個標簽,標簽里面的值是該點的深度值,這個功能應該是比較好實現的,主要是展示如何使用彩色影像數據和深度數據,您如果感興趣的話看完這篇文章應該就能實現這個功能。
然后演示了骨骼追蹤功能,圖中追蹤了頭部,雙手的位置,并顯示了兩只手所處的深度值,頭部上顯示的Tracking ID,Kinect能同時追蹤6個待選目標,但只有兩個目標處于活動狀態。每一次追蹤都會分配給目標一個Tracking ID。
這個功能主要演示了如何使用骨骼數據,您如果感興趣的話看完這篇文章應該就能實現這個功能。
除了1.5及之前能夠提供的各種數據之外,1.6 的SDK提供了紅外影像數據,您可以利用數據校準彩色影像數據,使得在較暗的條件下也能夠進行人物識別。其實Kinect骨骼識別主要是通過深度數據來實現的,而深度數據是通過紅外發射接收產生的,1.6版本的SDK提供了我們直接訪問和操作紅外數據的能力。
第四個Demo是演示了Kinect的面部識別功能,Kinect的面部識別是在1.5 SDK中引入的,面部識別可以識別最多達一百多個面部特征點,下面是演示的Demo:
上面的功能在Kinect Developer Toolkit中有實例和源代碼,您可以下載查看,入門的話,您也可以看這篇文章,比較簡單的對使用FaceTracking的一點介紹。
Kinect除了這些功能之外還有強大的語音識別功能,在這篇演講中沒有演示出來,不過在Super-Natural
Interaction這篇演講的視頻中,您可以體會該改功能的強大,Kinect語音識別不僅能夠識別出聲音,而且還能對聲音的來源方向進行識別,且具有強大的去噪增強功能,要了解這些你可以看這篇文章,對Kinect的語音識別做了一些簡單的介紹。
四 Kinect數據源及應用
Kinect開發涉及到的數據源分為兩類:
一類是傳感器本身產生的原始數據源,比如說彩色影像數據源,深度影像數據源,語音數據源,紅外影像數據源,加速計數據源,其中紅外影像數據源,加速計數據源是在1.6的SDK中新加入的。下面這張圖很好的說明了各個數據源:
第二類數據源是,SDK中通過一些算法識別出來的可以直接拿來進行識別的數據源,他們包括:骨骼追蹤,語音識別,面部識別數據源。
可以看到,骨骼追蹤數據源是在深度影像數據源的再通過一系列算法實現的,語音識別是通過語音數據源再通過一系列算法實現的,而面部識別則綜合了彩色影像、深度影像和骨骼追蹤為系列數據源的再通過一系列算法實現的。這些功能都是通過SDK來實現的。
有了這些數據源,就能夠進行各種應用了:
典型的應用有綠屏摳像,這個功能在一些電視節目錄制,比如天氣預報節目中都是應用的這個實現的,他把任務從背景中分離出來,然后可以隨意的更換背景,這個功能用到了影像數據和深度數據,你可以參考這篇文章,里面有一個簡單的例子。第二個應用是產生點陣云,就是通過Kinect的深度影像數據產生每個點的位置信息然后生成三維模型。如下面這個例子:
圖中左邊是通過Kinect的深度影像數據產的三維建模圖像。
第三個應用是魔鏡功能,我覺得應該是一些類似哈哈鏡效果或者是iOS中的Photo
Booth應用,主要用到了彩色影像數據,面部識別,骨骼識別等功能。還有一些就是虛擬試衣間這樣的功能,最后的一個應用場景就是各種NUI交互界面了。
五 展望
除了以上的幾種典型的數據源之外,還展示了下一步的計劃,比如說針對景深數據進行進一步處理的Kinect Fusion數據源。
下面是演示的例子:圖中,右邊桌子上擺放了一個茶壺,然后利用Kinect對該茶壺進行了三維建模,然后。移除右邊實物茶壺后,用戶可以對虛擬的茶壺進行各種操作,神奇吧,這些都是下一個版本或者是將來的SDK能夠方便我們或者簡化我們實現這些功能準備添加的功能。
到最后展望了下一步要進行的工作:
可以看出Kinect的愿景是使得計算機能夠看到、聽到、能夠更加理解周圍的人和環境。
Kinect SDK的版本發布是很快的,自從今年二月份發布了Kinect Sensor for Windows 體感儀及Kinect for Windows SDK 1.0官方版本以來;5月21日 發布了1.5版本SDK以及1.5的Developer
Toolkit及調試工具Kinect Studio 1.5,不久又發布了Developer Toolkit 1.5.1及Developer Toolkit 1.5.2;10月9日發布了1.6版本的SDK和Developer
ToolKit,同時宣布正式在大陸開售Kinect Sensor for Windows體感儀。每一個版本都增加了一些新的功能。相信下一個版本的SDK 也會有新的功能加入。
相信大家看了這個演講之后應該可以感受到Kinect帶來的變化,也相信以后Kinect開發能應用到日常生活中的例子會越來越多。
最后,希望大家有空到Channel9上看真人演講哦,上面還有很多有意思主題演講,所有演講的PPT都可以在線看,視頻都提供下載,當您不確定那個演講想不想看時,可以看看下面的在線屁屁踢哦,當然除了那種900多M的變態PPT之外其他的都可以在線瀏覽,這樣您就可以迅速的了解演講內容以及對該內容有沒有興趣啦。
關于Kinect網上資料很多,不做詳細描述。
這里主要記錄一下V1.0和V1.2的區別。原文:http://www.cnblogs.com/TracePlus/p/4136297.html
本文主要是對傳感的配置和運行條件進行徹底的比較。
本連載介紹的Kinect for Windows Developer Preview是暫定的,軟件、硬件以及API有可能因為最終的產品版發生變更,還請諒解。
關于本連載
本連載主要是比較次世代型的Kinect for Windows(后面稱作Kinect v2預覽版)和現行型的Kinect
for Windows(后面稱作Kinect v1)的同時,介紹面向c++開發者而進化的硬件和軟件。(本網站也發布了對應C#/Visual Basic開發者的內容,.NET開發者可以同時參考[新型Kinect
for Windows v2 Developer Preview programing入門])
次世代型的Kinect for Windows
2012年美國微軟發售的Kinect v1,因為可以很方便就能取得Depth(深度)和 skeleton(人物姿勢)等信息,被全世界的開發者和研究人員關注。
2014年預定發售的Kinect v2,預測在硬件和軟件上會做很大的進化,在銷售前,開發者向的預覽版的Kinect
v2(傳感器)和SDK v2(軟件開發套件)很早就發布了出來。
還有,因為這個開發者向的早期提供程序是必須簽訂NDA(密碼保持契約),本稿有不能公布的事項也事先請各位諒解。
Kinect v1和Kinect v2預覽版的外觀比較
Kinect v1(圖1)和Kinect v2 預覽版(圖2)的外觀的照片。
圖1 Kinect for Windows v1(現行型)
Kinect v1的Depth傳感器,采用了「Light Coding」的方式,讀取投射的紅外線pattern,通過pattern的變形來取得Depth的信息。為此,Depth傳感器分為投射紅外線pattern的IR
Projector(左)和讀取的這個的IR Camera(右)。還有Depth傳感器中間還搭載了Color Camera。
Light Coding是以色列的PrimeSense公司的Depth傳感器技術,于2013年被美國蘋果公司收購。
圖2 Kinect for Windows v2(次世代型)預覽版
Kinect V2預覽版的Depth傳感器,采用的是「Time of Flight(TOF)」的方式,通過從投射的紅外線反射后返回的時間來取得Depth信息。Depth傳感器看不到外觀,不過Color Camera旁邊是紅外線Camera(左)和投射脈沖變調紅外線的Porjector(右)。
微軟過去收購過使用TOF方式處理Depth傳感器技術的公司(注:應該是指的3DV),已經在使用這個技術,不過沒有詳細的公布。
Kinect v1和Kinect v2預覽版的配置比較
Kinect v1和Kinect v2預覽版的傳感器的配置比較在表1顯示。
| Kinect v1 | Kinect v2預覽版 | ||
|---|---|---|---|
| 顏色(Color) | 分辨率(Resolution) | 640×480 | 1920×1080 |
| fps | 30fps | 30fps | |
| 深度(Depth) | 分辨率(Resolution) | 320×240 | 512×424 |
| fps | 30fps | 30fps | |
| 人物數量(Player) | 6人 | 6人 | |
| 人物姿勢(Skeleton) | 2人 | 6人 | |
| 関節(Joint) | 20関節/人 | 25関節/人 | |
| 手的開閉狀態(Hand State) | △(Developer Toolkit) | ○(SDK) | |
| 檢測範囲(Range of Detection) | 0.8~4.0m | 0.5~4.5m | |
| 角度(Angle)(Depth) | 水平(Horizontal) | 57度 | 70度 |
| 垂直(Vertical) | 43度 | 60度 | |
| (Tilt Motor) | ○ | ×(手動) | |
| 複數的App | ×(単一的App) | ○ | |
表1是Kinect v1和Kinect v2預覽版的傳感器的配置比較
Kinect v1的Color Camera的分辨率是640x480較低,不能取得非常漂亮的圖像,Kinect v2預覽版的分辨率大幅提高,能取得1920×1080非常漂亮的圖像(圖3)。
(注:v1的要求是USB2.0理論傳輸速率是60MB/s,v2是USB3.0理論傳輸速率是500MB/s??梢杂嬎阋幌拢訶RGBColor為例,30fps,那么每秒所需傳輸的數據大小為640
x 480 x 4 x 30約為35M;再加上USHORT格式的Depth Color,30fps,大小為320 x 240 x 2 x 30約為4M??傆嫾s為40MB/s,因為帶寬有限,所以在保證畫面幀率穩定的情況下,分辨率只能如此,而且基本上必須獨占一個USB
Controller。再算算v2的情況,Color =1920 x 1080x 4 x 30 約為237M,Depth = 512 x 424 x 2 x 30約為12M,總計約為250M/s。所以非USB3.0不可,否則傳輸不了這么大的數據量。顯而易見,Color
Map是最占帶寬的,其實可以通過一些其他格式,比如I420或MJPG來減少數據量,然后通過CPU或GPU來進行解壓和回放。)
圖3 Kinect v1和Kinect v2預覽版的Color
Kinect v2預覽版的Depth傳感器的分辨率也提高到512×424,而Kinect v1是可以取640×480分辨率的Depth數據,乍一看規格好像下降了,其實Kinect v1的Depth傳感器的物理分辨率是320x240,Up Sacling到640x480而已(注:猜測是Runtime處理的)。另外,Depth傳感器的方式也是從Light
Coding變更為Time of Flight(TOF)。
不能詳細敘述,不過Kinect V2預覽版Depth數據的精度也提高了(圖4),關于精度還敬請等待產品版。
圖4 Kinect v1和Kinect v2預覽版的Depth
Kinect v1,v2預覽版可以取得Player(可識別的人體)數量都是6人。Kinect v2預覽版因為Depth傳感器的分辨率提高了,用Player數據只需要簡單的剪切就可以很漂亮得把背景和人物分離。
Kinect v1可以取得全部關節(Joint)的skeleton的數量是2人,隨著Depth傳感器的分辨率上升和視角的寬廣,Kinect v2預覽版變得能取得6人。
還有,Kinect v1能取得的Joint是20個Joint每人,Kinect v2預覽版變為能取得25個Joint。具體的如圖5所示,頭(Neck),指尖(HAND_TIP_LEFT,HAND_TIP_RIGHT),大拇指(THUMB_LEFT,THUMB_RIGHT),增加了這5個Joint。不僅僅是手的位置,大拇指和指尖的細小信息也可以獲取到。
Hand State(手的開閉狀態)的識別,Kinect
v1是靠Developer Toolkit里的「Kinect Interaction」庫來支持,不過在Kinect V2預覽版SDK里是標準支持。
Kinect v1和Kinect v2預覽版可以取得的Joint
Kinect v1為了搖頭裝載了傾斜電機(Tilt motor),也有視角擴展,Kinect v2預覽版沒有搭載Tilt motor,靠手動來搖頭。
Kinect v1不能多個應用程序同時連接到一個傳感器。Kinect v2預覽版通過「Kinect Service」,可以讓多個應用程序同時從傳感器取得數據(參考圖6)
現在,Kinect Service作為常駐程序被提供, 一般認為產品版里會成為Windows的服務(Service)。
圖6 通過Kinect Service,對應多個應用程序
Kinect v1和Kinect v2 預覽版的運行環境的比較表(表2)。
|
|
Kinect v1 | Kinect v2預覽版 |
|---|---|---|
| OS | Windows 7以后 | Windows 8以后 |
| 編譯器(Compiler) | Visual Studio 2010以后 | Visual Studio 2012以后 |
| 接続端子(Connector) | USB 2.0 | USB 3.0 |
| CPU | Dual-Core 2.66GHz | Dual-Core 2.66GHz |
| GPU | DirectX 9.0c | DirectX 11.0 |
| RAM | 2.0GBytes | 2.0 GBytes |
表2 Kinect v1和Kinect v2預覽版的最小運行環境比較
Kinect v1要在Windows 7以后的版本上運行,Kinect v2要求是在Windows 8 運行。關于Visual Studio也要求是2012以后的版本。
Kinect v1要求USB 2.0(或更快的USB)來運行,因為Kinect 2預覽版傳感器的分辨率也提高了,需要更快的USB 3.0來運行。Kinect v1和Kinect v2預覽版的專有USB總線帶寬都沒有變化。
Kinect v1和Kinect v2預覽版都有與部分USB
Host Controller不兼容而導致不能正常運行的情況,現在是Renesas和Intel的USB 3.0Host Controller可以運行。臺式PC也可以增加USB3.0擴展卡來對應。
CPU方面,和Kinect v1一樣,要求Dual
Core 2.66 GHz以上?!笗r鐘頻率較低」一類的運行環境也稍微下降了,不是特別差的情況都可以運行,不過注意傳感器分辨率提高,取得的數據的處理消耗也上升了。
Kinect v1要求的是支持DirectX 9.0c的GPU(Kinect Fusion除外),Kinect
v2預覽版要求支持DirectX 11.0以后的GPU,像筆記本這種沒有裝載NVIDIA GeForce和AMD Radeon外置GPU(獨立顯卡)的很多無法運行,而像有Intel
HD Graphics這種支持DirectX 11.0以后的處理器內置的GPU(集成顯卡)是可以運行的。
如上展示了Kinect v2預覽版的必要運行環境,和前述一樣在產品版中有變更的可能性,現在還不需要著急準備對應環境。關于USBHost
Controller的兼容性今后也有解決的可能,希望起到參考的作用。
總結
這次徹底的比較了Kinect v1和Kinect v2預覽版的傳感器配置和必要運行環境。
補充:
1.V1的程序不能在V2上運行,也就是V2不向下兼容。
2.差不多與V2同時上市的,還有微軟在上海自貿區生產的游戲機,就是Xbox One。這個在中國是合法銷售的。這個游戲機如果配一臺感應器,也能玩體感游戲。這臺感應器叫“Kinect for Xbox One”。這個時候,微軟在中國已經有了兩臺感應器:用于體感游戲機的叫Kinect
for Xbox One,用于PC編程的叫Kinect for Windows V2。問題來了。V2只能用作開發,Xbox One只能玩游戲。如果你又想玩游戲,又想搞編程開發,就得買兩種感應器Kinect for Xbox One和V2。于是,微軟對這種復雜的硬件組合進行了優化,把這兩種感應器精簡為一種,它的名字叫:“Xbox
One專用Kinect感應器”。為了節省篇幅,我們在后面把它簡稱為“全能感應器”。這個“全能感應器”的功能又強大了,它可以兼容Xbox游戲機。如果再加個小設備,就可以兼容PC機。這個小設備叫“適配器”。
??
總結
以上是生活随笔為你收集整理的【计算机视觉】深度相机(五)--Kinect v2.0的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android阿里滑块验证码,在Andr
- 下一篇: android+note2+分辨率,An