霍英 陳臺興 孫錦森 張嘉明 林鴻森



關(guān)鍵詞:手勢識別;MediaPipe;神經(jīng)網(wǎng)絡(luò);人機交互
中圖分類號:TP391 文獻標識碼:A
文章編號:1009-3044(2023)20-0017-03
0 引言
手勢識別[1]和手部檢測具有廣泛的潛在應(yīng)用,涵蓋車內(nèi)手勢、手語識別、虛擬現(xiàn)實等領(lǐng)域。手勢技術(shù)使得用戶可以在不接觸設(shè)備的情況下實現(xiàn)控制或互動,因此越來越受到人們的關(guān)注和青睞。然而,互聯(lián)網(wǎng)上的手勢識別模型雖然眾多,但它們只適用于特定的手勢集,缺乏規(guī)范和架構(gòu)設(shè)計,最終難以為用戶提供方便的使用和構(gòu)建體驗。因此,文章提出了一種端對端、可擴展的框架,允許用戶使用手勢實時控制計算機系統(tǒng),實現(xiàn)人機交互[2]。該框架在不同的硬件(CPU/GPU) 和操作系統(tǒng)上工作,并依靠一個中等分辨率的攝像頭來檢測手勢。該框架使用手勢技術(shù)代替鼠標操作和鍵盤快捷鍵,讓用戶能夠通過手勢輕松控制桌面。此外,還提供了一個易于使用的配置,用戶可以重新映射手勢和動作,添加新的自定義動作和手勢。
該框架設(shè)計了兩種手勢類型:靜態(tài)和動態(tài)。靜態(tài)手勢指的是單一的手部姿勢就能夠提供足夠的信息來進行分類的手勢,例如“V字”手勢。而動態(tài)手勢[3]則不能僅通過一個姿勢來檢測,需要一連串的姿勢才能被理解和分類。例如,在移動手的同時保持手型姿勢的手勢“( 向上滑動”) ,或者是涉及連續(xù)改變手姿勢的手勢“( 捏”) 。通過將手部運動與連續(xù)的姿勢變化相結(jié)合,可以創(chuàng)造出大量的動態(tài)手勢。
該框架采用了模塊化設(shè)計,將其分為若干邏輯組件,每個組件執(zhí)行特定任務(wù)。手勢接收器從圖像中獲取關(guān)鍵點,將其傳遞給手勢識別器,后者使用神經(jīng)網(wǎng)絡(luò)對靜態(tài)和動態(tài)手勢進行分類。最后,手勢執(zhí)行器執(zhí)行分類結(jié)果的動作。該框架的關(guān)鍵特點是,它具有高度的可定制性。除了內(nèi)置的鼠標和鍵盤功能,用戶還可以將手勢映射到任何桌面操作上,包括Shell等腳本。這使得該系統(tǒng)的使用方式非常靈活。用戶可以將手勢用于啟動應(yīng)用程序、設(shè)置環(huán)境等。此外,框架還提供了一種添加新手勢的方法,以滿足用戶不同的需求。
1 準備工作
1.1 識別方法
通過查閱資料,研究者發(fā)現(xiàn)了許多關(guān)于從靜態(tài)圖像或視頻中進行手勢識別的文獻。這些解決方案通??梢苑譃橐韵聨最悾?) 通過相機或傳感器提供純RGB圖像與深度數(shù)據(jù)(RGB-D) ;2) 通過檢測手部關(guān)鍵點(手掌和手指關(guān)節(jié))作為中間步驟或直接從視頻中執(zhí)行端到端檢測;3) 將檢測關(guān)鍵點作為最終目標,而不是手的三維重建[4];4) 手勢是預(yù)先分割的或必須實時分割的[5]。
基于上述研究,研究者采用單目RGB視頻流,并將其輸入一個兩階段的神經(jīng)網(wǎng)絡(luò)架構(gòu)。在第一階段中,使用現(xiàn)成的MediaPipe[6]框架從單個視頻幀中檢測手部關(guān)鍵點,并生成一個手部關(guān)鍵點序列。在第二階段中,使用自己的神經(jīng)網(wǎng)絡(luò)模型對這個關(guān)鍵點序列進行靜態(tài)和動態(tài)手勢的檢測。
1.2 識別框架
手勢識別在多種領(lǐng)域中有著廣泛應(yīng)用,例如虛擬界面控制、游戲、增強現(xiàn)實/虛擬現(xiàn)實環(huán)境交互、汽車人機界面、家庭自動化、教育、零售商業(yè)環(huán)境以及消費電子產(chǎn)品控制等。手勢的高表達性和直觀性使其成為這些應(yīng)用中非常有價值的交互方式。盡管手勢識別市場正在快速增長,但幾乎沒有任何端到端的開源手勢識別框架。GRT是一個例外,這是一個為實時手勢識別而設(shè)計的C++機器學(xué)習(xí)庫,它提供了創(chuàng)建自定義識別器的構(gòu)建模塊。相比之下,研究者使用神經(jīng)網(wǎng)絡(luò)作為構(gòu)建模塊,并采用PyTorch[7]框架進行模型開發(fā),可以進一步提高手勢識別的準確性和效率。
2 架構(gòu)設(shè)計
研究者利用開源框架MediaPipe來檢測攝像頭捕捉的圖像中的手部關(guān)鍵點。MediaPipe模塊從攝像頭讀取數(shù)據(jù),進行處理并生成關(guān)鍵點,接著通過ZeroMQ (一種消息傳遞隊列)將其傳輸給手勢接收器。手勢接收器接收關(guān)鍵點后將其傳輸給手勢識別器,后者對其進行特征編碼,并送入神經(jīng)網(wǎng)絡(luò)進行手勢檢測。最后,手勢接收器將檢測到的手勢發(fā)送到手勢執(zhí)行器,以執(zhí)行相應(yīng)的動作。
2.1 MediaPipe
一個跨平臺框架,提供各種機器學(xué)習(xí)解決方案。MediaPipe中的手部跟蹤器[8]是一個高保真的解決方案,可以從單一圖像中推斷出手部的21個三維坐標,跟蹤平滑,能夠應(yīng)對自我封閉的情況,也就是手覆蓋自身。在使用其手部跟蹤功能時,它能夠跟蹤用戶的手掌并生成手部坐標或關(guān)鍵點。
2.2 手勢接收器
手勢接收器充當其他模塊的控制器。它能夠從MediaPipe模塊接收到關(guān)鍵點,并將其傳遞給手勢識別器和鼠標跟蹤器進行處理。隨后,它將處理后的輸出(即手勢名稱)傳遞給手勢執(zhí)行器,以執(zhí)行相應(yīng)的操作。
2.3 手勢識別器
手勢識別器是一個核心模塊,用于對給定的關(guān)鍵點進行手勢分類。為此,框架使用了兩個神經(jīng)網(wǎng)絡(luò),一個用于檢測靜態(tài)手勢,另一個用于動態(tài)手勢。這些神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和訓(xùn)練細節(jié)將在后續(xù)章節(jié)中詳細介紹。通過這些神經(jīng)網(wǎng)絡(luò)的處理,框架能夠?qū)κ謩葸M行準確的分類,并將分類結(jié)果傳遞給其他模塊以執(zhí)行相應(yīng)的操作。
2.4 鼠標追蹤器和手勢執(zhí)行器
鼠標追蹤器模塊能夠?qū)崟r追蹤用戶手指在屏幕上的移動,并將其映射到光標的移動。通常情況下,使用食指尖端作為追蹤鼠標的關(guān)鍵點。隨著手指的移動,追蹤器可以將其在屏幕上的運動投影到光標的移動上。
手勢執(zhí)行器模塊接收手勢識別器所識別的手勢名稱作為輸入,并根據(jù)預(yù)定義的手勢動作映射表執(zhí)行相應(yīng)的操作??蚣茴A(yù)先定義了一小部分手勢及其對應(yīng)的動作,以涵蓋常見的使用情況。
3 手勢識別器
手勢識別器的輸入是由MediaPipe生成的21個三維關(guān)鍵點,每個關(guān)鍵點對應(yīng)于手上的一個位置。每個關(guān)鍵點由三個坐標組成,分別表示該點在三個維度上的位置(x,y,z )(x,y,z )。因此,手勢識別器的輸入向量是一個長度為63的向量。這些輸入向量經(jīng)過預(yù)處理,被轉(zhuǎn)換為神經(jīng)網(wǎng)絡(luò)期望的特征,以便進行手勢分類。具體如下所述:
3.1 靜態(tài)手勢
3.1.1 特征提取
由MediaPipe生成的21個關(guān)鍵點被轉(zhuǎn)換為神經(jīng)網(wǎng)絡(luò)所需的向量。該向量是通過計算相對手部向量得出的,即輸入關(guān)鍵點之間的向量差。這些相對向量以一種位置不變的方式編碼手的姿勢信息,也就是說,無論手在網(wǎng)絡(luò)攝像頭的視野中處于什么位置,都能檢測到相同的手勢。以第一個相對手部向量(從手掌底部到拇指的第一個關(guān)節(jié))為例,可以通過以下方式計算得出:
其中,V0V0和V1V1代表圖2中標有0和1的點的三維坐標,V01V01代表它們之間的相對向量。通過計算一共有16個相對的手部向量(拇指4個,其他手指3 個),每個手部向量由(x,y,z )(x,y,z ) 坐標組成,總共有48個坐標。最后,添加上標志手,即執(zhí)行手勢的手,這個49-D向量被送入神經(jīng)網(wǎng)絡(luò)。
3.1.2 數(shù)據(jù)集
在進行網(wǎng)絡(luò)訓(xùn)練時,研究者收集了自己的數(shù)據(jù),并創(chuàng)建了一個小型的數(shù)據(jù)集。研究者采用了以下方法收集這些數(shù)據(jù):首先指定手勢的名稱,然后執(zhí)行Me? diaPipe 框架并捕獲關(guān)鍵點。這些關(guān)鍵點被記錄在CSV文件中,并與相應(yīng)的手勢名稱一起使用。對于每個手勢,收集了約2 000個樣本。雖然實現(xiàn)靜態(tài)手勢相對簡單,但手只能做出有限的姿勢,具有一定的局限性。因此需要收集動態(tài)手勢的數(shù)據(jù)以提高模型的泛化能力。
3.2 動態(tài)手勢
3.2.1 特征提取
為了提取特征向量,將輸入序列中的每一幀轉(zhuǎn)換為一個向量,該向量由以下內(nèi)容組成:手掌底部的絕對坐標,即V0xV0x和V01yV0y。這是因為一些手勢,如“向上刷”“向右刷”,涉及手的移動;手掌底部的時間坐標。這包括該坐標相對于上一個時間段的位置變化,從而獲取手勢方向信息;相對手部向量的坐標。與靜態(tài)情況類似,這些坐標用于捕捉手的姿勢。
3.2.2 數(shù)據(jù)集
為了訓(xùn)練動態(tài)手勢識別模型,使用SHREC[9]數(shù)據(jù)集。這個數(shù)據(jù)集包含2 800個序列,包括14種手勢,如“向上滑動”“點擊”等常見手勢,以及“滑動+”等更復(fù)雜的手勢。這些序列是可變長度的,由多人以兩種方式進行采集:使用整個手掌或只使用手指。為了收集更多數(shù)據(jù),框架還提供一個腳本,用于記錄動態(tài)手勢的數(shù)據(jù)。
4 模型訓(xùn)練和結(jié)果分析
通過PyTorch-Lightning 框架來建立神經(jīng)網(wǎng)絡(luò)分類器。PyTorch-Lightning是一種開源深度學(xué)習(xí)框架,它提供了模塊化的模型開發(fā)工具,讓用戶能夠快速地構(gòu)建神經(jīng)網(wǎng)絡(luò)。該框架提供了訓(xùn)練、驗證和測試等功能,同時也支持分布式訓(xùn)練。其優(yōu)點是可擴展性強、易于使用、性能良好等。使用該框架能夠顯著減少代碼量,并加快開發(fā)速度。
4.1 靜態(tài)手勢
為了檢測靜態(tài)手勢,使用一個具有兩個線性層的前饋神經(jīng)網(wǎng)絡(luò)分類器,該分類器接收特征向量并將其歸類為可用的手勢之一。該網(wǎng)絡(luò)經(jīng)歷了大約50次迭代,訓(xùn)練后的混淆矩陣如圖3所示。雖然無法記錄所有可能的靜態(tài)手勢,但考慮到后續(xù)用戶的擴展性,研究者采用了一些處理方法以解決數(shù)據(jù)不平衡的問題。除了相關(guān)的手勢集,還引入了一個“空”手勢,如果沒有檢測到相關(guān)的手勢,就會選擇這個手勢。為了訓(xùn)練分類器,收集了各種不相關(guān)的靜態(tài)手勢,并將它們標記為空。盡管這提高了分類器的性能,但仍然出現(xiàn)許多假陽性的情況。為了解決這個問題,通過對“空”手勢的得分進行縮放,手動校準分類器的softmax輸出。
4.1.1 實驗結(jié)果
這些優(yōu)化使靜態(tài)分類器能夠在多個用戶和不同的照明條件下達到很高的檢測精度,并取得了驗證準確率為98.52%的良好性能。此外,研究者還對響應(yīng)時間進行了檢測,發(fā)現(xiàn)沒有明顯的延遲。
4.2 動態(tài)手勢
為了更準確地檢測動態(tài)手勢,采用由線性層組成的遞歸神經(jīng)網(wǎng)絡(luò),與雙向GRU相連,對傳入的特征進行編碼。在檢測動態(tài)手勢時,關(guān)鍵問題在于準確計算手勢的起始和結(jié)束時間。為了避免這個問題,研究者使用信號鍵來表示手勢的起始和結(jié)束,并將鍵盤中的“Ctrl”鍵用作信號鍵。這種方法能夠處理不同長度的手勢,并減少錯誤分類的數(shù)量。除了SHREC提供的手勢外,研究者還使用這種方法增加了一個名為“圓圈”的手勢。盡管“圓圈”是一個復(fù)雜的手勢,但網(wǎng)絡(luò)在測試期間能夠準確檢測出該手勢,這表明網(wǎng)絡(luò)也能成功地應(yīng)用于其他手勢。
4.2.1 實驗結(jié)果
研究者使用混淆矩陣對各種手勢進行了分類和評估,結(jié)果如圖4所示。圖4表明,動態(tài)手勢的性能比靜態(tài)手勢低,平均準確率約為85%。這是因為動態(tài)手勢涉及兩個因素:手的姿勢和手隨時間的位移。從混淆矩陣中可以看出,那些涉及手部位移的手勢(如“滑動”) 被準確地檢測出來,而那些涉及手指方向變化的手勢(如“點擊”) 則相對較難。
在多次測試中,出現(xiàn)領(lǐng)域不匹配的問題。具體來說,研究者使用了由RGB相機捕獲的數(shù)據(jù)流進行測試,而SHREC數(shù)據(jù)集是由英特爾RealSense深度相機記錄的。由于這種領(lǐng)域不匹配,框架在測試過程中失去了一定的準確性。為了解決這個問題,研究者計劃改進特征計算方法,并使用更大、更具代表性的數(shù)據(jù)集進行訓(xùn)練。通過這種方式,可以提高模型的準確性和可靠性,以更好地適應(yīng)各種不同的環(huán)境。
5 結(jié)論
文章提出了一個基于人機交互的端對端手勢識別控制框架,其可以通過用戶的偏好進行定制。除了提供一個全功能的鍵鼠替代品外,框架還支持自定義手勢和動作的添加,以便用戶在不同的環(huán)境下使用。未來,研究者的目標是通過提高檢測精度進一步改進這個框架,使得增量訓(xùn)練新手勢更加有效,并進行用戶研究以評估框架的可用性。