早在語言出現(xiàn)之前,人類就習(xí)慣使用肢體和手勢,這種近乎本能的溝通方式,來互相交流。
在機(jī)器被發(fā)明之后,手勢因具備鍵盤、鼠標(biāo)、觸屏等交互方式所無法替代的天然優(yōu)勢,仍然有諸多應(yīng)用場景。
在電影《鋼鐵俠》里面,主角一揮手,憑空推拉拖拽操控虛擬物體,簡直不要太炫酷了。
做到像電影中那樣高精度、穩(wěn)定性好的手勢識別,需要硬件和算法的加持,兩者缺一不可。
手勢識別都有哪些常見的硬件方案?工程師是如何用 AI 算法來優(yōu)化識別效果的?常見的手勢識別應(yīng)用場景都有哪些?接下來,就讓 Rokid R-Lab 算法工程師張兆輝為我們娓娓道來。
手勢識別的原理并不復(fù)雜,它通過硬件捕獲自然信號,就像相機(jī)捕獲圖片信息那樣,然后通過軟件算法計(jì)算得到手的位置、姿態(tài)、手勢等,處理成計(jì)算機(jī)可以理解的信息。
目前手勢識別主要有以下 3 種硬件方案:
常見的又分彩色攝像頭方案和深度攝像頭方案。
1.1 彩色攝像頭方案
彩色攝像頭方案只需要一個(gè)普通攝像頭,捕捉拍攝一張彩色圖片,通過 AI 算法得到圖片中手的位置、姿態(tài)、手勢等信息。優(yōu)勢是設(shè)備成本低、數(shù)據(jù)容易獲取。
目前這種基于單目 RGB 的手勢識別在學(xué)術(shù)界和工業(yè)界研究的比較多,商用的方案商有英梅吉、ManoMotion、虹軟等。
還有一些人工智能開放平臺同樣提供這種方案。比如騰訊 AI 開放平臺提供靜態(tài)手勢識別和手部關(guān)鍵點(diǎn),百度 AI 開放平臺和 Face++ 提供靜態(tài)手勢檢測。以及一些開源項(xiàng)目比如 openpose 和 Google Mediapipe 等。
圖為 openpose 的手勢關(guān)鍵點(diǎn)檢測
相比深度攝像頭方案,彩色攝像頭方案缺乏深度信息,受光照影響非常大,夜間無法使用,穩(wěn)定性和精度都沒有深度相機(jī)方案好。
1.2 深度攝像頭方案
這個(gè)方案是通過深度攝像頭來獲取帶有深度信息的圖片。優(yōu)勢是更容易獲取手部的 3D 信息,相對應(yīng)的通過 AI 算法得到的手部 3D 關(guān)鍵點(diǎn)也更加準(zhǔn)確和穩(wěn)定。但缺點(diǎn)是需要額外的設(shè)備、硬件成本比較高。
深度相機(jī)又分三大類:ToF、結(jié)構(gòu)光和雙目成像。
其中,ToF 和結(jié)構(gòu)光得到的深度圖比較準(zhǔn),但成本比較高,多用于手勢的科研領(lǐng)域,商用的比較少,比如微軟 HoloLens、極魚科技 ThisVR。
雙目成像因?yàn)橐晥鼋谴?,幀率高,很適合用來做手勢識別,唯一缺點(diǎn)就是因?yàn)槌上裨淼南拗?,使得整個(gè)雙目相機(jī)模組的體積對比 ToF 和結(jié)構(gòu)光來說大很多。
采用雙目成像的公司以目前最大的手勢識別公司 Leap Motion 為代表,該公司使用的是主動(dòng)雙目成像方案,除了雙目攝像頭外還有三個(gè)補(bǔ)光單元,可捕獲雙手 26DoF、靜態(tài)手勢、動(dòng)態(tài)手勢等。此外,Leap Motion 還提供了非常完整的 SDK,對各個(gè)平臺支持都不錯(cuò)(除手機(jī)平臺)。
圖為 Leap Motion 的演示
國內(nèi)也有在做雙目手勢的公司,比如 uSens Fingo 是基于主動(dòng)雙目的視覺方案, 提供雙手 26DoF、靜態(tài)手勢、動(dòng)態(tài)手勢識別等功能。相比于 Leap Motion,uSens 更專注于對手機(jī)以及其他低功耗嵌入式設(shè)備的支持。此外還有微動(dòng) Vidoo Primary 也有基于雙目的手勢解決方案。
毫米波雷達(dá)方案的代表有谷歌推出的一款特殊設(shè)計(jì)的雷達(dá)傳感器—— Project Soli ,它可以追蹤亞毫米精準(zhǔn)度的高速運(yùn)動(dòng),但目前尚處在實(shí)驗(yàn)室階段。
從其公布的演示來看,目前可以識別個(gè)別指定的手勢,并在小范圍內(nèi)識別微小精確的手勢操作,很適合發(fā)揮人類精準(zhǔn)的小肌肉運(yùn)動(dòng)技能(fine motor skills)。但缺點(diǎn)是有效范圍太小,無法得到手的所有自由度。[參考谷歌Project Soli深入解析]
圖為 Project Soli 的演示
數(shù)據(jù)手套是指在手上帶一個(gè)內(nèi)置傳感器的特制手套,通過傳感器檢測手指的屈伸角度或位置,再根據(jù) Inverse kinematics(逆運(yùn)動(dòng)學(xué))來計(jì)算出手的位置。
一般用到的傳感器有彎曲傳感器、角度傳感器、磁力傳感器等。
彎曲傳感器和角度傳感器類似都是可檢測手指的彎曲程度,我們以 DEXMO 力反饋手套為例,該手套使用旋轉(zhuǎn)傳感器捕捉 11 個(gè)自由度的手部運(yùn)動(dòng),包括每根手指的伸展和彎曲,以及大拇指一個(gè)額外的旋轉(zhuǎn)自由度。
此方案對手的局部動(dòng)作檢測很準(zhǔn),而且不受視覺方案中視野范圍的限制。但缺點(diǎn)是手上必須戴手套不方便,且只能檢測局部的手指動(dòng)作,不能定位手部整體的位置角度。若想要檢測手的位置角度, DEXMO 需配合其他 6 自由度追蹤器使用。
當(dāng)然 DEXMO 的最大賣點(diǎn)其實(shí)不是手勢識別,而是逼真的觸覺反饋(haptics)+手勢識別。手勢識別+觸覺反饋的方案肯定會是以后人機(jī)交互的重要一環(huán)。最近收購 Leap Motion 的 UltraHaptics 就是一家做觸覺反饋的公司。
還有一種用磁力傳感器的——trakSTAR 電磁式空間位置追蹤系統(tǒng)。通過在手上貼的磁力傳感器的磁場變化,來確定傳感器的位置角度,再根據(jù)反運(yùn)動(dòng)學(xué)確定手的具體位置。
圖為 trakSTAR 使用示意圖
此方案需在手部貼 6 個(gè)磁力傳感器(5個(gè)指尖+1個(gè)手背),并在面前放一個(gè)磁力發(fā)射器。磁力發(fā)射器會在一定范圍內(nèi)形成一個(gè)特殊的電磁場,然后根據(jù)傳感器在電磁場中不同位置角度檢測到的電磁場強(qiáng)度的不同,來推斷出指尖及手掌的位置角度。再通過反運(yùn)動(dòng)學(xué),確定所有手部關(guān)節(jié)點(diǎn)的位置。
此方案的缺點(diǎn)是有效使用范圍太小,價(jià)格太貴,適用場景太少。優(yōu)點(diǎn)是精度很高,穩(wěn)定性很好,并且可獲得手部所有自由度。
目前此方案還只有純科研在用,最近幾個(gè)學(xué)術(shù)界公開的手勢數(shù)據(jù)集 FHAB、 BigHand 都是用此設(shè)備采集的。
圖為 FHAB 數(shù)據(jù)集中的示意圖
通過以上科普,相信大家對手勢識別的硬件方案有了初步的了解。但要想做好手勢交互,僅硬件方案是不夠的,還需要專業(yè)算法的支持。
當(dāng)我們通過攝像頭得到深度圖后,下一步就是把深度圖輸入給算法,算法可以輸出我們手部所有關(guān)鍵點(diǎn)的 3D 位置。
手部關(guān)鍵點(diǎn)也可以理解為手部骨架的關(guān)節(jié)點(diǎn),通常用 21 個(gè) 3D 關(guān)鍵點(diǎn)來描述。每個(gè) 3D 關(guān)鍵點(diǎn)有 3 個(gè)自由度,那么輸出維度就是 21*3。所以我們常常用一個(gè) 21*3 維的矢量來描述,如下圖
圖為可視化后的21個(gè)手部3D關(guān)鍵點(diǎn)
目前學(xué)術(shù)界已經(jīng)提出各種算法用于解決“基于深度的手勢姿態(tài)估計(jì)問題“,這些算法大體可以分成模型驅(qū)動(dòng)(model-driven)和數(shù)據(jù)驅(qū)動(dòng)(data-driven)兩種方式。
此類算法通常是預(yù)先用手部 pose(pose 指位姿參數(shù)或節(jié)點(diǎn)位置,后文將統(tǒng)稱為 pose)生成一系列手的幾何模型,并建立一個(gè)搜索空間(所有可能的手勢幾何模型的集合),然后在搜索空間內(nèi)找到與輸入深度圖最匹配的模型。
此時(shí),模型對應(yīng)的參數(shù)就是所求的 pose。此類算法屬于生成式方法(Generative Approaches),我們以下圖中的論文為例:
模型驅(qū)動(dòng)類算法通常需要設(shè)計(jì)一種方式把 pose 轉(zhuǎn)換成對應(yīng)的幾何模型。
此論文用了 linear blend skinning(一種骨骼蒙皮動(dòng)畫算法):意思就是給骨架蒙上一層皮膚,并讓皮膚跟隨骨骼運(yùn)動(dòng)一起變化,多用于動(dòng)畫領(lǐng)域。
先把 pose 轉(zhuǎn)換成對應(yīng)的 mesh(下圖左側(cè)),在進(jìn)一步轉(zhuǎn)換成光滑曲面模型(下圖右側(cè))。我們可以理解為 pose 是自變量,幾何模型可由 pose 算出,且?guī)缀文P团c pose 一一對應(yīng)。
圖為手部幾何模型
輸入的手部深度圖可轉(zhuǎn)化為點(diǎn)云, 此點(diǎn)云就相當(dāng)于在真實(shí)的手表面上采集到的一些 3D 點(diǎn),如下圖中的紅點(diǎn)和藍(lán)點(diǎn):
這樣就可以定義損失函數(shù)為點(diǎn)云中的點(diǎn)到模型表面的距離(上圖中的紅線),以此描述深度圖和pose的相似度。損失函數(shù)的輸入是深度圖和 pose,輸出是差異度。損失函數(shù)的輸出值越小,說明輸入的深度圖和pose越相似。
因此,只要在搜索空間中找到令損失函數(shù)最小的 pose 即為所求的pose。但因搜索空間不能寫成解析形式,沒法一次性求出損失函數(shù)的最小值,通常只能用數(shù)值計(jì)算方法,如PSO,ICP等,不斷迭代計(jì)算得到最優(yōu)解。
上圖從左到右展示了迭代初期到迭代結(jié)束時(shí)的 pose,這種迭代的數(shù)值解法通常對初始化要求較高,若初始化的不好,則需要很長時(shí)間才能迭代收斂,還有可能無法收斂到全局最小值(因?yàn)閾p失函數(shù)是非凸函數(shù)),所以算法實(shí)現(xiàn)時(shí),通常利用上一幀的pose來初始化當(dāng)前幀的計(jì)算。
這種模型驅(qū)動(dòng)類方法需要手工設(shè)計(jì)幾何模型和損失函數(shù)。簡單的幾何模型計(jì)算量小,復(fù)雜的幾何模型準(zhǔn)確度高。通常設(shè)計(jì)模型時(shí)需要在準(zhǔn)確度和性能之間做權(quán)衡。
圖為不同的手部幾何模型
模型驅(qū)動(dòng)類的算法優(yōu)勢是不需要任何訓(xùn)練數(shù)據(jù),只要設(shè)計(jì)的好,寫完就可以直接用。 缺點(diǎn)是需要手工設(shè)計(jì)模型,計(jì)算量較大,容易誤差累計(jì)導(dǎo)致漂移,對初始化要求高,通常只能用在手勢追蹤領(lǐng)域。
此類算法是指利用收集數(shù)據(jù)中訓(xùn)練樣本與其對應(yīng)的標(biāo)簽關(guān)系,讓機(jī)器學(xué)習(xí)一個(gè)從樣本到標(biāo)簽的映射。 此類算法屬于判別式方法(Discriminative Approaches)。
這樣的機(jī)器學(xué)習(xí)算法有很多,可以是早期使用的隨機(jī)森林,SVM 或是最近研究的火熱的神經(jīng)網(wǎng)絡(luò)等。此類方法的優(yōu)點(diǎn)是不需要設(shè)計(jì)復(fù)雜的模型,缺點(diǎn)是需要大數(shù)據(jù)。但現(xiàn)在大數(shù)據(jù)時(shí)代數(shù)據(jù)量已經(jīng)不是問題,這種數(shù)據(jù)驅(qū)動(dòng)的方式已經(jīng)成為目前的主流研究方向。
早期學(xué)術(shù)界研究手勢關(guān)鍵點(diǎn)回歸的經(jīng)典方法有 Cascade regression, Latent Regression Forest 等。近些年研究主要集中在各類神經(jīng)網(wǎng)絡(luò)如:DeepPrior 系列、REN、pose guided、3D-CNN、Multi-View CNNs、HandPointNet、Feedback Loop 等。
由于此處討論的用于手勢的神經(jīng)網(wǎng)絡(luò)與普通的圖的神經(jīng)網(wǎng)絡(luò)并無本質(zhì)差異,而神經(jīng)網(wǎng)絡(luò)的科普文章已經(jīng)很多,這里就不做科普了,我們僅挑幾個(gè)有代表性的網(wǎng)絡(luò)結(jié)構(gòu)介紹一下:
DeepPrior:網(wǎng)絡(luò)結(jié)構(gòu)大體如下圖,通過初始網(wǎng)絡(luò)得到粗略的 pose,再用 refine 網(wǎng)絡(luò)不斷優(yōu)化, 并且在最后的全連接層前加了一個(gè)低維嵌入,迫使網(wǎng)絡(luò)學(xué)習(xí)把特征空間壓縮到更低維度。 此網(wǎng)絡(luò)后續(xù)有更優(yōu)化的版本 DeepPrior++。
Feedback Loop:網(wǎng)絡(luò)結(jié)構(gòu)如下圖,此網(wǎng)絡(luò)在預(yù)測 pose 之后,反過來用 pose 生成深度圖,并與輸入的深度圖一起預(yù)測更優(yōu)的 pose,此 pose 又可用來生成更優(yōu)的深度圖,以此迭代循環(huán)優(yōu)化pose。
3D CNN:網(wǎng)絡(luò)結(jié)構(gòu)如下圖,此網(wǎng)絡(luò)把2D深度圖上用像素的描述的深度信息,以TSDF的方式轉(zhuǎn)化為體素(3D的像素),并用3D 卷積代替了普通的2D卷積。
此處最大的貢獻(xiàn)就是在網(wǎng)絡(luò)結(jié)構(gòu)上從2D走到了3D,因?yàn)閭鹘y(tǒng)2D卷積網(wǎng)絡(luò)是為2D圖像設(shè)計(jì)的,并不一定適合3D信息的提取,而用3D卷積網(wǎng)絡(luò)則更容易獲取3D特征,也就更適用于3D手部關(guān)鍵點(diǎn)回歸的問題。
HandPointNet:網(wǎng)絡(luò)結(jié)構(gòu)如下圖,此網(wǎng)絡(luò)輸入時(shí)把深度圖轉(zhuǎn)成點(diǎn)云,然后用 PointNet 做手部 3D 關(guān)鍵點(diǎn)回歸。
HandPointNet的主要貢獻(xiàn)是首次把PointNet用在了手勢關(guān)鍵點(diǎn)回歸上,其中的PointNet是很有代表性的網(wǎng)絡(luò)。PointNet 首次用 3D 點(diǎn)云來作為網(wǎng)絡(luò)輸入而不是 2D 圖片。
PointNet 比上一個(gè)介紹的 3DCNN 更進(jìn)一步探索了在 3D 空間中的神經(jīng)網(wǎng)絡(luò)架構(gòu),以及如何更有效的提取 3D 特征,PointNet后續(xù)有更優(yōu)化的版本PointNet++。
上述我們介紹了常見的手勢識別硬件方案與算法模型,那么手勢識別真正落地的應(yīng)用場景都有哪些呢?
很多人或許認(rèn)為手勢交互還只是停留在科幻電影的概念而已,接下來,我們以產(chǎn)品應(yīng)用為例,來介紹一些已經(jīng)商業(yè)落地或潛在的落地場景。
以 Leap Motion 為代表的很多公司都在做 VR+ 手勢。 VR 強(qiáng)調(diào)沉浸感,而手勢交互可以極大的提升 VR 使用中的沉浸感。所以 VR+ 手勢這個(gè)落地方向很靠譜,等 VR 得到普及后,定會改變?nèi)祟惖膴蕵贩绞健?
此類代表產(chǎn)品:LeapMotion、uSens、極魚科技等。
以 HoloLens 為代表的很多公司都在做 AR 眼鏡。AR 眼鏡可能會脫離實(shí)體的觸屏和鼠標(biāo)鍵盤這些輸入工具,取而代之的輸入是圖像和語音等。此時(shí)手勢交互便必不可少,不過 AR 還處在比 VR 市場更早期的階段,需繼續(xù)積累技術(shù),等待市場成熟。
此類代表產(chǎn)品有:HoloLens、Magic Leap、Rokid Glass、Nreal、Project North Star、亮風(fēng)臺等。
圖為 Leap Motion Project North Star 的演示片段
以 Sony Xperia Touch 為代表的投影儀+手勢識別,將屏幕投影到任何平面上,再通過手勢識別模擬觸屏操作。
這里用到的手勢識別比較簡單,基本只要識別單點(diǎn)多點(diǎn)。但使用中手很容易擋住投影儀顯示的屏幕,而且還有顯示清晰度的問題。此場景可能更多的是一種探索,落地的可能性較小。
不過可以開個(gè)腦洞:如果把這里的平面手勢識別改成空中手勢識別,平面投影改成全息 3D 投影,那就可以實(shí)現(xiàn)文章開頭提到《鋼鐵俠》里的全息控制臺了。
空中手勢識別已經(jīng)能做到了,但目前還沒有真正的全息投影的技術(shù),只有一些偽全息投影。如反射式和風(fēng)扇式的偽全息投影。
反射式偽全息投影只是把物體的影像反射到反射面板(塑料板)后成一個(gè)虛像。因板子透明,所以看起來似乎是在空中直接成像。風(fēng)扇式偽全息投影是利用人眼的視覺暫留現(xiàn)象,讓畫面看起來像是直接在空中成像。
上圖為反射式偽全息投影
上圖為風(fēng)扇式偽全息投影
這些偽全息投影的最大問題就是沒法用手和虛擬影像交互。想要實(shí)現(xiàn)《鋼鐵俠》里面的全息工作臺,最有可能的方式是在 AR 眼鏡里面實(shí)現(xiàn),只要把計(jì)算得到的手勢位姿和顯示設(shè)備聯(lián)合標(biāo)定對齊,就可以實(shí)現(xiàn)手和虛擬影像的交互了。
此類代表產(chǎn)品有:Xperia Touch、光影魔屏等。
車載手勢指的是在開車時(shí)用手勢交互控制中控臺的一些選項(xiàng)按鍵等。相比于傳統(tǒng)方式,手勢的優(yōu)勢是不用每次都去按按鈕或戳屏幕,更智能方便。
在使用觸屏?xí)r,司機(jī)需要看著屏幕才知道按鈕在哪,看屏幕這一動(dòng)作,有極大的安全隱患。 而手勢可以配合語音反饋直接操作,不需要盯著屏幕。
車載手勢可以一定程度提高駕駛安全性,但它也有一些缺點(diǎn),在空中做手勢容易手累, 再加上手勢識別的準(zhǔn)確性和延遲問題,遠(yuǎn)不如直接用手過去轉(zhuǎn)轉(zhuǎn)按鈕、點(diǎn)點(diǎn)屏幕來的方便。所以目前業(yè)內(nèi)基本都采用的都是傳統(tǒng)方式+手勢操作輔助的方式。
此類代表產(chǎn)品有:寶馬7系、拜騰汽車、君馬SEEK 5等。
AI 時(shí)代,語音識別和手勢識別等交互方式的加入,讓我們與機(jī)器有了更多互動(dòng)的可能。語音交互在人工智能時(shí)代已經(jīng)有了先發(fā)優(yōu)勢,正在被逐漸落地并且有望大規(guī)模應(yīng)用。而從手勢識別的落地場景來看,這種交互方式還處在行業(yè)早期階段。
但可以預(yù)見的是,手勢交互是未來人機(jī)交互必不可少的一部分,Rokid 一直致力于 AI 人機(jī)交互的研究與探索,代表產(chǎn)品有智能音箱以及 AR 眼鏡,期望能在 AI 時(shí)代為用戶帶來自然友好的交互體驗(yàn)。
在你的想象中,還有哪些場景能用到手勢交互呢?歡迎大家留言討論。
作者介紹:張兆輝,浙江大學(xué)竺可楨學(xué)院求是科學(xué)(物理)本科畢業(yè),主要研究方向包括手勢識別,姿態(tài)估計(jì),立體視覺,深度學(xué)習(xí)等,現(xiàn)就職于 Rokid R-Lab 圖像算法工程師,負(fù)責(zé)手勢算法研發(fā)等相關(guān)工作。
投稿/爆料:tougao@youxituoluo.com
稿件/商務(wù)合作: 六六(微信 13138755620)
加入行業(yè)交流群:六六(微信 13138755620)
元宇宙數(shù)字產(chǎn)業(yè)服務(wù)平臺
下載「陀螺科技」APP,獲取前沿深度元宇宙訊息