王福任,李洪璠
(三亞學(xué)院,海南三亞,572000)
隨著硬件技術(shù)和通信技術(shù)的飛速發(fā)展,增強(qiáng)現(xiàn)實(shí)、虛擬現(xiàn)實(shí)交互逐漸成為下一代人機(jī)交互技術(shù)的主流。本文旨在設(shè)計(jì)一種三維指尖跟蹤方式,借用深度學(xué)習(xí)模型、雙目同步相機(jī)模組及雙目測(cè)距原理,完成三維指尖跟蹤。在后續(xù)研究中,使用者或可以此實(shí)現(xiàn)增強(qiáng)現(xiàn)實(shí)、虛擬現(xiàn)實(shí)設(shè)備的人機(jī)交互,即隔空點(diǎn)觸、隔空劃動(dòng)、隔空拉伸等相應(yīng)操作。
指尖關(guān)鍵點(diǎn)檢測(cè)的目的是,找出待檢測(cè)畫面或視頻流中手指的指尖關(guān)鍵點(diǎn)。其原理類似于人體關(guān)鍵點(diǎn)檢測(cè)或面部關(guān)鍵點(diǎn)檢測(cè)。不過(guò),在指尖關(guān)鍵點(diǎn)檢測(cè)中,手部將一個(gè)目標(biāo)物體。
本文使用OpenPose 作為指尖跟蹤模型。OpenPose 人體姿態(tài)識(shí)別項(xiàng)目是世界上首個(gè)基于深度學(xué)習(xí)的實(shí)時(shí)二維姿態(tài)估計(jì)應(yīng)用,其擁有良好的魯棒性,可用于單個(gè)或多個(gè)目標(biāo)。OpenPose 可以實(shí)現(xiàn)臉部表情、人體活動(dòng)、手指活動(dòng)等姿態(tài)估計(jì)。目前,基于OpenPose 的實(shí)例大量涌現(xiàn),該技術(shù)在VR 試衣、體育評(píng)估、動(dòng)作采集等領(lǐng)域擁有非常廣闊的應(yīng)用前景。
雙目視覺廣泛應(yīng)用在機(jī)器人導(dǎo)航、精密工業(yè)測(cè)量、物體識(shí)別、虛擬現(xiàn)實(shí)、場(chǎng)景重建,勘探領(lǐng)域。雙目視覺是模擬人類視覺原理,使用計(jì)算機(jī)被動(dòng)感知距離的方法。從兩個(gè)或多個(gè)點(diǎn)觀察一個(gè)物體,獲取在不同視角下的圖像,根據(jù)圖像之間像素的匹配關(guān)系,通過(guò)三角測(cè)量原理計(jì)算出像素之間的偏移來(lái)獲取物體的三維信息。得到了物體的景深信息,就可以計(jì)算出物體與相機(jī)之間的實(shí)際距離,物體3 維大小,兩點(diǎn)之間實(shí)際距離。[3]
本文主要使用的是雙目測(cè)距原理。雙目測(cè)距的操作分為四個(gè)步驟,即相機(jī)標(biāo)定—雙目校正—雙目匹配—計(jì)算深度信息。
本文使用了可進(jìn)行手部關(guān)鍵點(diǎn)識(shí)別的深度學(xué)習(xí)模型進(jìn)行手指關(guān)鍵點(diǎn)標(biāo)注,在此基礎(chǔ)上用雙目測(cè)距原理完成視差數(shù)據(jù)的收集,并計(jì)算深度信息以獲得食指指尖的三維數(shù)據(jù)。
獲得食指指尖的三維立體數(shù)據(jù)后,應(yīng)對(duì)數(shù)據(jù)進(jìn)行處理,使得數(shù)據(jù)可對(duì)應(yīng)AR、VR 眼鏡中的虛擬屏幕。其中,本文所用的處理方式包含中點(diǎn)坐標(biāo)計(jì)算等。
三維指尖跟蹤的總體流程如圖1 所示。

圖1 三維指尖跟蹤流程圖
本文設(shè)計(jì)的三維指尖跟蹤系統(tǒng)是以O(shè)penPose 為基礎(chǔ),利用Python 語(yǔ)言進(jìn)行腳本編寫。本文所用OpenPose 的版本是1.6.0, Python 版本是3.7.6,且安裝有OpenCV-Python庫(kù)及相關(guān)依賴。CPU 為Intel E3-1285lv4, GPU 為Nvidia GTX1060,內(nèi)存為16GB,系統(tǒng)為Windows10。相機(jī)模組采用的是搭載兩顆OV9570 的雙目同步攝像頭模組。
在本文中,為簡(jiǎn)化模型,僅提取了食指指尖作為模型的目標(biāo)。在實(shí)際操作中,可將手指其他關(guān)鍵點(diǎn)設(shè)為目標(biāo),以完成更加復(fù)雜的操作。
2.2.1 輸入圖像
輸入圖像如圖2 所示,由雙目同步攝像頭模組拍攝,該模組采取拼疊的方式將兩個(gè)1280720 的視頻流橫向拼疊為總分辨率為2560720 的視頻流。在本此操作中,OpenPose 模型將使用OpenCV 調(diào)用相機(jī)視頻流。

圖2 輸入圖像
2.2.2 模型進(jìn)行處理
在OpenPose 中,視頻流經(jīng)過(guò)卷積網(wǎng)絡(luò)提取特征,得到一組特征圖,然后分別使用CNN 網(wǎng)絡(luò)提取局部置信圖和局部親和域并進(jìn)行二元分配,以得出高置信區(qū)域,如圖3 所示。

圖3 模型處理過(guò)程中輸出的熱力圖
在本文中,分辨率為2560720 視頻流將會(huì)被切割為兩個(gè)1280720 的視頻流同時(shí)處理,以此提高性能。
2.2.3 輸出結(jié)果
得到高置信區(qū)域后,模型將高置信區(qū)域標(biāo)記并輸出坐標(biāo),同時(shí)進(jìn)行視差測(cè)算。以此得到同一坐標(biāo)系下的兩個(gè)二維坐標(biāo)“position of left”、“position of right”和距離參數(shù)“distance”。
在這之后,應(yīng)對(duì)兩個(gè)二維坐標(biāo)進(jìn)行中點(diǎn)坐標(biāo)計(jì)算,獲得兩坐標(biāo)的連線中點(diǎn)坐標(biāo),并將所得中點(diǎn)坐標(biāo)系進(jìn)行裁切,使裁切后的坐標(biāo)系等效于1280720 的坐標(biāo)系,并以[x,y]格式輸出。此時(shí)模型輸出了一個(gè)三維坐標(biāo)系下的坐標(biāo),即二維坐標(biāo)[x,y]和距離參數(shù)“distance” ,如圖4 所示。

圖4 坐標(biāo)打印結(jié)果
需注意的是,在實(shí)際操作中受限于雙目同步相機(jī)的鏡頭特性,目標(biāo)放置于某些角度時(shí)不能保證目標(biāo)被完整錄入。本文為簡(jiǎn)化模型,暫未考慮此方面的影響。
本文所述方法可以解決增強(qiáng)現(xiàn)實(shí)和虛擬現(xiàn)實(shí)設(shè)備進(jìn)行指尖跟蹤的問(wèn)題。本文根據(jù)深度學(xué)習(xí)模型和雙目視覺算法,使用雙目相機(jī)模組,實(shí)現(xiàn)了三維指尖跟蹤。在本文所展望的實(shí)際應(yīng)用中,使用者或可以此實(shí)現(xiàn)隔空的點(diǎn)觸、劃動(dòng)、拉伸、旋轉(zhuǎn)等操作,這將簡(jiǎn)化增強(qiáng)現(xiàn)實(shí)和虛擬現(xiàn)實(shí)設(shè)備的可操作性與實(shí)用性。不過(guò),經(jīng)測(cè)試后發(fā)現(xiàn),軟件在所述配置中運(yùn)行十分緩慢。例如,測(cè)試用視頻流分辨率為2560*720,但在測(cè)試中發(fā)現(xiàn),整體方案無(wú)法達(dá)到預(yù)期的30HZ 采樣率,原因是OpenPose模型處理高分辨率視頻流時(shí)有較強(qiáng)的性能要求,超過(guò)了本文所使用平臺(tái)的硬件性能。為此,本文嘗試了多種方法解決,包括隔幀處理和圖像拆分等。
本文的思路與方向是正確的,但在投入實(shí)用前,尚需解決手指關(guān)鍵點(diǎn)識(shí)別模型的精簡(jiǎn)化與輕量化的問(wèn)題,并使用深度學(xué)習(xí)的專用加速芯片對(duì)模型進(jìn)行加速,才能達(dá)到在移動(dòng)設(shè)備中使用的目的。