吳劍鋒 馬夢鑫 蔣濛婷 羅 凱
(浙江工業(yè)大學 浙江 杭州 310023)
Kinect的發(fā)布到現(xiàn)在,有很多跨領(lǐng)域的研究人員參與其中,用它來解決如醫(yī)療健康、教育、軍用、康復訓練及日常生活等各個領(lǐng)域的關(guān)鍵性問題。
也有不少研究人員質(zhì)疑Kinect的精度問題,認為Kinect無法滿足眾多科學研究領(lǐng)域。為此,吳緯瑩[1]等對Kinect開展精度測試實驗,實驗采用Kinect與高精度運動捕捉設(shè)備NDI Optotrak同時進行人體運動捕捉,實驗結(jié)果表明Kinect的識別精度誤差和穩(wěn)定性都在cm級。谷軍霞[2]等對行為進行了進一步的分析,對于行為描述問題和行為識別問題進行分析,綜述了行為分析的各種算法。算法方面,孟明[3]等通過改進Vi Be算法解決Kinect識別的鬼影問題,能比較準確地檢測出人體的運動。李詩銳[4]等在Kinect v2的基礎(chǔ)上設(shè)計了一套有效的去噪算法,提高重建系統(tǒng)的質(zhì)量,實現(xiàn)了新一代Kinect重建系統(tǒng)。
利用Kinect的人體運動數(shù)據(jù)捕捉來輔助椅子的設(shè)計,羅凱[5]做了相關(guān)的研究。鄭澤銘[6]利用Kinect的深度攝像機,設(shè)計并實現(xiàn)了基于人類認知模型的健康坐姿勸導系統(tǒng)和應(yīng)用,并驗證其可行性。顧軍華[7]等利用Kinect攝像頭的骨骼關(guān)節(jié)點識別功能對人體進行建模,并利用神經(jīng)網(wǎng)絡(luò)實現(xiàn)動作識別,提高識別率并降低了訓練網(wǎng)絡(luò)的迭代次數(shù)。戰(zhàn)蔭偉[8]等進行了進一步的研究,通過兩點法計算角度的大小并定義人體姿勢庫,并與姿勢庫進行角度匹配實現(xiàn)姿勢識別。文獻[9]設(shè)計了安置了四個壓力傳感器的智能椅,驗證并總結(jié)了不同反饋方式的效果。隨著智能硬件和傳感器的集成發(fā)展,現(xiàn)在市場上也有不少相關(guān)產(chǎn)品,如Misfit Shine、MYO等。
而針對坐姿矯正,前人做的都是通過各類傳感器和智能系統(tǒng)來對坐姿做出判斷后,給予用戶的是一種提醒方式,并沒有實現(xiàn)實時的糾正。王穎[10]等設(shè)計了基于坐姿監(jiān)督的智能視力保護儀。而本文利用Kinect對坐姿行為進行判斷后,直接通過UART與內(nèi)嵌單片機系統(tǒng)的智能椅進行數(shù)據(jù)通信,從而實現(xiàn)實時的椅子角度調(diào)整,貼合用戶肢體,做到有效支撐,即可防止用戶長時間的不正確坐姿產(chǎn)生。
坐姿意圖即通過觀察被試者的坐姿,判斷被試者的意圖,即工作狀態(tài)。對抽取的20名工作人員和學生進行坐姿觀察,觀測實驗中在觀測者的側(cè)面關(guān)節(jié)節(jié)點貼上標簽,位置選擇分別為:頭部的耳屏處、頸部中心點、腰部的腰椎處、臀部的骶椎和腿部的膝關(guān)節(jié)處。實驗中采用傳統(tǒng)攝像技術(shù)對每位觀測者進行20 min的無阻礙拍攝,對觀測實驗結(jié)果影像進行分析發(fā)現(xiàn),不管是工作人員還是學生,在整個觀測過程中都有固定的幾個坐姿行為。如圖1所示,學生的坐姿可分為作業(yè)坐姿(a)和聽課坐姿(b)兩類,而工作人員的坐姿可分為休息坐姿(a)和工作坐姿(b)兩類,這與陸劍雄[11]研究相符。
(a) 作業(yè)坐姿
(b) 聽課坐姿
(c) 休息坐姿
(d) 工作坐姿圖1 用戶坐姿行為分類
觀測實驗結(jié)果表明,用戶在座椅上的一系列坐姿行為轉(zhuǎn)換過程中,頸部和腰部以及背部的角度會發(fā)生明顯的變化,通過Kinect對用戶坐姿進行骨骼運動捕捉,并通過processing編程獲取被測試者頸部和背部角度,然后將測量數(shù)據(jù)與觀察實驗結(jié)果進行比對分析,即可得出頸部和背部的角度值變量是區(qū)分用戶不同的坐姿意圖的主要因素。
從圖2中可以看到在利用Kinect對觀測者進行觀測采用的是側(cè)面觀測法,因為側(cè)面觀測法比較有利與骨骼角度測量算法的優(yōu)化,Kinect的骨骼數(shù)據(jù)是3D的,有X、Y、Z三軸坐標,利用向量來進行角度測量時會多個Z軸的誤差數(shù)據(jù)。而運用側(cè)面觀測法,即可以認定Z值為恒定值,只需計算二維向量角度值。
(a)
(b)圖2 Kinect骨骼運動捕捉圖
但是,由于Kinect原始算法中主要針對的是正面檢測,因此,采用側(cè)面觀測法又會存在一個遮擋問題,左右手和腳的相互遮擋以及手與身體部位的遮擋,遮擋會導致骨骼數(shù)據(jù)不準確,使測量結(jié)果的誤差偏大。本文采用信心級別檢驗方法,即在利用Kinect進行骨骼數(shù)據(jù)鏈接顯示時考慮每個關(guān)節(jié)的信心得分:信心得分滿分為1分,表示完全無遮擋;當信心得分大于0.5時,表示部分遮擋,不影響準確性;當信心得分小于0.5時,OpenNI會采用猜測的方法來畫關(guān)節(jié)點的位置,這樣就會出現(xiàn)肢體錯位現(xiàn)象。而本文在根據(jù)信心得分劃分閾值,不執(zhí)行低于閾值的骨骼關(guān)節(jié)點的連接過程,避免錯位問題,其信心檢驗算法流程如圖3所示,通過信心級別檢驗,當出現(xiàn)骨骼遮擋時,繪制出的關(guān)節(jié)點如圖4所示。
圖3 信心檢驗算法流程圖
圖4 信心檢驗骨架圖
進行人體骨骼運動數(shù)據(jù)捕捉過程,為了能比較準確地獲得人體骨骼數(shù)據(jù),一般都會采用攝像頭標定。而Kinect采用的是免標定追蹤技術(shù),運用的是質(zhì)心檢測方法,OpenNI會將每個檢測用戶作為質(zhì)心,不需要去確定是否已在Kinect的被檢測范圍內(nèi)。
質(zhì)心是位于檢測用戶軀干的中央,只要用戶在檢測范圍內(nèi),OpenNI就會自動提供用戶的質(zhì)心,不再需要去訪問用戶像素來計算質(zhì)心,如圖5所示。
圖5 用戶質(zhì)心檢測圖
本文利用Kinect進行人體骨骼運動數(shù)據(jù)測量采用的是側(cè)面觀測法,在二維平面空間內(nèi),把人體側(cè)面頭部、頸部、肩部、脊椎中部、尾椎5個骨骼關(guān)節(jié)點兩兩連線,從而形成頸部和背部的兩個測量角,這同時也是本文進行用戶坐姿意圖判定的兩個主要變量因素,如圖6所示。α是頭部與頸部兩點形成與水平坐標軸形成的夾角,而β是脊椎即肩部中央,脊椎中部和尾椎連線與水平坐標軸形成的夾角,本次測試通過α和β一起來判定用戶坐姿行為。
圖6 頸部和腰部骨架角度圖
根據(jù)二維空間的骨骼關(guān)節(jié)點HEAD的JointType(x1,y1) 、NECK的JointType(x2,y2),SPINE的JointType(x3,y3),根據(jù)如下求角轉(zhuǎn)換公式進行α角度的計算。
(1)
本文采用的是Processing的SimpleOpenNI庫中,除了SimpleOpenNI庫里的各種方法,Processing本身也自帶有非常龐大的數(shù)學函數(shù)庫,其中就提供了求方位角的函數(shù)方法,即直接使用函數(shù)語句atan2(y,x),可以方便的求出α角的值,其主要代碼實現(xiàn)如下:
float X_Head=joints[KinectPV2.JointType_Head].getX();
float Y_Head=joints[KinectPV2.JointType_Head].getY();
float a=(Y_Neck-Y_Head)/(X_Head-X_Neck);
//求tanβ的值
float b=atan2(abs_Y_Head,abs_X_Head)*180/PI;
//獲取β角的值
β角是由Neck和SpineBase的連線與水平坐標軸相交而成。與α角測量計算相似,通過Kinect測得Neck與SpineBase骨骼點的坐標,計算公式如下:
(2)
在Processing中,其實現(xiàn)代碼與α角原理相同。
根據(jù)上述描述,Kinect能夠?qū)崿F(xiàn)質(zhì)心追蹤技術(shù)和骨骼點角度測量。對比實驗過程采用一臺Kinect紅外攝像頭和彩色攝像頭同時對一個用戶進行坐姿檢測,其中紅外攝像頭來檢測用戶骨骼點的角度,通過程序算法設(shè)定計算出目標角度;而彩色攝像頭則直接記錄用戶在工作過程中的整個坐姿行為,最終兩者進行對比,從而來驗證Kinect對坐姿意圖判斷的準確性。
整個對比實驗過程中,找來10個觀察用戶對象,通過上述的方法分別對其工作過程進行檢測觀察,在整個觀測過程中,隨機的抽取幾個時間段來進行判斷驗證。
通過實驗可獲取10組數(shù)據(jù),每組數(shù)據(jù)分別由頸部角度和背部角度組成,將獲取的數(shù)據(jù)進行分析,獲取頭部與背部的角度曲線。隨機抽取一名被試者,將Kinect檢測出來的頭部和背部角度跟彩色攝像頭的錄像進行對比,分別繪制出角度曲線如圖7所示。
圖7 頭部與背部角度變化曲線(被試者1)
從圖7的曲線可以直觀地看出頭部和背部角度隨時間變化的趨勢。并且通過觀察,Kinect檢測出來的角度與彩色攝像頭錄像的角度曲線走向基本一致,例如圖中圓圈處的拐點,此時背部角度保持不變,頭部角度變大,觀察彩色攝像頭錄像發(fā)現(xiàn),此時被試者處于休息狀態(tài);從曲線圖中隨機選取一個時間點(圖中虛線位置),對比彩色攝像頭錄像如圖8所示,被試者頭部角度約為α約為85°,背部角度β約為97°,即被試者處于休息狀態(tài),二者結(jié)果一致。
圖8 被試者1交叉對比
將10名被試者的Kinect檢測數(shù)據(jù)與彩色攝像頭圖像進行交叉對比,每隔5 min進行一次人工檢測,對比錄像與Kinect自動檢測角度,獲得如表1所示。
表1 Kinect與人工檢測角度對比
根據(jù)觀察實驗對象,當被試者背部角度大于90度時,被試者處于休息狀態(tài),當被試者背部角度小于90度時,即被試者處于工作狀態(tài)。對表1分析得知,Kinect能夠準確地判斷出被試者的坐姿,準確率達到97%;測量精度方面,其標準誤差為3°,在可接受的范圍內(nèi)。
用戶在使用現(xiàn)有的座椅進行一系列的坐姿行為過程中,由于座椅不能進行相應(yīng)的自動調(diào)節(jié),從而無法有效地貼合用戶身體的相關(guān)部位,如頭部、背部和臀部,在長時間的工作和學習過程中,用戶身體在沒有合理的有效支撐勢必會發(fā)生肢體的不正確彎曲,長此以往就會導致脊柱變形、腰酸背痛、頸椎病和腰椎病等一系列慢性疾病。
根據(jù)上述實驗已經(jīng)驗證,應(yīng)用Kinect的角度測量算法是可以精確地判斷出用戶的坐姿意圖,利用這個方法,可以應(yīng)用在如工業(yè)設(shè)計、醫(yī)療康復、教育等各個領(lǐng)域。本文以陳凱歌設(shè)計的兒童坐姿矯正椅[12]為例,應(yīng)用Kinect來做產(chǎn)品開發(fā)過程中的驗證判斷。
上述實驗已經(jīng)得出頸部和背部的角度值為判定用戶坐姿行為的兩個主要變量,這也是設(shè)計矯正椅的重要決定因素。陳凱歌設(shè)計的坐姿矯正椅主要功能是為適應(yīng)用戶的各種坐姿行為來自動做出相應(yīng)的調(diào)整,與用戶當前坐姿合理接觸,做到有效支撐,從而防止用戶肢體的不正常彎曲。
吳新林[13]的研究表明,用戶在前傾狀態(tài)下,最佳坐姿為座面前傾10°且軀干與大腿夾角100°,后傾狀態(tài)下,最佳坐姿為座面后傾5°且軀干與大腿夾角115°。根據(jù)此研究結(jié)論,為了能貼合用戶的坐姿行為,矯正椅的椅背和椅面是可以自動調(diào)整的,分別通過兩個直流推桿電機來控制,而控制運動的兩個電機固定在一體的支架上,此坐姿矯正椅的各結(jié)構(gòu)部件如圖9所示。
圖9 坐姿矯正椅結(jié)構(gòu)部件示意圖
Kinect獲取并判斷用戶的坐姿行為,通過UART協(xié)議傳輸給單片機控制器,再由單片機來計算出矯正椅上點擊所需運行的時間以及運行的方向。坐姿矯正椅工作流程如圖10所示。
圖10 坐姿矯正椅工作流程圖
原型機測試實驗表明,Kinect能夠檢測出來的頭部與背部角度,判定出用戶的意圖,從而對座椅進行調(diào)節(jié),適應(yīng)用戶的坐姿。如圖11所示,當被試者處于姿勢(a)時,Kinect能夠準確檢測出被試者的坐姿意圖為作業(yè)姿勢,從而控制單片機將座椅的椅面與靠背進行相應(yīng)的調(diào)節(jié);當被試者處于姿勢(b)時,Kinect同樣能夠控制單片機進行相應(yīng)的調(diào)節(jié)。
(a) 作業(yè)姿勢 (b) 聽課姿勢圖11 原型機真人測試
根據(jù)相關(guān)文獻整理和實地的實驗調(diào)查,對不同用戶的坐姿行為進行了分析。通過Processing結(jié)合SimpleOpenNI編程技術(shù)實現(xiàn)對用戶坐姿行為的判斷,并通過UART通信和單片機控制原理來進行反饋調(diào)節(jié),從而實現(xiàn)對用戶坐姿變化的實時調(diào)整。本文結(jié)合坐姿矯正椅的原型機,采用真人測試。測試結(jié)果表明,針對不同坐姿狀態(tài),Kinect可以進行有效識別和反饋調(diào)節(jié)。