李長鑫,黃海于
(西南交通大學(xué) 計算機與人工智能學(xué)院,成都 610031)
隨著信息技術(shù)的不斷進(jìn)步,人機交互技術(shù)在計算機領(lǐng)域的作用顯得越發(fā)重要。目前,對于符合人類交流習(xí)慣的“自然”智能人機交互技術(shù)研究已經(jīng)引起學(xué)界高度關(guān)注,大量科研人員投身到人體姿態(tài)、手勢、肢體動作、人臉表情、語音等方式的人機交互研究中。人機交互技術(shù)正在逐步從以計算機為中心轉(zhuǎn)變?yōu)橐匀藶橹行摹?/p>
在游戲娛樂方面,使用鍵盤、鼠標(biāo)操作的游戲已然無法滿足用戶體驗的多樣化需求。因此,為了提高用戶體驗,VR游戲應(yīng)運而生。傳統(tǒng)的VR游戲通常需要笨重的輔助設(shè)備,在加大了游戲玩家負(fù)擔(dān)的同時,也增加了成本。為了解決上述問題,基于計算機視覺技術(shù)的體感游戲已日益受到人們的關(guān)注重視。該交互方式通常依賴于人體關(guān)鍵檢測算法,通過算法得到人體關(guān)鍵點坐標(biāo)信息,控制游戲內(nèi)玩家角色的運動,從而實現(xiàn)與游戲內(nèi)容的交互。
針對人體關(guān)鍵點檢測算法只能對單一RGB圖像進(jìn)行2D關(guān)鍵點檢測的問題,本文提出了一種將像素坐標(biāo)系下2D人體關(guān)鍵點坐標(biāo)升維至世界坐標(biāo)系下3D人體關(guān)鍵點坐標(biāo)的方法,實現(xiàn)了僅通過2個RGB攝像頭,便可實時獲取游戲玩家在世界坐標(biāo)系下的3D關(guān)鍵點信息,從而控制游戲中玩家角色的骨骼動畫,以此達(dá)到控制游戲中玩家角色位置移動、姿態(tài)變化、操作觸發(fā)等一系列交互操作的目的。
在基于人體關(guān)鍵點檢測的游戲交互應(yīng)用中,如何實現(xiàn)對人體關(guān)鍵點在現(xiàn)實空間中的三維定位、尤其是深度信息的獲取,即已成為研究的重點和難點。按照定位原理的不同,這類游戲的交互主要采用結(jié)構(gòu)光、TOF和雙目立體視覺等交互方式。
結(jié)構(gòu)光的交互方法是通過投影儀,將IR紅外光投射到被測物體表面,用攝像機拍攝被測物體采集結(jié)構(gòu)光圖像。若已知攝像機坐標(biāo)系與投影儀坐標(biāo)系之間的相對位置關(guān)系,則可求解出被測物體上的光條在攝像機坐標(biāo)系或者投影儀坐標(biāo)系中的具體坐標(biāo)。該方法的精度范圍為mm到cm之間,由于需要投影和攝像機等輔助設(shè)備,該類產(chǎn)品價格普遍都比較貴,通常在幾千到幾十萬不等,代表產(chǎn)品有Kinect1.0、RealSense。此外,應(yīng)用該類方法的產(chǎn)品還存在受光照影響較大、響應(yīng)較慢的缺點。
時間飛行法(Time of Flight,TOF)通過發(fā)射連續(xù)的光脈沖到被觀測物體上,并接收從物體反射回來的光脈沖。通過探測光脈沖的飛行時間,計算被測物體與相機間的距離。該方法的精度范圍為μm到cm之間,需要發(fā)射器和檢測器作為輔助設(shè)備,存在價格昂貴(高精度的設(shè)備價格可達(dá)上百萬)、受強光影響大的缺點。代表性產(chǎn)品有Kinect2.0。
雙目立體視覺是將2個完全相同的攝像頭平行放置,同步采集前方圖像。由于2個攝像頭位置不同,對同一目標(biāo)點所采集的圖像必然存在一定的像素差(視差),由視差可計算出目標(biāo)點到雙目攝像頭的距離,該類方法的精度通常在cm級??紤]到傳統(tǒng)的雙目立體視覺方法需要借助于立體匹配,即使得該類方法存在算法復(fù)雜度高、受光照影響大、精度不高的缺點。代表性產(chǎn)品有Leap Motion等。由于此類方法的效果并不理想,因此目前沒有典型的應(yīng)用場景,大多只用于學(xué)術(shù)研究。
本文方法是對傳統(tǒng)基于雙目立體視覺方法的改進(jìn)。本方法依托于2D人體關(guān)鍵點檢測算法,直接對2D人體關(guān)鍵點檢測結(jié)果升維,得到該關(guān)鍵點在世界坐標(biāo)系下的三維坐標(biāo)。與傳統(tǒng)的基于雙目立體視覺方法相比,該方法不需要立體匹配算法,只依賴于深度學(xué)習(xí)算法對人體關(guān)鍵點的檢測結(jié)果,受光照等環(huán)境影響小,故可以應(yīng)用于復(fù)雜場景。并且,也同樣都不需要建立視差圖,因此大大減小了算法的時間復(fù)雜度,在保證結(jié)果精度的同時,極大提升了算法的效率,更適用于游戲的實時應(yīng)用場景。此外,直接對2D關(guān)鍵點進(jìn)行升維,也在一定程度上避免了誤差的累積。
在計算機視覺領(lǐng)域主要有4種坐標(biāo)系,分別是:世界坐標(biāo)系(X,Y,Z)、相機坐標(biāo)系(X,Y,Z)、圖像坐標(biāo)系,( )、像素坐標(biāo)系(,)。
從世界坐標(biāo)系到像素坐標(biāo)系之間的轉(zhuǎn)換關(guān)系可表示為:
其中,為相機的內(nèi)參矩陣;為旋轉(zhuǎn)矩陣;為偏移向量(、又稱作相機的外參);Z表示尺度因子。
由此可見,如果知道相機的內(nèi)參矩陣、旋轉(zhuǎn)矩陣和偏移向量,就可以實現(xiàn)從像素坐標(biāo)系到世界坐標(biāo)系的轉(zhuǎn)化。相機的內(nèi)參矩陣和外參均可以通過相機標(biāo)定得到。
內(nèi)參矩陣是相機的固有屬性,可通過張正友標(biāo)定來獲得,通常情況下不會改變,因此只需要標(biāo)定一次。
外參表示的是相機在世界坐標(biāo)系中的位置和姿態(tài),需要將相機懸掛好后,再進(jìn)行標(biāo)定,而且只要移動一次相機,就必須重新對外參進(jìn)行標(biāo)定。
本文以地面作為標(biāo)定的基準(zhǔn)面進(jìn)行相機外參標(biāo)定,建立如圖1所示的世界坐標(biāo)系。因地面上所有點的坐標(biāo)均為0,則只需要知道相機相對于地面的關(guān)系,就可求出相機外參。由于確定一個平面至少需要3個點,因此只需要指定4個地面上的參考點,再通過相機的內(nèi)參矩陣代入式(1)即可求得旋轉(zhuǎn)矩陣和偏移向量。
圖1 指定的世界坐標(biāo)系Fig.1 Specified world coordinate system
為了實現(xiàn)通過像素坐標(biāo)系(,)反求該空間點所對應(yīng)的世界坐標(biāo)系(X,Y,Z),可將式(1)變形得到式(2):
通過分析式(2)可知,內(nèi)參矩陣、旋轉(zhuǎn)矩陣、偏移向量均已通過相機標(biāo)定得到,只有尺度因子Z未知。
為求得尺度因子Z,還需要借助世界坐標(biāo)系到相機坐標(biāo)系的轉(zhuǎn)換關(guān)系,其數(shù)學(xué)公式見如下:
在已知Z的情況下,可求出Z。而當(dāng)被測點在地面上時,即Z=0,通過式(3)即可求得尺度因子Z,再將尺度因子Z代入式(2)就可求得(X,Y,Z=0)。
綜上所述,在已知Z=0時,可以實現(xiàn)從像素坐標(biāo)(,)到世界坐標(biāo)(X,Y,Z)的轉(zhuǎn)換。
在實際應(yīng)用中,并不能保證被測點一定是在地面上,即被測點的Z≠0,Z的值通常未知,該情況需要采用雙鏡頭對該點同時檢測的方式求得,原理如圖2所示。
圖2 雙目定位原理Fig.2 Binocular positioning principle
設(shè)待定位的空間點為,攝像頭1、2的相機坐標(biāo)系原點分別為為、;通過攝像頭1、2的投影點分別為、。此時點、的世界坐標(biāo)的坐標(biāo)Z均為0,投影點的世界坐標(biāo)(X,Y,Z=0)與投影點的世界坐標(biāo)(X,Y,Z=0)均可通過式(2)求出,攝像頭的世界坐標(biāo)(X,Y,Z)和攝像頭的世界坐標(biāo)(X,Y,Z)可通過式(3)求得。通過與可確定空間直線,通過與可確定空間直線,與的交點即為的世界坐標(biāo)。
在圖2中,由于和是2條空間直線,當(dāng)兩直線平行或者不共面時,則方程無解,而在本文算法應(yīng)用場景中,不會出現(xiàn)兩直線平行的情況。由于2D關(guān)鍵點檢測算法精度的影響,兩攝像頭對空間中同一點的檢測總會存在偏差,因此造成兩直線不共面、而方程無解的情況。為了解決該問題,本文提出以下方法求解空間直線方程。
解空間直線方程示意如圖3所示,在已知、、、四個空間點的情況下,求與的交點,過點作平行四邊形,根據(jù)相似三角形法則,可知S/S=AO/AB。而三角形與三角形的面積可以通過空間向量的叉積公式求得,即可求出與的比例關(guān)系,最終求得交點的三維坐標(biāo)。
圖3 解空間直線方程示意圖Fig.3 Schematic diagram of solving the equation of a straight line in the space
在圖2中,已知攝像頭的世界坐標(biāo)(X,Y,Z)和的世界坐標(biāo)(X,Y,Z),投影點的世界坐標(biāo)(X,Y,Z=0)與的世界坐標(biāo)(X,Y,Z=0)。根據(jù)上述原理,空間點的世界坐標(biāo)(X,Y,Z)可通過式(4)求出:
其中:
該方法在有解情況下與常規(guī)方法結(jié)果相同,在兩直線不共面的情況下,也可以得到一個近似解,而且易于編程,滿足應(yīng)用需求。但是,解的精確度與兩攝像頭的擺放位置相關(guān),當(dāng)兩攝像頭的光軸越接近于平行,解的誤差越大。因此實際應(yīng)用時,懸掛攝像頭時應(yīng)使兩光軸有一定角度,并經(jīng)過多次測試選擇解的精度最高的懸掛方式。
該升維算法可劃分為相機標(biāo)定、升維結(jié)果計算兩個階段。對此擬做闡釋分述如下。
(1)相機標(biāo)定階段。是整個算法流程的準(zhǔn)備階段,僅需進(jìn)行一次,因此該階段所耗費的時間可以忽略不計,誤差主要來自于張正友標(biāo)定方法本身的誤差和測量誤差。該階段的目的是為獲取兩攝像頭的內(nèi)參矩陣、旋轉(zhuǎn)矩陣和偏移向量,并由此計算出兩攝像頭原點的世界坐標(biāo)。計算世界坐標(biāo)的偽代碼。
該階段為整個算法流程的核心,所耗費的時間主要取決于2D人體關(guān)鍵點檢測算法,其余部分時間復(fù)雜度均為常數(shù)。誤差主要來源于2D人體關(guān)鍵點檢測算法的誤差以及求解空間直線方程時產(chǎn)生的誤差。
為定量測試升維算法的準(zhǔn)確度,對該升維算法在250 cm*250 cm的空間內(nèi)進(jìn)行了測量。測量詳情見圖4。圖4中,在一把椅子上標(biāo)注4個檢測點,不斷移動椅子的位置,通過升維算法對椅子的檢測點進(jìn)行定位,并比較預(yù)測位置與實際位置的誤差。
圖4 升維算法定量測試Fig.4 Quantitative test of dimension-ascending algorithm
共進(jìn)行了9組實驗,具體結(jié)果見表1。表1中,單位均為cm,且保留整數(shù)。分析表1中數(shù)據(jù),可得出結(jié)論:在本文實驗條件下,該升維算法的平均絕對誤差為2.105 cm。
表1 升維算法定量測試結(jié)果Tab.1 Quantitative test results of dimension-ascending algorithm cm
本文將作為2D人體關(guān)鍵點檢測器,并定義了一系列的關(guān)鍵點,見表2。同時,又將的檢測結(jié)果進(jìn)行升維,得到每個關(guān)鍵點的三維世界坐標(biāo)。
表2 關(guān)鍵點定義Tab.2 Key points definition
本文通過2個RGB攝像頭先進(jìn)行2D人體關(guān)鍵點檢測、再進(jìn)行升維的方法,能夠得到較好的效果,并達(dá)到實際項目應(yīng)用要求,測試效果如圖5所示。
圖5 升維效果Fig.5 Dimension-ascending effect
為了達(dá)到游戲玩家通過動作變化來控制第三人稱游戲中玩家角色模型運動、從而實現(xiàn)人機交互的目的,本文將上述通過關(guān)鍵點升維得到的3D人體關(guān)鍵點數(shù)據(jù),作為游戲交互信息進(jìn)行了測試。本地客戶端將3D關(guān)鍵點數(shù)據(jù)以一定格式發(fā)送給游戲運行平臺。游戲運行平臺得到人體關(guān)鍵點的3D坐標(biāo)數(shù)據(jù)后,通過內(nèi)插或運動學(xué)分析等處理方法,來完成對游戲內(nèi)玩家模型的控制。交互效果如圖6所示。文中經(jīng)交互測試可看出,對于通過升維算法得到的3D關(guān)鍵點數(shù)據(jù),能夠有效地用于游戲交互,并得到較好的效果。
圖6 交互結(jié)果Fig.6 Interaction results
針對RGB圖片只能進(jìn)行2D關(guān)鍵點檢測問題,提出了一種通過2個普通RGB攝像頭對同一關(guān)鍵點檢測,再根據(jù)兩攝像頭的空間關(guān)系對像素坐標(biāo)系下的2D坐標(biāo)進(jìn)行升維,得到其在世界坐標(biāo)系下3D坐標(biāo)的升維方法。經(jīng)過測試,通過該方法得到的3D坐標(biāo)有較高的準(zhǔn)確度,并且可以用于對第三人稱游戲玩家角色的交互。在保證玩家游戲體驗的同時,降低了體感類游戲的硬件成本。此外,該升維方法有較好的拓展性,可用于各種場景。