Kinect 總結---Kinect基本認識


玩了Kinect也有差不多一年的時間了,覺得Kinect是個挺好玩挺有未來的玩意。但是很經常做完了一次,下次又得重新看源碼,沒有把Kinect里的知識總結起來變為自己的知識,所以特意重新總結一下自己使用Kinect的心得

(備注Kinect版本為2.0,用的是Kinect官方的unity包,(Kinect-MS-sdk這個也是很不錯的包,里面的demo比官方的還完善,但是不便於總結,所以先講官方的SDK))。

 

1.Kinect原理:

kinect1:Prime Sense公司的Light Coding技術作為原理,給不可見光打碼,然后檢測打碼后的光束,判斷物體的方位。

kinect2:TOF原理(精度、靈敏度和分辨率都更高),根據光反射回來的時間判斷物體的方位,當然檢測光的飛行速度是幾乎不能實現的,所以發射一道強弱隨時間變化的正弦光束,然后計算其回來的相位差值,所以使用場景盡量避免反射物以及不要移動Kinect,不然會有問題。

 

2.可供研究開源庫:Openni,KinectSDK,手勢庫NITE,Kinect-ms-sdk。由於我是新手,而且比較熟悉的Kinect的SDK,所以就從這個開始總結,其他的有機會再來詳細分析。

 

3.首先你用Kinect,首先要了解它能干什么,能獲得哪些數據

其實看他的SDK就知道它能獲取的數據包括:語音,彩色圖像,深度圖像,骨骼數據(這個是根據深度和彩色通過算法識別提供給開發者使用的)。而又這幾種數據又能擴展出什么新的數據,開發出什么有趣的功能完全是由開發者們的能力和對世界的好奇。(官方SDK已提供了表情,臉部建模,語音識別,手勢判斷等,其他的估計不會那么快提供出來)

 

4.Kinect的使用程序流程:

開始程序-獲取kinect攝像機-打開讀取器-打開Kinect-獲取讀取器的相關幀數據-使用幀數據-關閉幀-關閉讀取器-關閉Kinect-關閉程序

這就是Kinect的一個完整的工作流程,無論是彩色,深度,骨骼的數據獲取都需要這個流程的,而我們主要操作是在使用幀數據的這個階段。其他基本是不變的。

 

4.1 kinect的開啟很簡單:在程序開始時,也就是unity的Start函數里寫下

_Sensor = KinectSensor.GetDefault();
if (_Sensor != null)
{
_Reader = _Sensor.ColorFrameSource.OpenReader();

if (!_Sensor.IsOpen)
{
_Sensor.Open();
}

}

這樣就能成功開啟Kinect傳感器和讀取器了。

4.2 程序的關閉

要注意的是沒獲取完數據不要隨意進行Kinect的關閉操作,不然數據會不准確,一般kinect的關閉是在你准備要關閉程序的時候進行的,在unity上的mono類里有專門的OnApplicationQuit(),在這里進行關閉kinect的操作。

代碼如下:

void OnApplicationQuit()
{
if (_Reader != null)
{
_Reader.Dispose();
_Reader = null;
}

if (_Sensor != null)
{
if (_Sensor.IsOpen)
{
_Sensor.Close();
}

_Sensor = null;
}
}

中間的數據獲取和數據的使用會占很大的篇幅,會在后續的博客里一個個分析


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM