kinect v2 面部模型

2021-06-25 22:20:00 字數 1640 閱讀 1644

原文 請戳這裡

使用sdk:kinect for windows sdk v2.0 public preview1409

同前面,因為sdk未完成,不附上函式/方法/介面的超連結。

是的,微軟在9月16日更新了sdk。沒看具體更新內容,但是感覺上解決了一些bug,比如x86的fusion。

這次說說高畫質面部幀的面部模型。

kinect 2可以根據面部進行實時面部建模,感覺高大上,但是目前不能捕捉舌頭,是個遺憾。

畢竟顏藝中舌頭的地位可不低啊。

說到模型自然當然就是頂點集合啦,目前面部模型的定點數是1347,利用getfacemodelvertexcount獲取,

請注意這是函式,而不是巨集定義,也就是說強烈建議使用動態分配,而不是靜態分配。

嗯,1347,1+3+4+7=15,也就說是三角面咯。但是這節不涉及,畢竟這節是2d的,將頂點顯示出來就好了。

怎麼獲取面部模型呢?首先,面部模型對應的介面是ifacemodel,使用ifacemodel::calculateverticesforalignment

同前面,每(高畫質面部)幀需要更新面部對齊ihighdefinitionfaceframe::getandrefreshfacealignmentresult.

那麼怎麼獲取ifacemodel,一種方法是利用ihighdefinitionfaceframe::get_facemodel等(幀源也能),但是這樣,

相當於每幀都會建立乙個面部模型,即使我們釋放掉,記憶體也沒有**。有點像記憶體洩漏,不過只是內部引用計數未歸零。

這樣會嚴重導致效能。所以使用函式createfacemodel即可,看引數名就知道了,很簡單。

所以我們的大致步驟:

建立資源與事件

在高畫質面部臨幀事件裡面更新 面部對齊, 計算面部模型,將面部模型頂點對映為彩色空間

在刻畫是順便畫這些點即可。

當然,還要保證跟蹤id有效,事件模式在多個事件就有點麻煩了,沒有輪詢模式簡單。

為了效率,這裡選擇

所以我們需要申請兩塊定點快取,乙個3d的乙個2d的。

自然,動態記憶體分配需要時間,加上假設第一次分配成功但是第二次分配失敗還要回滾。這裡一次申請即可。

[cpp]view plain

copy

// 建立頂點快取

if(succeeded(hr))  

// 修改資料

if(succeeded(hr))  

也算是小技巧吧,不過因為使用了const,所以還有點麻煩。

差不多就是這樣:

這次是2d,下次是3d,不知道是用d3d,還是抱unity的大腿....

Kinect v2 資料來源與獲取

在kinect for windows sdk2.0中,kinect有多種型別的資料來源。source,reader和frame。要讀取骨架,就有ibodyframesource,ibodyframereader,ibodyframe這三個類,要讀取深度資料,就有idepthframesource,...

Kinect V2開發(5)讀關節資料

要讀取骨骼資料,前面的步驟和之前一樣,要先通過ikinectsensor來取得ibodyframesource,然後開啟ibodyframereader,之後再在主迴圈裡取得ibodyframe裡面的資料,但是在ibodyframe裡面實際上包括了所有人的資料,需要通過getandrefreshbo...

分水嶺演算法 Kinect V2開發學習 3

include include include include include using namespace std using namespace cv include watershedsegmentation.h void delay int a int main int argc,char...