日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

体感开发学习总结 - 二

發(fā)布時間:2025/4/14 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 体感开发学习总结 - 二 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Kinect開發(fā)學習筆記之(一)Kinect介紹和應(yīng)用

http://blog.csdn.net/zouxy09/article/details/8145592


一、Kinect簡介
? ? ? Kinectfor Xbox 360,簡稱 Kinect,是由微軟開發(fā),應(yīng)用于Xbox 360 主機的周邊設(shè)備。它讓玩家不需要手持或踩踏控制器,而是使用語音指令或手勢來操作 Xbox360 的系統(tǒng)界面。它也能捕捉玩家全身上下的動作,用身體來進行游戲,帶給玩家“免控制器的游戲與娛樂體驗”。其在2010年11月4日于美國上市,建議售價149美金。Kinect在銷售前60天內(nèi),賣出八百萬部,目前已經(jīng)申請金氏世界記錄,成為全世界銷售最快的消費性電子產(chǎn)品。


? ? ? ?2012年2月1日,微軟正式發(fā)布面向Windows系統(tǒng)的Kinect版本“Kinect for Windows”,建議售價249美金。而在2012年晚些時候,微軟還將發(fā)布面向“教育用戶”的特別版Kinect。(以上來自wiki百科)


1.1、硬件


? ? ? ?Kinect有三個鏡頭,中間的鏡頭是 RGB 彩色攝影機,用來采集彩色圖像。左右兩邊鏡頭則分別為紅外線發(fā)射器和紅外線CMOS 攝影機所構(gòu)成的3D結(jié)構(gòu)光深度感應(yīng)器,用來采集深度數(shù)據(jù)(場景中物體到攝像頭的距離)。彩色攝像頭最大支持1280*960分辨率成像,紅外攝像頭最大支持640*480成像。Kinect還搭配了追焦技術(shù),底座馬達會隨著對焦物體移動跟著轉(zhuǎn)動。Kinect也內(nèi)建陣列式麥克風,由四個麥克風同時收音,比對后消除雜音,并通過其采集聲音進行語音識別和聲源定位。


1.2、軟件開發(fā)環(huán)境


1.2.1、非官方組合


? ? ? 一開始微軟對Xbox 360推出Kinect的時候,并沒有在windows的開發(fā)包。而由于Kinect強大的功能和相對低廉的價格,geeks們紛紛表示希望能在電腦上用它。于是就有多位大牛開發(fā)了驅(qū)動,目前我了解到的有三個:


1)CL NUI Platform


? ? ? 由NUI的大牛AlexP開發(fā)(他開發(fā)的其他著名產(chǎn)品包括PS3的windows驅(qū)動),可以到這里下載,目標平臺是windows7,能夠獲取彩色攝像頭,深度傳感器以及加速度傳感器數(shù)據(jù),使用簡單方便。


2)OpenKinect/libfreenect


? ? ? ?由號稱第一個破解Kinect的Hector Martin發(fā)起,可以到這里下載,目標平臺是Linux and Mac,據(jù)說有人成功移植到了windows上。因為很多geek都是Mac的擁躉,所以開發(fā)參與者眾多,不僅僅是個可以獲得數(shù)據(jù)的driver,geek們還寫了其他高級的東西,比如我前面提到的骨骼化,將彩色攝像頭作為紋理貼在深度數(shù)據(jù)上等等,很吸引人啊。


3)OpenNI


? ? ? ?OpenNI(opennatural interface開放自然交互)是一個多語言,跨平臺的框架,它定義了編寫應(yīng)用程序,并利用其自然交互的API。可以到這里下載。從名字判斷其終極目標大約是實現(xiàn)少數(shù)派報告的效果,從目前放出來的一些demo,恐怕已經(jīng)超越了這個終極目標。它不是專為Kinect開發(fā),但有Kinect的生產(chǎn)商PrimeSense的支持。這個感覺也是目前相對來說用的比較多的非官方組合:SensorKinect + NITE + OpenNI;其中SensorKinect是Kinect的驅(qū)動。NITE是PrimeSense提供的中間件,可以分析Kinect讀取的資料,輸出人體動作等等。


1.2.2、微軟官方SDK


? ? ? ?Kinect體感游戲在Xbox 360 上獲得很好的評價,但是對于 Windows 平臺上的開發(fā)卻一直只能使用非官方的解決方案(上面所說),例如NKinect 配合CL NUI SDK;但是微軟終于在2011 年 6 月推出了 Kinect forWindows SDK Beta,特別是可以使用 C# 與.NETFramework 4.0 來進行開發(fā)。Kinect for Windows SDK主要是針對Windows7設(shè)計,內(nèi)含驅(qū)動程序、豐富的原始感測數(shù)據(jù)流程式開發(fā)接口、自然用戶接口、安裝文件以及參考例程。Kinect for Windows SDK可讓使用C++、C#或VisualBasiC語言搭配MicrosoftVisualStudio2010工具的程序設(shè)計師輕易開發(fā)使用。目前最新是V1.6 。


? ? ? Kinectfor Windows SDK的下載地址:


http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx


? ? ? ?Kinect SDK目前只支持Windows 7,分為x86和x64兩個版本。開發(fā)工具方面還需要.NET Framework 4.0和Visual Studio 2010 (最低Express版本)的支持。這個在后面的開發(fā)環(huán)境的配置中再做介紹。


1.2.3、非官方和官方開發(fā)包的優(yōu)缺點


1)官方SDK:


優(yōu)點:


? ? ? ?提供了音頻支持、調(diào)整傾角的轉(zhuǎn)動電機、在全身跟蹤骨骼跟蹤方面:非標準姿勢檢測(相對于OpenNi的投降姿勢…),頭部、手、腳、鎖骨檢測以及關(guān)節(jié)遮擋等細節(jié)上的處理更為細致(但精度是否更高還不能確定)。此外,支持多傳感器(多臺Kinect);


缺點:


? ? ? ?微軟對非商業(yè)使用的限制。此外,未提供手勢識別和跟蹤功能,未實現(xiàn)RGB圖像/深度圖像的互對齊,只是提供了對個體坐標系的對齊。在全身骨骼跟蹤中,SDK只計算了關(guān)節(jié)的位置,并未得出其旋轉(zhuǎn)角度。從可移植的角度來看,SDK beta只能用于Kinect/Win7平臺,而OpenNi還至少支持華碩的WAVI Xtion體感設(shè)備,今后支持的硬件平臺還可能更多。相比較而言SDK beta不支持Unity3D游戲引擎、不支持記錄/回放數(shù)據(jù)寫入磁盤、不支持原始紅外視頻數(shù)據(jù)流、也不支持像OpenNi一樣的角色入場和出場的事件響應(yīng)機制。


2)非官方OpenNI/NITE:


優(yōu)點:


? ? ? ?可用于商業(yè)開發(fā)、包含手勢識別和跟蹤功能、可自動對齊深度圖像和RGB圖像,全身跟蹤、關(guān)節(jié)旋轉(zhuǎn)角度計算、看起來性能較好、已有眾多游戲產(chǎn)品應(yīng)用、支持記錄/回放數(shù)據(jù)寫入磁盤、支持原始紅外視頻數(shù)據(jù)流、支持角色入場和出場的事件響應(yīng)機制。支持Primesense和華碩的WAVI Xtion硬件平臺和windows、Linux和Mac等軟件平臺。自帶的代碼全面支持Unity3D游戲引擎。


缺點:


? ? ? ?未提供音頻功能、不支持調(diào)整傾角的轉(zhuǎn)動電機、在全身跟蹤骨骼跟蹤方面:無法跟蹤頭部、手、腳和鎖骨的旋轉(zhuǎn)動作,需要標準姿勢檢測(即著名的投降姿勢…),關(guān)節(jié)遮擋等細節(jié)上的處理似乎存在算法bug。不能自動安裝并識別Kinect多機環(huán)境。安裝過程較為繁瑣,特別是NITE還要申請開發(fā)證書編碼。OpenNi也沒有提供可用視頻和深度圖輸入的事件觸發(fā)機制(但OpenNI提供了類似功能的函數(shù)可使用,雖然不是回調(diào)函數(shù),但是也很好用)。


總結(jié):


? ? ? ?OpenNI最大的優(yōu)勢就是允許跨平臺多設(shè)備,以及商業(yè)應(yīng)用。但從原始數(shù)據(jù)的采集和預處理技術(shù)上看,微軟的SDK似乎更穩(wěn)定一些,況且還提供了不錯的骨骼和語音支持。對于部分身體部位識別方面的功能,SDKbeta沒有提供局部識別和跟蹤,這需要自己的后續(xù)開發(fā)(至少在相當一段時期內(nèi)微軟可能都不會提供此類功能)。OpenNi/NITE雖然提供了手勢識別和跟蹤,然而在全身骨骼姿勢識別和跟蹤上還要更多借鑒微軟的產(chǎn)品。


因此,按照目前在社區(qū)中的表現(xiàn),SDK beta和OpenNi/NITE孰優(yōu)孰劣還真無法一下子確定。而且隨著越來越多的開發(fā)者加入微軟這一方,SDK beta的普及可能會更快,但在更高層次的應(yīng)用上,對二者的選用往往是需要一定智慧的。


(這部分參考:http://www.hanyi.name/blog/?p=330)


二、Kinect應(yīng)用開發(fā)匯總


? ? ? 本文(百度文庫上面的內(nèi)容,來源未知)匯總了當前使用Kinect SDK for Windows 開發(fā)出的各種各樣的應(yīng)用,點擊相應(yīng)的鏈接可以看到對應(yīng)Kinect應(yīng)用的Demo視頻。


虛擬應(yīng)用


Kinect試衣鏡,這款基于kinect體感技術(shù)的神奇的試衣鏡,讓客戶可以快速的試穿衣服,提高銷售效率和企業(yè)形象。


http://v.youku.com/v_show/id_XMjU4MjExNjgw.html


Kinect自制應(yīng)用3D試衣間
http://v.youku.com/v_show/id_XMjg0MDA3MDYw.html


3D建模


3D攝像機, 用兩個KINECT實現(xiàn)3D攝像機的基本效果。


http://v.youku.com/v_show/id_XMjI3MDQ2MjEy.html


雕塑工具,立等可取Kinect成街頭快速人像雕塑工具,利用Kinect對人體進行3D建模,然后根據(jù)人體的3D信息,連接相應(yīng)的塑模設(shè)備,塑造出人體塑像。


http://v.youku.com/v_show/id_XMjU2Njg2MzE2.html


機械控制


用Kinect 操控遙控直升機?


?http://v.youku.com/v_show/id_XMjgzOTYxODk2.html


Kinect Robo,使用Kinect作為機器人的頭,通過kinect檢測周圍環(huán)境,并進行3D建模,來指導機器人的行動。


http://v.youku.com/v_show/id_XMjIzNDMyMjg0.html


Kinect控制高達機械人


http://v.youku.com/v_show/id_XMjM3NDUxMjg4.html


虛擬樂器


空氣吉他,通過Kinect手勢操作虛擬吉他彈奏音樂。


http://v.youku.com/v_show/id_XMjI5NjM3NzMy.html


Kinect彈奏中國古代樂器,通過手勢的改變可以演奏出不同中國古代樂器的聲音。


http://v.youku.com/v_show/id_XMjI1MDA4MTM2.html


虛擬娛樂


Kinect破解“初音”,將體感控制應(yīng)用到漫畫人物——初音上。


http://v.youku.com/v_show/id_XMjMxNjQ5MzAw.html


變身奧特曼,捕捉玩家骨架數(shù)據(jù),虛擬為奧特曼的形態(tài)與之隨動,并且附加一些特技效果。


http://v.youku.com/v_show/id_XMjM1MTY1NDY4.html


Kinect破解玩光劍,Kinect檢測玩家的動作,虛擬出光劍的影像,與之隨動。


http://v.youku.com/v_show/id_XMjI0NTIzOTIw.html


計算機相關(guān)應(yīng)用


Kinect手勢操作瀏覽器,通過Kinect手勢對瀏覽器進行翻頁,下拉,放縮等操作。


http://v.youku.com/v_show/id_XMjI1MjczMzg4.html


Air Presenter,讓你的演講從此與眾不同,用kinect進行演講的軟件。


http://v.youku.com/v_show/id_XMjU1MTMyNzky.html


Kinect多點觸摸,使用kinect實現(xiàn)隔空多點觸摸,瀏覽圖片、地圖等。


http://v.youku.com/v_show/id_XMjM1MzE2MTY0.html


Kinect體感控制看片,第四軍醫(yī)大學西京醫(yī)院骨科的醫(yī)生們將破解的kinect應(yīng)用在手術(shù)室,在術(shù)中,手術(shù)者可通過體感控制查看患者的影像資料。大大方便了醫(yī)生手術(shù),減少了手術(shù)室的人員流動。


http://v.youku.com/v_show/id_XMjM2Nzg2NDky.html


虛擬實驗


Kinect蠟筆物理,使用Kinect手勢繪圖,通過體感控制所繪圖形,并使之具有物理特性,比如重力,吸引力等。


http://v.youku.com/v_show/id_XMjI4MDMwMzM2.html


用Kinect控制閃電(特斯拉線圈)


http://v.youku.com/v_show/id_XMjY5NjE2MzQ0.html


游戲


Kinect破解玩馬克思佩恩


http://v.youku.com/v_show/id_XMjM2NjYxNDg0.html


kinect破解玩求生之旅2 體感打僵尸


http://v.youku.com/v_show/id_XMjM3Mjk5MjQw.html


Kinect破解玩魔獸世界 ??


http://v.youku.com/v_show/id_XMjMzMDM1MzI0.html


Kinect破解玩街頭霸王 ??


http://v.youku.com/v_show/id_XMjM4MjkzNjA0.html


Kinect破解玩超級馬里奧兄弟?


http://v.youku.com/v_show/id_XMjI1NzY1OTM2.html


Kinect破解玩兵者詭道 ??


http://v.youku.com/v_show/id_XMjM0NDk2MDg4.html


Kinect破解玩 現(xiàn)代戰(zhàn)爭 ?


http://v.youku.com/v_show/id_XMjM1NjU4NjE2.html


? ? ? ?一群來自卡內(nèi)基梅隆的學生使用Kinect的交互特點實現(xiàn)了18個各種各種的有趣的想法。他們僅僅用了兩周的時間,從大二學生到研究生不等。讓我們來看一下他們實現(xiàn)的奇思妙想吧!


? ? ? ?原文及視頻信息鏈接http://golancourses.net/2011spring/projects/project-3-interaction/


1. Comic Kinect


? ? ? 此示例主要應(yīng)用了Kinect的骨架跟蹤技術(shù)和玩家分段數(shù)據(jù),將拳擊和腳踢的交互通過可視的漫畫效果表現(xiàn)出來,并且同步發(fā)出一些擬聲效果。


2. Mario Boo


? ? ? ?當Kinect傳感器檢測到有人出現(xiàn)在視野內(nèi)時,會出現(xiàn)一個幽靈保持在人的背后,隨著人的運動而運動,并且會根據(jù)深度信息的遠近而改變自身大小。


3. Magrathea


? ? ? ?Magrathea使用Kinect根據(jù)桌上的任何物體動態(tài)的產(chǎn)生地形圖。攝像頭讀取桌上物體的不斷變化深度信息,可以展現(xiàn)出類似地球地形逐漸進化的過程。


4. We be Monsters


? ? ? ?從中午舞獅中獲取靈感,運用Kinect的骨架跟蹤技術(shù),兩個人分別同坐自己的四肢操縱虛擬怪獸的四肢和頭尾。


5. Mix&Match Interaction Toy


? ? ? ?使用了Kinect/OpenNI 骨架技術(shù),使得3張卡片組成的人體可以跟玩家隨動,并且通過手的滑動更換圖片。


6. Kinect Flock


? ? ? ?作者創(chuàng)建了一個微粒系統(tǒng),當用戶移動時,像棉絮一樣的東西會隨之涌動,當用戶靜止時,則聚集到參與者的深度區(qū)域。


7. roboScan


? ? ? ?roboScan是一個3D模型+掃描儀,將一個Kinect設(shè)備固定在一個ABB 4400機械手上。設(shè)定好的動作和操作者同時控制機器人和攝像機的3D位置。Kinect的深度數(shù)據(jù)用來產(chǎn)生一個精確的外部環(huán)境的模型。


8. Neurospasta


? ? ? ? Neurospasta是一個需要全身投入的自由形態(tài)游戲平臺。參與者可以控制他們各自基于Kinect的木偶,也可以通過功能設(shè)定控制別人的化身。


9. Will-o-the-Wisp


? ? ? 這個設(shè)計充滿了神秘色彩,玩家可以控制一個發(fā)光的球體,球體根據(jù)玩家手的運動而動,根據(jù)深度信息變大或變小。


10. Balloon Grab


? ? ? ?通過檢測手掌張開還是握緊的手勢,作者開發(fā)了一個基于模擬氣球飛行的簡易小游戲。


11. Hand-Tracking Visualization


? ? ? ?該軟件使用手勢控制音頻的可視化效果,結(jié)合檢測到場景中手距Kinect的深度信息。參與者手的位置,速度以及其他參數(shù)被用來創(chuàng)建一個交互式的聲音的可視化效果。


? ? ? ? 感覺Kinect的應(yīng)用也應(yīng)景一句話:Kinect的應(yīng)用取決于你的想象空間!
========

Kinect開發(fā)學習筆記之(二)Kinect開發(fā)學習資源整理

http://blog.csdn.net/zouxy09/article/details/8145688


? ? ? ?剛剛接觸Kinect,在網(wǎng)上狂搜資料,獲得了很多有利于學習Kinect開發(fā)的資源,現(xiàn)整理如下:


首先當然是官方的API介紹了,編程少不了的。Kinect for Windows Programming Guide:


http://msdn.microsoft.com/en-us/library/hh855348.aspx


KinectSDK的視頻開發(fā)教程:


http://channel9.msdn.com/Series/KinectSDKQuickstarts?sort=recent#tab_sortBy_recent


KinectSDK的開發(fā)指南:


http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/guides.aspx


KinectSDK的官方論壇:


http://social.msdn.microsoft.com/Forums/en-US/kinectsdk/threads


“無花無酒鋤作田”的博客,對《Apress Beginning Kinect Programming with the Microsoft Kinect SDK》這本書的連載翻譯(目前到十五節(jié)了,好像完了),這本書的的英文pdf版可以網(wǎng)上下載。書的內(nèi)容不僅介紹了如何通過Kinect SDK編程,還介紹了關(guān)于人機交互軟件設(shè)計的很多內(nèi)容,雖然書所采用的編程語言可能與你的不同,但很多設(shè)計思想很有參考價值。


http://www.cnblogs.com/yangecnu/archive/2012/03/30/KinectSDK_Geting_Started.html


馬寧的Kinect for Windows SDK開發(fā)初體驗系列


http://www.cnblogs.com/aawolf/archive/2011/06/17/2083249.html


Kinect+OpenNI學習筆記 系列


http://www.cnblogs.com/tornadomeet/archive/2012/09/26/2704046.html


timebomb的Kinect學習筆記系列(終于找到一個基于OpenCV和C++的了)


http://blog.csdn.net/timebomb/article/details/7169372


如何使用Kinect for windows SDK中的NUI(彩色圖像獲取)


http://blog.csdn.net/leowangzi/article/details/6604513


OpenCV的新版支持與OpenNI的結(jié)合,故可直接對其彩色或者深度圖像等獲取:


UsingKinect and other OpenNI compatible depth sensors


http://docs.opencv.org/doc/user_guide/ug_highgui.html


Kinect相關(guān)最新資訊:


ENGADGET中國版 http://cn.engadget.com/tag/kinect


體感之家 http://www.kinecthome.com/portal.php


商業(yè)不靠譜Kinect ?http://www.bukop.com/?s=Kinect


雷鋒網(wǎng) Kinect http://www.leiphone.com/tag/kinect


然后,下面的內(nèi)容來自:http://blog.csdn.net/chenli2010/article/details/6887646


首先是csdn上小斤童鞋的系列文章:


Kinect開發(fā)教程一:OpenNI的安裝與開發(fā)環(huán)境配置


Kinect開發(fā)教程二:OpenNI讀取深度圖像與彩色圖像并顯示


Kinect開發(fā)教程三:利用OpenNI進行手勢識別


Kinect開發(fā)教程四:用Kinect控制鼠標玩水果忍者PC版


Kinect開發(fā)教程五:OpenNI獲取人體骨架


其次是mp77技術(shù)交流頻道上的系列文章,基于openNI的《user guide》來寫的,簡明易懂(作者自稱西大學生,俺不知是哪個西大):


Kinect內(nèi)幕——解析SDK(OpenNIFramework 1):PrimeSense OpenNI Framework的基本架構(gòu)和設(shè)計思路


Kinect內(nèi)幕——解析SDK(OpenNIFramework 2):工作節(jié)點的創(chuàng)建和銷毀


Kinect內(nèi)幕——解析SDK(OpenNIFramework 3):openNI編程


Kinect內(nèi)幕——解析SDK(OpenNIFramework 4):工作節(jié)點的配置


然后是臺灣牛人heresy的系列介紹文章,他好像是第一個用漢字介紹Kinect和openNI的先驅(qū)者,小斤童鞋的文章基本上是參照他的(萬惡的資本主義世界的人咋就有了得天獨厚的優(yōu)勢!):


透過 OpneNI 讀取 Kinect 深度影像資料


透過 OpneNI 合併 Kinect 深度以及彩色影像資料


透過 OpenNI 建立 Kinect 3D Point Cloud


錄製、重播 OpenNI 擷取到的資料


透過 OpenNI / NITE 分析人體骨架(上)


透過 OpenNI / NITE 分析人體骨架(下)


OpenNI 的手勢偵測


OpenNI 人體骨架分析部分補充


讓 OpenNI 可以透過微軟 Kinect SDK 讀取 Kinect 的資料!


OpenNI XnSkeletonJointOrientation簡單分析


使用 XML 設(shè)定檔來初始化 OpenNI


OpenNI 的手部追蹤、外加簡單的滑鼠模擬


OpenNI 的 User Generator


晨宇思遠的博客,關(guān)于openNI的好像只有下面一篇文章,但他的opencv的文章有很多,很值得一讀:


OpenCV學習筆記(20)Kinect + OpenNI+ OpenCV + OpenGL 組合體驗


同樣是牛人heresy的系列文章,只是它長在一個不和諧的地方,怎么訪問大家都懂的:


OpenNI / Kinect 相關(guān)文章目錄


繼續(xù)來CSDN上的童鞋博客:


利用KINECT+OPENCV檢測手勢的演示程序


國內(nèi)kinect開發(fā)的主要社區(qū)之一,其中有很多資源,有時間不妨多逛逛:


kinect 體感游戲網(wǎng)


cnkinect上的童鞋發(fā)起的Kinect for PC 項目,是學習kinect的又一個好地方:


kinect for pc 項目的wiki主頁
========

Kinect開發(fā)學習筆記之(三)Kinect開發(fā)環(huán)境配置

http://blog.csdn.net/zouxy09
?
? ? ? 我的Kinect開發(fā)平臺是:


Win7 x86 + VS2010 + Kinect for Windows SDK v1.6 + OpenCV2.3.0


一、基本要求


Microsoft Visual Studio? 2010 預覽版或者其他VisualStudio 2010發(fā)行版


?Microsoft.NET Framework 4.0 (安裝在Visual Studio 2010)


對于C++開發(fā)者要瀏覽骨骼樣例需要:


DirectXSoftware Development Kit,June 2010或最新版


DirectXEnd-User Runtime Web Installer


對于語音識別樣例 (x86only):


?MicrosoftSpeech Platform - Server Runtime, version 10.2 (x86 edition)


MicrosoftSpeech Platform - Software Development Kit, version 10.2 (x86 edition)


Kinect for Windows RuntimeLanguage Pack, version 0.9 (微軟語音平臺為Kinect Windows SDK Beta提供的聲學模型)
?
二、安裝和配置Kinect for Windows SDK v1.6


2.1、下載


? ? ? ?在下面的網(wǎng)站下載Kinect for Windows SDK和Developer Toolkit:


http://www.microsoft.com/en-us/kinectforwindows/develop/developer-downloads.aspx


? ? ? ?其中,下載回來的文件是KinectSDK-v1.6-Setup.exe(主要提供Kinect的驅(qū)動和設(shè)備訪問接口) 和KinectDeveloperToolkit-v1.6.0-Setup.exe(主要提供一些有助于開發(fā)的工具,包括Kinect Studio和多種編程語言的開發(fā)例程等)。


2.2、安裝與測試


? ? ? ? 上面的兩個開發(fā)板安裝非常簡單,全程按默認配置安裝完即可。


? ? ? ? 安裝完后,插入Kinect,系統(tǒng)將會自動的搜索驅(qū)動。要安裝的驅(qū)動還是比較多的,最后安裝成功后,設(shè)備管理器里面增加了如下項:


? ? ? ?為了檢查是否安裝成功,我們在開始處找到Developer Toolkit Browser v1.6.0 (Kinect for Windows),這個就是我們上面安裝的開發(fā)包工具。打開后發(fā)現(xiàn)資源還挺多的。包括一些開發(fā)文檔,開發(fā)工具和支持很多編程語言的例程(點擊install,就可將源代碼工程復制到你指定的目錄,我們也可以直接到這個開發(fā)包工具的安裝目錄的samples文件夾下查看):


? ? ? ?我們Run上圖的這個SkeletonViewer,如果之前的安裝是正確的話,那么這個程序就顯示你的彩色圖像、深度圖像和骨架等等數(shù)據(jù)。當然,還有其他比較有趣的應(yīng)用,我們可以都運行看看。


2.3、在VS2010中配置開發(fā)環(huán)境


? ? ? 要使用VS進行開發(fā)的話,需要配置include和lib路徑。


進入VS,進入項目屬性,在Projects and Solutions中,選擇VC++Directories。


假設(shè)Kinect是安裝在默認路徑下,則


(1)Include files加入C:\Program Files\Microsoft SDKs\Kinect\v1.6\inc;


(2)Library files加入C:\Program Files\Microsoft SDKs\Kinect\v1.6\lib\x86;


(3)還需要在鏈接器的輸入中,增加附加依賴性:Kinect10.lib


這樣VS的開發(fā)環(huán)境就配置好了。


? ? ? 下面我們看看Kinect的開發(fā)包含哪些頭文件:


C:\Program Files\MicrosoftSDKs\Kinect\v1.6\inc 目錄下有:


NuiApi.h ---包含所有的NUI(自然用戶界面) API頭文件和定義基本的初始化和函數(shù)訪問入口。這是我們C++工程的主要頭文件,它已經(jīng)包含了NuiImageCamera.h 和 NuiSkeleton.h。


NuiImageCamera.h ---定義了圖像和攝像頭服務(wù)的API,包括調(diào)整攝像頭的角度和仰角,打開數(shù)據(jù)流和讀取數(shù)據(jù)流等。


NuiSkeleton.h ---骨架有關(guān)的API,包括使能骨架跟蹤,獲取骨架數(shù)據(jù),骨架數(shù)據(jù)轉(zhuǎn)換和平滑渲染等。


NuiSensor.h ---音頻API,包括ISoundSourceLocalizer接口,用于返回聲源的方向(波束形成)和音頻的位置。


三、配置OpenCV


? ? ? ?OpenCV是Intel的開源計算機視覺庫。它由一系列 C 函數(shù)和少量 C++ 類構(gòu)成,實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法。


主頁:http://opencv.org/


? ? ? ?最新版本是OpenCV 2.4.3,屬于比較穩(wěn)定的版本。但是我電腦已經(jīng)配置了2.3.0版本了,所以暫時就用2.3.0,他們的API的名稱都一樣,所以基于2.3的程序在2.4應(yīng)該不用怎么修改就可以用。


這里,我們用到OpenCV來顯示和處理獲取到的顏色和深度圖像等,所以也需要將其添加進工程里面。和上面的過程一樣(你安裝的目錄可能不一樣,請按實際情況操作):


(1)Include files加入D:\opencv2.3.0\OpenCV2.3\build\include;


(2)Library files加入D:\opencv2.3.0\OpenCV2.3\build\x86\vc10\lib;


(3)還需要在鏈接器的輸入中,增加附加依賴性:


opencv_highgui230.lib


opencv_core230.lib


opencv_video230.lib


opencv_imgproc230.lib


其他的在需要的時候再添加了。


? ? ? ?好了,到這里,環(huán)境都配置好了,下一步就可以步入Kinect開發(fā)這個精彩的世界了。


? ? ? 《人月神話》里說:編程的快樂是一種創(chuàng)建事物的純粹的快樂,程序員憑空的運用自己的想象,來建造自己的“城堡”,而快樂來自于整個過程體現(xiàn)出來的一股強大的魅力---將相互齒和的零部件組裝在一起,看到它們以精妙的方式運行著,并看到了你所創(chuàng)建的世界!
========

深入理解Kinect for Windows開發(fā)

http://www.cnblogs.com/yangecnu/archive/2012/11/05/Build2012_Kinect_for_Windows_Programming_Deep_Dive.html


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?----微軟Build2012大會:Kinect for Windows Programming Deep Dive


? ? 這個周末看了兩天的微軟Build 2012大會,真的是一次盛會,上面有很多的演講主題,都是微軟相關(guān)技術(shù)和產(chǎn)品的最新動態(tài),我比較關(guān)注.NET、WPF、Office及Kinect相關(guān)開發(fā),上面的演講視頻和PPT都可以下載,個人覺得比較精彩的有The Evolution of .NET ,回顧了微軟推出.NET以來的歷次開發(fā)者大會推出的新版本和新特性,里面還有10多年前比爾蓋子老師在開發(fā)者大會上宣布.NET戰(zhàn)略時的演講視頻,不覺得感嘆歲月是把殺豬刀啊。 What's New for Developers in Office 2013 and SharePoint 2013 介紹了不同于以往的以VBA,SharedAddIn,以及VSTO的全新的Office開發(fā)方式OfficeApp,Building apps for Office and SharePoint 2013 using the web technologies you know and love, Part 1、Part2介紹了如何使用各種我們熟悉的技術(shù)如Html、Javascript、C#等來構(gòu)建OfficeApp。上面還有很多關(guān)于Windows Phone 8,WPF4.5等相關(guān)的介紹,主題很多,強烈建議大家有空可以上去看看。


? ? 大會上關(guān)于Kinect開發(fā)有三個,第一個是微軟研究院講的Super-Natural Interaction這個PPT比演講視頻都大,達到了罕見的997M,為啥這么大呢,因為里面嵌入了一個長達40分鐘視頻,哈哈,這個演講主要演示了微軟研究院正在進行的各種人機交互,虛擬現(xiàn)實等研究,非常的Cutting-edge,里面也有和Kinect相關(guān)的部分,有興趣的可以看看。第二個是Kinect Design Considerations,一則關(guān)于Kinect應(yīng)用程序設(shè)計是應(yīng)該考慮的問題比如交互方式的設(shè)計的演講,我沒有太仔細看,不過內(nèi)容應(yīng)該和Kinect Human Interface Guideline內(nèi)容差不多,您可以在Kinect Developer Toolkit中查看。第三篇演講是 Kinect for Windows Programming Deep Dive ?我將這個翻譯為了深入理解Kinect for Windows開發(fā),相對來說該演講和Kinect開發(fā)比較相關(guān),現(xiàn)與大家分享,該演講上面寫的級別為 300-advanced,個人覺得這個演講內(nèi)容其實很簡單,只是對Kinect能夠獲取的相關(guān)數(shù)據(jù)源,Kinect SDK處理過了的可供識別的數(shù)據(jù)源,以及未來的趨勢和大家做了一下介紹。Kinect SDK中其實沒有太多的東西,真正的則在于各種模式識別算法,比如通過深度數(shù)據(jù),紅外數(shù)據(jù),進行各種物體識別等等,有了這些數(shù)據(jù),尤其是1.6版本的SDK提供的獲取紅外原始數(shù)據(jù),就可以通過這個數(shù)據(jù),結(jié)合深度數(shù)據(jù)做出很多非常令人驚嘆的應(yīng)用來。廢話不多說了,下面和大家分享一下該演講的主要內(nèi)容,也算是一個關(guān)于Kinect開發(fā)的比較好的入門介紹吧。


一 大綱
Slide2


? ? 演講大體分為5個部分,第一部分介紹了Kinect SDK的開發(fā)方式以及運行環(huán)境,第二部分是寫代碼,講解Kinect中的一些彩色,深度,骨骼等數(shù)據(jù)的處理和顯示,第三部分講解了傳感器直接產(chǎn)生的數(shù)據(jù)流,包括彩色,深度,紅外,語音,加速器數(shù)據(jù)源,第四部分講解了經(jīng)過Kinect SDK對原始數(shù)據(jù)流處理后的可供用來進行直接識別的,骨骼,語音及面部識別數(shù)據(jù)源,最后一部分講解了未來Kinect可進行的一系列應(yīng)用。現(xiàn)在先來看第一部分吧。


二 Kinect應(yīng)用場景及開發(fā)環(huán)境
? ? 首先介紹了一下Kinect的應(yīng)用場景。主要有三大類方面的應(yīng)用。第一是自然人機交互界面。比如說一些像少數(shù)派報告中的那種用手指非接觸即可操縱大屏幕上的顯示內(nèi)容。這在一些高科技或者科幻類電影中經(jīng)常能夠看到這類的場景。還有一些就是在國外已經(jīng)有的應(yīng)用如Kinect虛擬試衣間,Kinect車展演示廣告,Kinect 手術(shù)室影像操作,還有Kinect操作幻燈片,Kinect進行照片瀏覽 等等,這些自然人機交互界面的應(yīng)用帶來了新的用戶體驗。第二種是自然環(huán)境識別,比如根據(jù)Kinect 產(chǎn)生的深度數(shù)據(jù),紅外數(shù)據(jù)對物體進行三維掃描重建,利用Kinect進行機器人導航進行障礙物自動回避等。第三種是自然用戶的識別,比如說利用Kinect來進行姿勢識別,人臉識別。比如說一些大家比較熟悉的XBOX360 中的 舞林大會,運動會,大冒險等體感游戲,這些都是利用Kinect的一些數(shù)據(jù)來進行用戶的動作識別,從而參與到游戲中的互動。還有一些增強現(xiàn)實的應(yīng)用,利用了上面的三個方面的特性,比如說利用Kinect來將熒幕變成觸摸屏,并在上面可以進行各種操作,等等應(yīng)用。


Slide3


? ? 要開發(fā)上面的應(yīng)用,首先要了解一下開發(fā)環(huán)境,如這張幻燈片所示:


Slide4


? ? Kinect 提供了非托管(C++)和托管(.NET)兩種開發(fā)方式的SDK,如果您用C++開發(fā)的話,需要安裝Speech Runtime(V11),Kinect for Windows Runtime和驅(qū)動的,如果您使用C#和VB.NET的話,需要Microsoft.Kinect.dll和Mirosoft.Speech.dll兩個dll,這兩個其實是對前C++里面的兩個dll的.NET封裝,不論何種開發(fā),您都需要安裝driver,所有這些都包含在Kinect SDK安裝包中,安裝方法您可以參考之前的文章。Kinect開發(fā)支持Windows7/Windows Embedded Standard/Windows8操作系統(tǒng),最新的1.6版本的SDK還支持虛擬機里面的Windows系統(tǒng),不過只要年代不太久遠的Windows系統(tǒng)應(yīng)該都是可以的。上面寫的最好使用.NET 4.0/4.5也只是建議,老版本的應(yīng)該也行。如果是使用.NET開發(fā)方式的話,您需要安裝.NET Framework,IDE可以使用Visual Studio 2010/2012。


三 代碼演示
? ? 這部分主要是通過編寫代碼演示Kinect的各項功能,代碼我在這里就不講了。


? ? 首先第一個演示是顯示彩色影像,比較簡單。然后是結(jié)合深度影像數(shù)據(jù)顯示彩色影像數(shù)據(jù)上對應(yīng)某一點的深度值。


demo1


? ? ?圖上使用鼠標點擊就能夠加上一個標簽,標簽里面的值是該點的深度值,這個功能應(yīng)該是比較好實現(xiàn)的,主要是展示如何使用彩色影像數(shù)據(jù)和深度數(shù)據(jù),您如果感興趣的話看完這篇文章應(yīng)該就能實現(xiàn)這個功能。


? ? 然后演示了骨骼追蹤功能,圖中追蹤了頭部,雙手的位置,并顯示了兩只手所處的深度值,頭部上顯示的Tracking ID,Kinect能同時追蹤6個待選目標,但只有兩個目標處于活動狀態(tài)。每一次追蹤都會分配給目標一個Tracking ID。


demo2


這個功能主要演示了如何使用骨骼數(shù)據(jù),您如果感興趣的話看完這篇文章應(yīng)該就能實現(xiàn)這個功能。


? ? ?除了1.5及之前能夠提供的各種數(shù)據(jù)之外,1.6 的SDK提供了紅外影像數(shù)據(jù),您可以利用數(shù)據(jù)校準彩色影像數(shù)據(jù),使得在較暗的條件下也能夠進行人物識別。其實Kinect骨骼識別主要是通過深度數(shù)據(jù)來實現(xiàn)的,而深度數(shù)據(jù)是通過紅外發(fā)射接收產(chǎn)生的,1.6版本的SDK提供了我們直接訪問和操作紅外數(shù)據(jù)的能力。


demo7


? ? 第四個Demo是演示了Kinect的面部識別功能,Kinect的面部識別是在1.5 SDK中引入的,面部識別可以識別最多達一百多個面部特征點,下面是演示的Demo:


demo3


? ? 上面的功能在Kinect Developer Toolkit中有實例和源代碼,您可以下載查看,入門的話,您也可以看這篇文章,比較簡單的對使用FaceTracking的一點介紹。


? ? Kinect除了這些功能之外還有強大的語音識別功能,在這篇演講中沒有演示出來,不過在Super-Natural Interaction這篇演講的視頻中,您可以體會該改功能的強大,Kinect語音識別不僅能夠識別出聲音,而且還能對聲音的來源方向進行識別,且具有強大的去噪增強功能,要了解這些你可以看這篇文章,對Kinect的語音識別做了一些簡單的介紹。


四 Kinect數(shù)據(jù)源及應(yīng)用
? ? Kinect開發(fā)涉及到的數(shù)據(jù)源分為兩類:


? ? 一類是傳感器本身產(chǎn)生的原始數(shù)據(jù)源,比如說彩色影像數(shù)據(jù)源,深度影像數(shù)據(jù)源,語音數(shù)據(jù)源,紅外影像數(shù)據(jù)源,加速計數(shù)據(jù)源,其中紅外影像數(shù)據(jù)源,加速計數(shù)據(jù)源是在1.6的SDK中新加入的。下面這張圖很好的說明了各個數(shù)據(jù)源:


Sensor Resource Image


? ? 第二類數(shù)據(jù)源是,SDK中通過一些算法識別出來的可以直接拿來進行識別的數(shù)據(jù)源,他們包括:骨骼追蹤,語音識別,面部識別數(shù)據(jù)源。


Recognize source


? ? 可以看到,骨骼追蹤數(shù)據(jù)源是在深度影像數(shù)據(jù)源的再通過一系列算法實現(xiàn)的,語音識別是通過語音數(shù)據(jù)源再通過一系列算法實現(xiàn)的,而面部識別則綜合了彩色影像、深度影像和骨骼追蹤為系列數(shù)據(jù)源的再通過一系列算法實現(xiàn)的。這些功能都是通過SDK來實現(xiàn)的。


? ? 有了這些數(shù)據(jù)源,就能夠進行各種應(yīng)用了:


application


? ? 典型的應(yīng)用有綠屏摳像,這個功能在一些電視節(jié)目錄制,比如天氣預報節(jié)目中都是應(yīng)用的這個實現(xiàn)的,他把任務(wù)從背景中分離出來,然后可以隨意的更換背景,這個功能用到了影像數(shù)據(jù)和深度數(shù)據(jù),你可以參考這篇文章,里面有一個簡單的例子。第二個應(yīng)用是產(chǎn)生點陣云,就是通過Kinect的深度影像數(shù)據(jù)產(chǎn)生每個點的位置信息然后生成三維模型。如下面這個例子:


demo4


? ? 圖中左邊是通過Kinect的深度影像數(shù)據(jù)產(chǎn)的三維建模圖像。


? ? 第三個應(yīng)用是魔鏡功能,我覺得應(yīng)該是一些類似哈哈鏡效果或者是IOS中的Photo Booth應(yīng)用,主要用到了彩色影像數(shù)據(jù),面部識別,骨骼識別等功能。還有一些就是虛擬試衣間這樣的功能,最后的一個應(yīng)用場景就是各種NUI交互界面了。


五 展望
? ? 除了以上的幾種典型的數(shù)據(jù)源之外,還展示了下一步的計劃,比如說針對景深數(shù)據(jù)進行進一步處理的Kinect Fusion數(shù)據(jù)源。


next


? ? 下面是演示的例子:圖中,右邊桌子上擺放了一個茶壺,然后利用Kinect對該茶壺進行了三維建模,然后。移除右邊實物茶壺后,用戶可以對虛擬的茶壺進行各種操作,神奇吧,這些都是下一個版本或者是將來的SDK能夠方便我們或者簡化我們實現(xiàn)這些功能準備添加的功能。


demo6


到最后展望了下一步要進行的工作:


Slide22


? ? 可以看出Kinect的愿景是使得計算機能夠看到、聽到、能夠更加理解周圍的人和環(huán)境。


? ? Kinect SDK的版本發(fā)布是很快的,自從今年二月份發(fā)布了Kinect Sensor for Windows 體感儀及Kinect for Windows SDK 1.0官方版本以來;5月21日 發(fā)布了1.5版本SDK以及1.5的Developer Toolkit及調(diào)試工具Kinect Studio 1.5,不久又發(fā)布了Developer Toolkit 1.5.1及Developer Toolkit 1.5.2;10月9日發(fā)布了1.6版本的SDK和Developer ToolKit,同時宣布正式在大陸開售Kinect Sensor for Windows體感儀。每一個版本都增加了一些新的功能。相信下一個版本的SDK 也會有新的功能加入。


? ? 相信大家看了這個演講之后應(yīng)該可以感受到Kinect帶來的變化,也相信以后Kinect開發(fā)能應(yīng)用到日常生活中的例子會越來越多。


? ? 最后,希望大家有空到Channel9上看真人演講哦,上面還有很多有意思主題演講,所有演講的PPT都可以在線看,視頻都提供下載,當您不確定那個演講想不想看時,可以看看下面的在線屁屁踢哦,當然除了那種900多M的變態(tài)PPT之外其他的都可以在線瀏覽,這樣您就可以迅速的了解演講內(nèi)容以及對該內(nèi)容有沒有興趣啦。
========

使用Kinect測量身高

http://www.cnblogs.com/yangecnu/archive/2012/11/12/Kinect_Measure_Height.html


? ? 使用Kinect測量身高的方法其實有很多種:


? ? 第一種方式是使用Kinect的視場角以及結(jié)合一些三角形幾何運算,就可以大致測量出物體的高度,這一點在之前介紹深度影像處理的時候有提到。


? ? 第二種方式是使用Kinect骨骼追蹤提供的20個關(guān)節(jié)點的相關(guān)坐標,在根據(jù)一定的算法測量出人體的身高。在Channel9上面的這個例子的一個分享,在這里拿過來和大家分享一下。在這里,根據(jù)臂展和身高有相似的關(guān)系,我對這個例子做了一點擴展,計算臂展來粗略計算身高,用臂展計算身高其實有個好處就是既可以使用正常模式(Normal model,20個關(guān)節(jié)點),可以使用坐姿模式(Seat model,10 個關(guān)節(jié)點),這樣您坐著就可以測量身高,不過精度不保證哈。這里只是提供這么一個思路。


一. 計算身高的算法
? ? Kinect獲取的骨骼數(shù)據(jù)包含20個關(guān)節(jié)點的X,Y,Z坐標信息。您可能會想,為什么不直接使用頭部(head)關(guān)節(jié)點和腳趾(foot)關(guān)節(jié)點之間的距離來直接計算身高。這樣不準確,因為用戶可能并沒有站直,如果這樣算的話,誤差比較大。


? ? 另一個問題是,頭部關(guān)節(jié)點給出的是頭部中心點的位置,如果使用這個位置,您需要額外增加9至11厘米,但是即使這樣,也不能達到百分之一百的準確,如果要更精確一點的話,可能需要使用深度影像值來提取頭部的頂部位置。也不需要那么麻煩,現(xiàn)在來看看我們怎樣使用骨骼關(guān)節(jié)點來計算高度信息。


? ? 仔細觀察下面的骨骼點,可以看到,身高可以由下面幾部分組成(如圖中紅色部分):


? 頭部(Head) –肩膀中心(ShoulderCenter)


? 肩膀中心(ShoulderCenter) – 脊柱中心(Spine)


? 脊柱中心(Spine) – 髖部中心(HipCenter)


? 髖部中心(HipCenter) – 左或右膝關(guān)節(jié)(KneeLeft or KneeRight)


? 左膝關(guān)節(jié)KneeLeft(右膝關(guān)節(jié)KneeRight) – 左踝關(guān)節(jié)leLeft (右踝關(guān)節(jié)AnkleRight)


? 左踝關(guān)節(jié)leLeft (右踝關(guān)節(jié)AnkleRight)- 左腳FootLeft (右腳FootRight)


KinectMeasureHeightw


使用臂展計算身高,也可以計算圖中綠色所示的關(guān)節(jié)點:


? 左手(HeadLeft) –左手腕(Wrist Left)


? 左手腕(Wrist Left) – 左胳膊肘(Elbow Left)


? 左胳膊肘(Elbow Left) – 左肩膀(Shoulder Left)


? 左肩膀(Shoulder Left)–肩膀中心(Shoulder Center)


? 肩膀中心(Shoulder Center)-右肩膀(Shoulder Right)


? 右肩膀(Shoulder Right)- 右胳膊肘 (Elbow Right)


? 右胳膊肘 (Elbow Right)- 右手腕(Wrist Right)


?右手腕(Wrist Right)- 右手 (Hand Right)


? ?原理就是這樣,下面來編代碼實現(xiàn)。


二. 實現(xiàn)
? ? 程序界面很簡單,展示20個關(guān)節(jié)點,然后顯示計算結(jié)果。有幾點需要說明:


? ? 首先,關(guān)節(jié)點的位置信息是三維的,下面公式用來計算兩個關(guān)節(jié)點的距離


public static double Length(Joint p1, Joint p2)
{
? ? return Math.Sqrt(
? ? ? ? Math.Pow(p1.Position.X - p2.Position.X, 2) +
? ? ? ? Math.Pow(p1.Position.Y - p2.Position.Y, 2) +
? ? ? ? Math.Pow(p1.Position.Z - p2.Position.Z, 2));
}
? ? 上面的代碼很直接。第二步,我們應(yīng)該使用左腿還是右腿還進行測量更加準確呢,我們使用那個追蹤的最好的。下面的代碼用來計算腿部處于追蹤狀態(tài)的點的數(shù)量。如果那個數(shù)量多,那么就用那一個。


public static int NumberOfTrackedJoints(params Joint[] joints)
{
? ? int trackedJoints = 0;


? ? foreach (var joint in joints)
? ? {
? ? ? ? if (joint.TrackingState == JointTrackingState.Tracked)
? ? ? ? {
? ? ? ? ? ? trackedJoints++;
? ? ? ? }
? ? }


? ? return trackedJoints;
}
? ? 使用上面的函數(shù),我們就可以判斷是使用左腿還是右腿了。


// Find which leg is tracked more accurately.
int legLeftTrackedJoints = NumberOfTrackedJoints(hipLeft, kneeLeft, ankleLeft, footLeft);
int legRightTrackedJoints = NumberOfTrackedJoints(hipRight, kneeRight, ankleRight, footRight);


double legLength = legLeftTrackedJoints > legRightTrackedJoints ? Length(hipLeft, kneeLeft, ankleLeft, footLeft) : Length(hipRight, kneeRight, ankleRight, footRight);
? ? ?然后我們使用擴展方法,來計算骨骼的高度。下面是方法的代碼:


public static double Height(this Skeleton skeleton)
{
? ? const double HEAD_DIVERGENCE = 0.1;


? ? var head = skeleton.Joints[JointType.Head];
? ? var neck = skeleton.Joints[JointType.ShoulderCenter];
? ? var spine = skeleton.Joints[JointType.Spine];
? ? var waist = skeleton.Joints[JointType.HipCenter];
? ? var hipLeft = skeleton.Joints[JointType.HipLeft];
? ? var hipRight = skeleton.Joints[JointType.HipRight];
? ? var kneeLeft = skeleton.Joints[JointType.KneeLeft];
? ? var kneeRight = skeleton.Joints[JointType.KneeRight];
? ? var ankleLeft = skeleton.Joints[JointType.AnkleLeft];
? ? var ankleRight = skeleton.Joints[JointType.AnkleRight];
? ? var footLeft = skeleton.Joints[JointType.FootLeft];
? ? var footRight = skeleton.Joints[JointType.FootRight];


? ? // Find which leg is tracked more accurately.
? ? int legLeftTrackedJoints = NumberOfTrackedJoints(hipLeft, kneeLeft, ankleLeft, footLeft);
? ? int legRightTrackedJoints = NumberOfTrackedJoints(hipRight, kneeRight, ankleRight, footRight);


? ? double legLength = legLeftTrackedJoints > legRightTrackedJoints ? Length(hipLeft, kneeLeft, ankleLeft, footLeft) : Length(hipRight, kneeRight, ankleRight, footRight);


? ? return Length(head, neck, spine, waist) + legLength + HEAD_DIVERGENCE;
}
? ? ?同樣滴,我們使用手,手腕,胳膊肘,肩膀,等9個關(guān)節(jié)點來計算臂展,并使用臂展來近似計算身高,下面的名為ArmExtendWith的擴展方法即為計算臂展的方法。


public static double ArmExtendWith(this Skeleton skeleton)
{
? ? var armWidthDeviation = 0.5;
? ? var handRight = skeleton.Joints[JointType.HandRight];
? ? var wristRight = skeleton.Joints[JointType.WristRight];
? ? var elowRight = skeleton.Joints[JointType.ElbowRight];
? ? var shoulderRight = skeleton.Joints[JointType.ShoulderRight];
? ? var shoulderCenter = skeleton.Joints[JointType.ShoulderCenter];


? ? var handleft = skeleton.Joints[JointType.HandLeft];
? ? var wristleft = skeleton.Joints[JointType.WristLeft];
? ? var elowleft = skeleton.Joints[JointType.ElbowLeft];
? ? var shoulderleft = skeleton.Joints[JointType.ShoulderLeft];




? ? // Calculate the left and right arm extends width
? ? double rightArmExtendsWidth = Length(handRight, wristRight, elowRight, shoulderRight, shoulderCenter);
? ? double leftArmExtendsWidth = Length(handleft, wristleft, elowleft, shoulderleft, shoulderCenter);


? ? return rightArmExtendsWidth + leftArmExtendsWidth + armWidthDeviation;
}
? ? 最后,再SkeletonFrameReady事件中調(diào)用該方法即可。


void Sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
? ? using (var frame = e.OpenSkeletonFrame())
? ? {
? ? ? ? if (frame != null)
? ? ? ? {
? ? ? ? ? ? canvas.Children.Clear();


? ? ? ? ? ? Skeleton[] skeletons = new Skeleton[frame.SkeletonArrayLength];


? ? ? ? ? ? frame.CopySkeletonDataTo(skeletons);


? ? ? ? ? ? var skeleton = skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked).FirstOrDefault();


? ? ? ? ? ? if (skeleton != null)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? // Calculate height.
? ? ? ? ? ? ? ? double height = Math.Round(skeleton.Height(), 2);
? ? ? ? ? ? ? ? double armExtendsWidth = Math.Round(skeleton.ArmExtendWith(), 2);
? ? ? ? ? ? ? ? // Draw skeleton joints.
? ? ? ? ? ? ? ? foreach (JointType joint in Enum.GetValues(typeof(JointType)))
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? DrawJoint(skeleton.Joints[joint].ScaleTo(640, 480));
? ? ? ? ? ? ? ? }


? ? ? ? ? ? ? ? // Display height.
? ? ? ? ? ? ? ? tblHeight.Text = String.Format("Height: {0} m", height);
? ? ? ? ? ? ? ? tblArmExtendWidth.Text = String.Format("ArmWidth: {0} m", armExtendsWidth);
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
? ? 現(xiàn)在您可以運行代碼查看結(jié)果了。


三. 結(jié)語
? ? ?本文介紹了兩種利用Kinect測量身高的方法,一種是之前講過的,利用Kinect的視場角和物體構(gòu)成的三角關(guān)系,運用幾何運算,測量物體身高,第二種是利用Kinect提供的骨骼數(shù)據(jù),根據(jù)關(guān)節(jié)點直接的距離,來計算人體的身高。本文著重講解了利用骨骼關(guān)節(jié)點之間的距離計算身高的兩種方法,一種是Channel9上面分享的利用頭部、脊柱、髖關(guān)節(jié)、膝關(guān)節(jié)、踝關(guān)節(jié)等8個關(guān)節(jié)點的長度來計算身高,還有一種就是使用與臂展相關(guān)的,手、手腕、胳膊肘、肩膀等9個關(guān)節(jié)點信息,較第一種方法相比,該方法可以使用坐姿模式進行計算,意味著您坐著就可以測量身高。當然,可能精度不是很準確,本文只是提供了一些Kinect在測量身高方面的思路,源代碼點擊此處下載,希望本文對您有幫助!

========

體感開發(fā)資源鏈接

http://www.cnblogs.com/yangecnu/category/373950.html

Kinect for Windows SDK

29 篇文章

總結(jié)

以上是生活随笔為你收集整理的体感开发学习总结 - 二的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。