劉德發(fā)
(西京學(xué)院 信息工程學(xué)院,陜西西安,710000)
隨著科學(xué)技術(shù)的飛速發(fā)展,計算機在科學(xué)技術(shù)領(lǐng)域發(fā)揮著愈加重要的能力。相應(yīng)地,計算機的交互性改善日益成為科學(xué)研究領(lǐng)域的熱點之一,在這種技術(shù)要求的背景下,研究的主要目的就是創(chuàng)建一個和諧自然的人機交互自然環(huán)境,讓用戶即時地與設(shè)備進行通信,讓計算機可以準(zhǔn)確表達出各種人類的表情及情緒。
而今,通過手勢來賦予計算機簡單指令的交互形式已經(jīng)成為計算機的一個重要研究領(lǐng)域。手勢主要由手部動作組成,作為人類社會理解和表達的一部分,不同于與鍵盤和鼠標(biāo)之間的交互,手勢檢測中對人們使用計算機中和網(wǎng)絡(luò)來說更容易、更高效。本文基于Mediapipe 框架,利用OpenCV 視覺庫實現(xiàn)了一種數(shù)字手勢識別的方法,能有效識別手部的一些簡單手勢,且響應(yīng)較快,具有較高性能。
作為谷歌學(xué)術(shù)研究部所開發(fā)的一個開源框架,基于圖形數(shù)據(jù)處理的目的,MediaPipe 主要用于處理構(gòu)建使用了多種形式的數(shù)據(jù)源(如視頻、音頻和各種其它傳感器數(shù)據(jù)和時間序列數(shù)據(jù))[1]。MediaPipe 具有跨平臺操作的優(yōu)勢,能在多個平臺上運行,并支持計算機使用GPU 處理。通過MediaPipe,待處理的圖像可以被分解成由圖形模塊表示的多個數(shù)據(jù)流管道,具有很高的性能。
圖1 Mediapipe 姿態(tài)預(yù)測流程
Mediapipe 手勢識別的部分都是使用內(nèi)部Bazel 工具構(gòu)建的。用戶可以免費使用這個跨平臺構(gòu)建工具。同時,Mediapipe 利用Machine Learning 技術(shù)從一幀中推斷出手部21 個3D 地標(biāo),實時性能較高,還可以針對多手識別的情況進行處理。
圖2 手部關(guān)鍵點坐標(biāo)
借助MediaPipe,能夠把數(shù)據(jù)流構(gòu)建成模塊化的組圖,將視頻或者音頻流數(shù)據(jù)輸入到圖形中,利用各個功能模塊構(gòu)建的圖形模型管道對這些數(shù)據(jù)進行相關(guān)處理,并從圖形中輸出最終結(jié)果數(shù)據(jù)[2]。使得整體處理流程更加流暢。因此,開發(fā)人員可以將MediaPipe 用作迭代優(yōu)化改進其應(yīng)用程序的環(huán)境,最終得到的結(jié)果也能在不同的設(shè)備和平臺上重現(xiàn)。
在本文的實驗中,原始模型是通過計算機攝像頭捕捉到的實時視頻作為輸入,利用MediaPipe 框架中的檢測模塊跟蹤手部動作并識別手勢。根據(jù)官方文件,手勢識別的平均準(zhǔn)確率為95.7%。為了更好地覆蓋手掌位置并額外監(jiān)控手掌的幾何特性,我們在不同背景下進行了實驗,具體實驗過程如下:
圖3 實驗流程圖
(1)創(chuàng)建手部檢測模型。該部分由Mediapipe 模塊中的手掌檢測模型BlazePalm Detector 直接實現(xiàn),BlazePalm 可以高效識別手的整體輪廓和運動方向,具有較大的覆蓋范圍和較高的檢測精度,適用于不同場景中不同大小的手部檢測。
圖4 手部檢測代碼部分
(2)手部關(guān)鍵點定位。Mediapipe 配備了Hand Landmark 模型,用于識別3D 手節(jié)點。操作手掌檢測模型Blazepalm 定義的手部圖像區(qū)域,可以高精度地返回手部關(guān)鍵點。在識別出的手部區(qū)域,該模型通過回歸算法將關(guān)鍵點精確定位在手部的三維關(guān)節(jié)坐標(biāo)上,并且對部分可見和遮擋的手部動作具有很高的魯棒性。
圖5 手部關(guān)鍵點坐標(biāo)檢測代碼部分
圖6 手部關(guān)鍵點標(biāo)注代碼部分
(3)構(gòu)建數(shù)字手勢識別模塊。在得到手部關(guān)鍵點的坐標(biāo)后,MediaPipe 通過內(nèi)置算法來推斷手勢動作。我們可以通過手指的彎曲角度來確定手勢的狀態(tài),將這組狀態(tài)映射到內(nèi)置的一系列預(yù)定義的手勢進行匹配,從而實現(xiàn)數(shù)字手勢的簡單識別。通過這種簡單直接的方法,我們可以有效評估基礎(chǔ)的數(shù)字手勢,并通過響應(yīng)速度來驗證檢測的質(zhì)量。
圖7 數(shù)字手勢推導(dǎo)代碼部分
本文識別實驗在Windows 10 平臺上運行,使用的開發(fā)語言為 Python,輔助的視覺庫為OpenCV。在本文實驗中,初步對單手?jǐn)?shù)字0~5 的手勢進行了測試識別,通過交互實時的響應(yīng)速度來檢驗實驗質(zhì)量。
起初,我們利用MediaPipe 內(nèi)置的手部檢測模型Blazepalm Detector 創(chuàng)建一個針對手部檢測的模塊,然后利用Hand Landmark Model 進行手部的定位,以此得到手部21 個關(guān)鍵點的坐標(biāo)。通過觀察,我們可以發(fā)現(xiàn)針對除大拇指外的其余四根手指,在正常情況下指尖的縱坐標(biāo)大于指腹的縱坐標(biāo),而在閉合的情況下卻小于指腹的縱坐標(biāo)。因此通過一個簡單的坐標(biāo)比較我們可以判斷出食指、中指、無名指、小指的狀態(tài)。而針對大拇指而言,觀察可以得到,大拇指豎起與放下時指尖與指腹的坐標(biāo)大小剛好相反。還可以利用大拇指與其他手指間的角度來進行判斷。這里我們采用的是比較其指尖與指腹的橫坐標(biāo)來判斷其狀態(tài)的變化。實驗結(jié)果如圖9 所示。
圖8 待識別數(shù)字手勢
圖9 數(shù)字手勢識別實驗
由上述實驗可知,基于MediaPipe 框架的手勢識別能夠有效地針對手的局部運動進行識別判定。在響應(yīng)速度方面,識別響應(yīng)時間及時,實驗過程中FPS 保持在20~30 左右。同時在實驗中出現(xiàn)多只手識別的情況下,MediaPipe 能夠很好地避免無關(guān)手的干擾,使目標(biāo)的輸入盡可能為所要求手的信息,具有一定的抗干擾性能。由于數(shù)據(jù)的輸入為連續(xù)的視頻流,從而導(dǎo)致在實驗過程中仍存在少許的誤識別的現(xiàn)象,同時該方案適用局限性大,在一些復(fù)雜手勢的識別上效果仍有待提高。
本文簡要討論了在MediaPipe 框架下實現(xiàn)的簡單數(shù)字手勢識別。對整體檢測流程做了基礎(chǔ)性描述,該框架對于手部的局部運動可以有效識別,且識別性能較高。手勢識別由于其方便簡潔的特點在人類與計算機的交互中具有良好的研究前景。在不遠(yuǎn)的未來,相信研究人員會進一步深入地研究手勢識別領(lǐng)域,將識別準(zhǔn)確率提高,加快手勢的識別速度,擴展其手勢庫,并實現(xiàn)更高效更靈活的發(fā)展。
圖10 多手識別結(jié)果