----微軟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可進行的一系列應用。現在先來看第一部分吧。
二 Kinect應用情境及開發環境
首先介紹了一下Kinect的應用情境。主要有三大類方面的應用。第一是自然人機互動介面。比如說一些像少數派報告中的那種用手指非接觸即可操縱大螢幕上的顯示內容。這在一些高科技或者科幻類電影中經常能夠看到這類的情境。還有一些就是在國外已經有的應用如Kinect虛擬試衣間,Kinect車展示範廣告,Kinect 手術室影像操作,還有Kinect操作投影片,Kinect進行照片瀏覽 等等,這些自然人機互動介面的應用帶來了新的使用者體驗。第二種是自然環境識別,比如根據Kinect 產生的深度資料,紅外資料對物體進行三維掃描重建,利用Kinect進行機器人導航進行障礙物自動迴避等。第三種是自然使用者的識別,比如說利用Kinect來進行姿勢識別,Face Service。比如說一些大家比較熟悉的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的深度影像資料產生每個點的位置資訊然後產生3D 模型。如下面這個例子:
圖中左邊是通過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之外其他的都可以線上瀏覽,這樣您就可以迅速的瞭解演講內容以及對該內容有沒有興趣啦。