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