文/陳曦 黃昌正 周言明 吳宇浩
視覺動(dòng)捕是通過攝像頭拍攝,從圖像中識別、計(jì)算出人體各部位姿態(tài),從而達(dá)到捕捉用戶動(dòng)作目的的技術(shù)。相較于傳統(tǒng)光學(xué)動(dòng)捕和慣性動(dòng)捕,視覺動(dòng)捕沒有過多場地限制,用戶無需佩戴輔助設(shè)備,只需一臺或若干臺普通攝像頭就能完成,具有成本低、便捷、高效的特點(diǎn)。視覺動(dòng)捕可分為三個(gè)步驟:圖像處理、關(guān)鍵點(diǎn)識別、姿態(tài)計(jì)算。
圖像處理包括圖像拍攝、大小縮放、格式轉(zhuǎn)換等基本 處理流程,為下一步處理提供符合要求的數(shù)據(jù)源。關(guān)鍵點(diǎn)識別是從圖像中識別出人物各個(gè)關(guān)節(jié)的關(guān)鍵點(diǎn),計(jì)算關(guān)鍵點(diǎn)的坐標(biāo),重構(gòu)出人物骨架。目前已經(jīng)有不少開源的人體關(guān)鍵點(diǎn)識別模型,如谷歌的MediaPipe項(xiàng)目和卡內(nèi)基梅隆大學(xué)的OpenPose項(xiàng)目。本文選擇MediaPipe人體關(guān)鍵點(diǎn)識別模型計(jì)算所得的骨架作為本文介紹的算法的輸入數(shù)據(jù)。
姿態(tài)計(jì)算是本文主要研究的內(nèi)容,是指根據(jù)人體骨架模型,通過肢體間的關(guān)系、關(guān)節(jié)限制等條件,計(jì)算出人體各部位的實(shí)際姿態(tài),為人體骨架模型賦予運(yùn)動(dòng)“靈魂”。本文先闡述關(guān)鍵點(diǎn)識別算法所得到的骨架模型,然后詳細(xì)研究根據(jù)關(guān)鍵點(diǎn)數(shù)量不同而不同的兩種姿態(tài)計(jì)算方法,針對軸向信息缺失的肢體介紹一種姿態(tài)優(yōu)化方法,最后通過對比圖像和三維模型的動(dòng)作展示算法效果。
MediaPipe關(guān)鍵點(diǎn)識別算法是基于RGB圖像的實(shí)時(shí)算法,計(jì)算結(jié)果包括全身、雙手和臉部網(wǎng)格三個(gè)模型,每個(gè)模型都包含圖中識別出來的關(guān)鍵點(diǎn)的三維坐標(biāo)。本文將根據(jù)對不同部位的姿態(tài)計(jì)算,獲取對應(yīng)關(guān)鍵點(diǎn)的坐標(biāo)作為輸入數(shù)據(jù)。
本文使用四元數(shù)描述姿態(tài),并規(guī)定當(dāng)人物呈T字站姿時(shí),所有部位的姿態(tài)四元數(shù)都是(1,0,0,0),下文稱該動(dòng)作和姿態(tài)值為初始姿態(tài)。人體各部位的姿態(tài)值,指從初始姿態(tài)旋轉(zhuǎn)到當(dāng)前姿態(tài)的旋轉(zhuǎn)四元數(shù)值。
根據(jù)各部位所包含的關(guān)鍵點(diǎn)個(gè)數(shù)不同,本文將介紹兩種姿態(tài)計(jì)算方法:無參考點(diǎn)姿態(tài)計(jì)算和有參考點(diǎn)姿態(tài)計(jì)算。根據(jù)立體幾何學(xué)可知,已知三個(gè)不共線點(diǎn)的空間坐標(biāo)可計(jì)算出點(diǎn)所在面的朝向。因此,僅包含兩個(gè)關(guān)鍵點(diǎn)的肢體部位,只能使用無參考點(diǎn)方法計(jì)算姿態(tài)估計(jì)值,保證肢體朝向正確;而包含三個(gè)或以上關(guān)鍵點(diǎn)的肢體部位,可以使用有參考點(diǎn)方法計(jì)算出姿態(tài)準(zhǔn)確值。
1.2.1 無參考點(diǎn)姿態(tài)計(jì)算方法
若肢體僅包含骨架模型中兩個(gè)關(guān)鍵點(diǎn),我們只能使用無參考點(diǎn)姿態(tài)計(jì)算方法計(jì)算其姿態(tài)四元數(shù)。
以小臂為例,小臂僅包含手肘和手腕兩個(gè)關(guān)鍵點(diǎn)。假設(shè)當(dāng)前姿態(tài)下,關(guān)節(jié)1(手肘)坐標(biāo)為p1,關(guān)節(jié)2(手腕)坐標(biāo)為p2;在初始姿態(tài)下,關(guān)節(jié)1(手肘)坐標(biāo)為p’1,關(guān)節(jié)2(手腕)坐標(biāo)為p’2,則可以求出當(dāng)前姿態(tài)和初始姿態(tài)下肢體的朝向向量v和v’:
設(shè)肢體從初始姿態(tài)繞旋轉(zhuǎn)軸va旋轉(zhuǎn)了角度θ到達(dá)當(dāng)前姿態(tài),則其姿態(tài)q計(jì)算公式為:
該方法計(jì)算得到的肢體姿態(tài)能保證肢體朝向與圖像中一致,但由于缺失了骨骼方向?yàn)檩S的旋轉(zhuǎn)信息,計(jì)算結(jié)果與實(shí)際姿態(tài)可能會不一致,則需要依靠后文介紹的姿態(tài)優(yōu)化方法解決。
1.2.2 有參考點(diǎn)姿態(tài)計(jì)算方法
若肢體包含骨架模型中至少三個(gè)關(guān)鍵點(diǎn),我們可以使用有參考點(diǎn)姿態(tài)計(jì)算方法,準(zhǔn)確計(jì)算該肢體的姿態(tài)四元數(shù)。
以手掌為例,手掌包含手腕、五指的指根共六個(gè)關(guān)鍵點(diǎn)。假設(shè)當(dāng)前姿態(tài)下,關(guān)節(jié)1(手腕)坐標(biāo)為p1,關(guān)節(jié)2(中指根)坐標(biāo)為p2,關(guān)節(jié)3(小指根)為p3;在初始姿態(tài)下,關(guān)節(jié)1(手腕)坐標(biāo)為p’1,關(guān)節(jié)2(中指根)坐標(biāo)為p’2,關(guān)節(jié)3(小指根)為p’3,則可以求出當(dāng)前姿態(tài)下肢體的兩個(gè)向量v1和v2,以及初始姿態(tài)下肢體對應(yīng)的兩個(gè)向量u1和u2:
由于肢體從初始姿態(tài)旋轉(zhuǎn)至當(dāng)前姿態(tài)的旋轉(zhuǎn)軸,必定位于前后兩個(gè)向量的對稱面上,通過聯(lián)立兩個(gè)對稱面就能得到該旋轉(zhuǎn)的旋轉(zhuǎn)軸va。兩個(gè)面的方程為:
其中系數(shù)值為:
求解得:
其中t為參數(shù),由于旋轉(zhuǎn)軸只需知道方向就行,我們可以設(shè)t=1并對其進(jìn)行單位化處理得到最終的va。
計(jì)算旋轉(zhuǎn)角度,需先計(jì)算兩個(gè)向量到旋轉(zhuǎn)軸的垂線向量v⊥和u⊥,兩條垂線的夾角θ即為旋轉(zhuǎn)角:
設(shè)單位化后旋轉(zhuǎn)軸va=(x,y,z),則肢體的姿態(tài)q計(jì)算公式為:
通過上述兩種姿態(tài)計(jì)算方法,計(jì)算得到各肢體的基礎(chǔ)姿態(tài)值,可以基本復(fù)現(xiàn)人物動(dòng)作。但是由于無參考點(diǎn)算法的限制,該姿態(tài)與實(shí)際人物姿態(tài)仍有差距,我們需要對姿態(tài)值進(jìn)行進(jìn)一步的優(yōu)化。
針對無參考點(diǎn)姿態(tài)計(jì)算方法得到的姿態(tài)估計(jì)值,本文提出一種針對人體關(guān)節(jié)自由度限制的姿態(tài)軸向限制算法。本算法可以限制肢體間的相對姿態(tài),達(dá)到還原關(guān)節(jié)自由度的效果。該算法包含限制一個(gè)軸向和兩個(gè)軸向的兩種應(yīng)用方法。
1.3.1 限制一軸的姿態(tài)優(yōu)化算法
同樣以小臂為例,小臂的姿態(tài)與手掌的姿態(tài)有很高的相關(guān)性,一般轉(zhuǎn)動(dòng)手腕時(shí),手掌和小臂是同時(shí)旋轉(zhuǎn)的,因此,在該軸上小臂應(yīng)與手掌保持同步旋轉(zhuǎn)。
假設(shè)肢體(小臂)調(diào)整前姿態(tài)四元數(shù)為q’,相鄰肢體(手掌)姿態(tài)四元數(shù)為q0,骨骼方向?yàn)閤軸,即肢體(小臂)需要通過繞x軸旋轉(zhuǎn)來調(diào)整姿態(tài)。則調(diào)整前,兩個(gè)肢體的相對姿態(tài)q’r為:
提取出旋轉(zhuǎn)四元數(shù)中繞x軸的旋轉(zhuǎn)分量qr:
對肢體(小臂)進(jìn)行該分量旋轉(zhuǎn),得到調(diào)整后的姿態(tài)四元數(shù)q:
1.3.2 限制兩軸的姿態(tài)優(yōu)化算法
以手指為例,手指前端只能完成握拳或伸展方向的活動(dòng),即指關(guān)節(jié)只有一個(gè)自由度,因此,手指前端與手指根部的相對姿態(tài)只能是繞一條固定軸旋轉(zhuǎn)的四元數(shù)值。
假設(shè)限制前肢體(手指尖關(guān)節(jié))姿態(tài)為q’,相鄰肢體(手指根關(guān)節(jié))姿態(tài)為q0,相對于相鄰肢體(手指根關(guān)節(jié)),該肢體(手指尖關(guān)節(jié))只能繞z軸旋轉(zhuǎn)。則調(diào)整前,兩個(gè)關(guān)節(jié)的相對姿態(tài)q’r為:
提取出旋轉(zhuǎn)四元數(shù)中繞z軸的旋轉(zhuǎn)分量qr:
計(jì)算出限制后的肢體(手指尖關(guān)節(jié))姿態(tài)q:
根據(jù)人體的肢體部位不同,選擇上述兩種姿態(tài)優(yōu)化算法中的合適算法,人體骨架所有肢體部位都能計(jì)算出較為準(zhǔn)確的姿態(tài)值,實(shí)現(xiàn)高還原的動(dòng)作捕捉效果。
將本文算法得到的姿態(tài)數(shù)據(jù)傳輸?shù)饺S人體模型上進(jìn)行展示,效果見圖1。從圖中可以看出,三維模型對圖像中動(dòng)作的復(fù)現(xiàn)效果很好。經(jīng)統(tǒng)計(jì),本文算法對一幀圖像數(shù)據(jù)的完全處理時(shí)間為10毫秒~14毫秒之間,充分滿足實(shí)時(shí)性的需求。
圖1 姿態(tài)數(shù)據(jù)下三維人體模型展示效果
本文介紹了一種基于骨架的視覺動(dòng)捕姿態(tài)優(yōu)化計(jì)算方法,該方法可將人體關(guān)鍵點(diǎn)坐標(biāo)數(shù)據(jù)轉(zhuǎn)化為肢體姿態(tài)四元數(shù)。本文通過舉例小臂和手掌,詳細(xì)描述了針對包含不同關(guān)鍵點(diǎn)數(shù)量的肢體,兩種不同的姿態(tài)計(jì)算方法。同時(shí),為解決骨架轉(zhuǎn)姿態(tài)時(shí)軸向旋轉(zhuǎn)信息缺失的問題,介紹了一種姿態(tài)優(yōu)化方法,保證了動(dòng)作的準(zhǔn)確度;最后通過展示圖像和三維模型的動(dòng)作對比,體現(xiàn)算法的效果。
雖然本文介紹的姿態(tài)計(jì)算方法可以得到動(dòng)作捕捉所需的所有姿態(tài)數(shù)據(jù),但由于該方法是基于骨架數(shù)據(jù)的算法,十分依賴關(guān)鍵點(diǎn)坐標(biāo)的準(zhǔn)確度?;趩螖z像頭的關(guān)鍵點(diǎn)識別算法只能通過估計(jì)得到點(diǎn)的深度信息,拍攝的透視現(xiàn)象也會造成關(guān)鍵點(diǎn)位置的偏移,這些因素都會影響姿態(tài)計(jì)算結(jié)果的準(zhǔn)確度,如何消除這些影響將會是姿態(tài)計(jì)算后續(xù)的主要工作。