Kinect 人機互動開發實踐

2022-08-10 01:18:18 字數 4055 閱讀 4262

kinect for windows sdk

骨骼追蹤 —— 對在kinect視野範圍內移動的乙個或兩個人進行骨骼追蹤,可追蹤到人體的20個節點

深度攝像頭 —— 通過深度感測器獲取到視野內的環境三維位置資訊 (深度影象 —— 每個畫素為距離kinect感測器的距離) —— 利用kinect紅外發射器發出的紅外線對空間進行編碼,無論環境光線如何都不會影響測量結果

音訊處理 —— 與 microsoft speech 語音識別api整合

kinect 彩色和紅外影象資料的處理

彩色影象質量 —— 普通質量和高質量 —— 決定資料從kinect 傳輸到pc的速度

普通質量 —— 在傳遞給應用控制台之前會在感測器端進行壓縮,接著在控制台解壓資料 —— 影象壓縮使得返回的彩色資料的幀頻達30,但是會降低影象質量

高質量 —— 直接傳遞給控制台,不壓縮,最大幀率不會超過15

彩色資料可以選擇兩種色彩格式 —— rgb yuv

彩色影象型別用列舉型別 colorimageformat 表示

紅外資料流

原理:kinect 首先通過左側的紅外線發射器向環境中發射紅外線,這束紅外線由於具有高度隨機性,其在空間中任意兩個不同位置所反射形成的光斑都不相同,對環境形成立體的「光編碼」,再通過右側的紅外線接收器採集kinect視野中的紅外線影象,最終,利用這幅紅外影象和kinect的原始引數進行一系列複雜的計算,得到視野中的三維深度資訊

kinectsensor 類提供了一些介面,用於管理kinect裝置的開關以及所有資料的獲取

紅外影象實際上是彩色影象的一種特殊格式 —— kinectsensor.colorstream.enable(colorimageformat.infraredresolution640x480fps30)

顯示影象語句 this.colorimage.source = bitmapsource.create(imageframe.width, imageframe.height ,96,96, pixelformats.gray16 ,null , pixeldata, imageframe.width * imageframe.bytesperpixel);

深度資料的處理

kinect 通過處理深度資料來識別感測器組前的兩個人體影象,建立分段圖 —— 一張位圖,其畫素與視野內距離攝像頭最近的玩家索引對應(玩家索引為0,表示相應位置沒有找到玩家,索引值為1,2表示檢測到的玩家編號)

儘管玩家分段資料是隔離的邏輯流,但實際深度資料和玩家分段資料被合併到了乙個獨立的結構中

每個畫素的高13位表示在深度感測器的視野範圍內離特定座標物體最近的距離,理論上該值的範圍為0~8192公釐

每個畫素的低3位標識在畫素的xyz座標系上追蹤到的可見的玩家索引,這3位可看成整形值

深度影象資料型別定義為 depthimageframe   copypixeldatato () 將從kinect裝置獲取到的深度影象資料賦值到short陣列,該陣列包含了每個畫素的深度資訊和玩家索引資訊(16位)

骨骼追蹤資料的處理方法

kinect 的核心技術,科準確標定人體的20個關鍵點,並能對這20個點的位置進行實時追蹤

資料物件型別以骨骼幀的形式提供,每一幀最多可以儲存20個點 ,每個骨骼點都是用joint型別表示的

jointtype :骨骼點的型別,列舉型別,列舉了20個骨骼點的特定名稱 —— jointtype.hand_left

position  : skeletonpoint 型別表示骨骼點的位置資訊 , skeletonpoint 是乙個結構體,包含x,y,z 三個資料元素,用以儲存骨骼點的三維座標

trackingstate : 列舉型別,表示骨骼點的追蹤狀態 (tracked 表示正確捕捉到該骨骼點,nottracked 表示沒有捕捉到骨骼點,inferred 狀態不確定)

半身模式

seated mode —— 半身模式下,系統只捕捉上半身10個骨骼點的資訊,忽略下半身(即使下半身骨骼點的資料不穩定或是不存在也不會對上半身的骨骼資料造成影響)

半身模式定義在列舉型別 skeletontrackingmode中 (default  seated)

應用程式獲取下一幀骨骼資料的方式同獲取彩色影象和深度影象資料的方式相同,都是通過呼叫回掉函式並傳遞乙個快取實現的 —— openskeletonframe

如果新的骨骼資料已經準備好,系統會將其複製到快取中

輪詢模式讀取骨骼事件 ,通過呼叫skeletonstream 類的opennextframe 函式即可實現

public skeletonframe  opennextframe (int millisecondswait)

當新的資料準備好或是超出等待時間時,opennextframe() 函式才會返回

時間模式以事件驅動方式獲取事件,更靈活,準確

應用程式傳遞乙個事件處理函式給 skeletonframeready事件,該事件定義在kinectsensor 類中,當下一幀的骨骼資料準備好時,會立即呼叫該事件回掉函式

rgb影象資料與深度影象資料(骨骼資料)的空間座標系不同 —— 前者rgb攝像頭,後者紅外攝像頭 ,因此使用獲取的骨骼點座標直接繪製在rgb影象上會有相應的誤差

骨骼點的旋轉資訊(相對旋轉資訊和絕對旋轉資訊)—— 旋轉的矩陣引數和四元數引數

骨骼點旋轉資訊定義為 boneorientation 類:

startjoint  起始骨骼點

endjoint  結束骨骼點

hierarchicalrotation  相對旋轉資訊

absoluterotation  絕對旋轉資訊

bonerotation  hierarchical = orientation.hierarchicalrotation;

bonerotation  absolute=orientation.absoluterotation;     bonerotation 型別的記錄了旋轉資訊的矩陣和四元數

音訊api 的使用 —— 四元麥克風陣列

語音識別的任務就是使用電腦程式將語音轉換成一串詞語

kinect for windows sdk 為託管的應用程式結合 microsoft speech api 使用kinect麥克組提供了必備的基礎架構,支援最新的語音演算法

angleconference 屬性表示音訊源位置估計的置信度

監視束波方向的變化 ,當 kinectaudiosource的beamangle 屬性發生變化時會出發beamchanged事件

speechrecognitionengine 類提供了一系列獲取和管理語音識別引擎的方法(載入語法器,開始執行語音識別,結束語音識別)

installedrecognizers 是靜態方法,返回乙個語音識別器的列表 —— 包括了當前系統上安裝的所有語音識別器

speech 引擎會觸發以下3個事件:

speechrecognitionengine.loadgrammer 事件會在每次嘗試命令時發生,它會傳遞給事件處理函式乙個speechrecognizedeventargs物件,該物件包含乙個從命令集合中選出的最佳匹配單詞和乙個估計的置信值

speechrecognitionengine.speechrecognized 事件會在嘗試的命令被識別為命令集合中的成員時發生,該事件會傳遞給事件處理函式乙個包含識別出的命令的 speechrecognizedeventargs 物件

speechrecognitionengine.speechrejected 事件會在嘗試的命令未被識別為命令集合成員時發生。它會傳遞給事件處理函式乙個speechrecognitionrejectedeventargs 物件

提高識別精確度:

增加識別字串的單詞數量

設計乙個手勢,只有kinect 捕捉到這一特定的手勢時才開啟語音識別,否則保持關閉

face tracking sdk

可以識別出的人臉資料:

特徵點座標 (根據kinect提供的深度圖和彩色圖,對人臉100個特徵點進行識別和追蹤)

面部朝向

包圍盒基於 candide3 人臉模型的引數

人機互動模擬題

1.人機互動學是乙個重要的學科分支,如果要有效地設計人機互動的產品和服務,遵循十項準則是什麼 1確實理解計算機和裝置的任務流程,避免引入不必要的流程 2確定目標使用者的屬性和能力,充分考慮人與人之間的區別 3充分利用人和工具各自在完成任務時的擅長之處,達到完美平衡 4為所有可能從中受益的使用者群體進...

人機互動筆記2

樣式優先順序 id高於class 標籤內樣式高於標籤外樣式 class有兩個屬性的話,後邊的覆蓋前邊的樣式 charset utf 8 css練習title rel stylesheet type text css href css mycss.css type text css pdiv p1.p...

微軟推Kinect介面卡,探索人機互動的下乙個可能

近日,微軟推出 kinect介面卡。乙個usb介面便可簡單粗暴地將 xbox one kinect接入 windows 8 和 8.1 機器中。小夥伴們先不用太激動,因為這並不意味著馬上可以在windows上玩xbox遊戲。不過同時推出的kinect sdk 2.0版本,意味著微軟也著手開發人員對w...