馬駿 梁惠惠
(南京大學金陵學院 信息科學與工程學院 江蘇省南京市 210089)
隨著計算機視覺技術的不斷發(fā)展,特別是增強現實、輔助駕駛等技術的飛速發(fā)展,人機交互的需求在我們的日常生活中日益增加。尤其在老齡化社會中,老年人因為身體機能退化,操作不便,他們更需要各種快捷有效的人機交互輔助技術支撐對各類機器的控制。這些人機交互技術主要包括手勢識別、人臉識別、體態(tài)的識別與跟蹤等。其中,基于計算機視覺的手勢識別技術因其應用的廣泛性成為了許多科研人員關注的焦點,而以手勢識別為基礎的“隔空操作”由于其方便、自然等優(yōu)點而成為眾多交互方法的研究熱點之一。
本設計在預定義手勢的基礎上,設計實現通過識別不同的手勢進行隔空操作的人機交互系統(tǒng)?;谟嬎銠C視覺的手勢識別技術以人為交互的中心,減少了對計算機底層工作的依賴,極大地提高了人機交互的體驗感和舒適度。
手勢識別不僅僅是指手部的識別,它也可以是身體各個部位的識別,包括四肢、人臉等。本文主要研究手部的識別?;谟嬎銠C視覺的動態(tài)手勢識別主要包括四個步驟:手勢獲取、手勢檢測與分割、特征提取和手勢分類。
手勢識別是通過一系列算法對預先定義的不同手勢進行識別從而達到所要表達的目的。前蘇聯(lián)心理學家和教育家Pavlovic對人類的手勢做了深一步的研究,并從常用功能的角度對手勢進行了分類,如圖1所示。
圖1:手勢分類
手勢識別有不同的分類標準:
第一種,根據手勢識別的特征提取算法不同進行分類。手勢識別算法有模式匹配識別算法、神經網絡識別算法、隱馬爾可夫模型識別算法等。模式匹配識別算法的基本思想是把待匹配模板和參考模板進行比較,在匹配之前先定義一個相似度閾值,然后進行模型訓練,最后再匹配;神經網絡識別算法的基本思想是通過機器學習和深度學習所有的手勢圖片進行訓練模擬出人腦的記憶辨別功能,從而實現像人腦神經網絡一樣的識別技術;隱馬爾可夫模型識別算法的基本思想是基于馬爾科夫鏈的模型識別,該模型是一種信號統(tǒng)計模型,它在語音信號處理中具有廣泛的應用場景。
第二種,根據采集手勢圖像過程中的設備進行分類,具體可以分為基于數據手套的手勢識別和基于單目或多目攝像頭的手勢識別。早期的手勢識別大多采用數據手套等物理設備采集手部數據。隨著科學技術的發(fā)展,逐漸擺脫數據手套,轉而使用攝像頭采集。
以上僅僅是分類標準的一部分,隨著技術的不斷完善,手勢識別的方法會越來越多,分類標準也會越來越豐富,在此不再贅述。
手勢識別首要做的是手勢圖像及數據的采集,然后依據一定的模型對采集的圖像和數據進行建模,對每一種手勢建立基礎模型,以便后續(xù)的對比應用。建模的有效性將對后期手勢匹配的精確度和識別率有著直接的影響。
基于3D的手勢建模和基于手勢表觀的手勢建模是目前常用的兩類手勢建模方法,如圖2所示。
圖2:手勢模型分類
基于3D的手勢模型主要是考慮了三維角度下的手與手臂的動作和姿態(tài),通過三維角度可以分析判斷出手部信息,這種方法適用于絕大多數的手勢建模,但是由于是三維的,計算機分析判斷頗為復雜和困難,對計算機的硬件要求也很高?;谑謩萃庥^的手勢模型是建立在二維坐標下的建模方法,主要是通過攝像頭采集二維圖像來分析手勢表象的特征值從而給出初步的模型。這種建模方法只適用于交流類型的手勢,也就是相對簡單的手勢表達,因此計算復雜度也會低很多,具備較好的實時性和識別率,所以,現在絕大多數手勢識別都是采用基于手勢外觀的手勢模型。
本系統(tǒng)的主要功能為:通過攝像頭實時捕獲手勢圖像,在采集過程中對每一幀畫面同步進行圖像預處理,之后從預處理后的圖像中再提取手勢特征,最后根據手勢特征匹配預先定義好的手勢模板觸發(fā)相應的指令從而實現不同應用場景下的隔空操作。本系統(tǒng)共設計了三個交互應用,包括鼠標控制、播放器控制、全屏批注,實現了通過各種預先定義的手勢對計算機應用的控制與隔空操作。
本系統(tǒng)根據模塊化的設計思想設計出的系統(tǒng)架構圖如圖3所示。其中圖像預處理模塊和特征提取模塊是該系統(tǒng)的兩大核心模塊。
圖3:系統(tǒng)架構圖
2.2.1 圖像預處理
圖像預處理部分的核心是濾波處理和二值化處理。濾波處理是指在盡可能保證圖像細節(jié)特征的同時,有效地抑制目標圖像的噪聲。它是預處理過程不可或缺的環(huán)節(jié),其處理的效果直接影響了后續(xù)分割手勢區(qū)域的準確性以及對手勢區(qū)域細節(jié)分析和處理的有效性和可靠性。圖像二值化處理是將目標圖像轉換成黑白圖像,亦即將圖像上的像素點的灰度值設置為0或255,其中0代表黑色,255代表白色。具體做法是設定一個閾值作為分界線,對于目標圖像上的所有像素點,若其灰度值小于或等于閾值,則該像素被判定為屬于手勢所在區(qū)域,此時調整其灰度值為0,即黑色;否則,將這些像素點的灰度值調整為255,表示這些像素點屬于背景或者非手勢所在區(qū)域。二值化處理之后的圖像數據量會大幅度減少,從而節(jié)省計算機后續(xù)處理運算所需時間。轉換后的黑白圖像由于只保留主體區(qū)域而凸顯出目標輪廓,使得圖像對比分析變得簡單高效,這也為后續(xù)的手勢特征提取做了鋪墊。
設原始圖像函數為f(x, y),按照上述規(guī)則可以得出輸出函數g(x, y),如圖4所示。
圖4:二值化輸出函數
其中,threshold為閾值,0和255對應的色彩是黑和白。該函數轉換中,最重要的就是閾值的選取,好的閾值既可以做到盡可能的保留圖像信息,又可以將背景和主體內容區(qū)別開來。
通過對原始視頻圖像進行灰度處理和二值化處理,系統(tǒng)對手勢識別的速度和準確度有了很大的提升,同時也提高了系統(tǒng)對不同背景環(huán)境的抗干擾性,降低了外部因素對圖像信息的影響。
本系統(tǒng)基于OpenCV實現手勢識別。利用OpenCV類庫中的cvtColor或convert庫函數實現每一幀圖像的灰度化處理。其中cvtColor需要設置對應的參數才可實現,而convert只需要將參數設置為‘L’即可轉換為灰色圖像。具體實現函數如下:gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) 和Img = img.convert(‘L’),實現的效果如圖5所示。
圖5:圖像灰度處理
系統(tǒng)在二值化處理部分采用的是基于矩陣的圖像分割算法,實現將手部輪廓從采集的圖像中分割出來,該手勢分割結果將作為特征提取部分的算法輸入。
閾值的大小影響著是否能夠將手部輪廓跟背景信息較好地分割開來。不斷改變閾值大小從而盡可能的分割出手部的完整圖像。在該系統(tǒng)中,通過不斷的調整閾值參數找到了最佳的閾值是175,此時可以得到一個效果較好的手部二值化圖像分割效果,如圖6所示。
圖6:圖像二值化處理
如上的閾值參數只適合靜態(tài)的圖片處理,并不適用于實時視頻類的圖像二值化處理?;诖藛栴},采用控制臺形式在視頻過程中動態(tài)調整參數。起初只設置了一個閾值進行圖像二值化處理,發(fā)現存在一些問題,比如若人的手部和背景顏色有著類似漸變色的效果時,會導致單一的閾值失效,具體表現為手部和背景無法準確分割,甚至會出現分割錯誤。因此做出了進一步優(yōu)化方案,采用最大閾值和最小閾值,設置閾值的上下限,將0~255劃分為三個區(qū)間,從而進行更加精細化的圖像分割。改進后的雙閾值二值化輸出函數g(x, y)如圖7所示,控制臺界面如圖8所示。
圖7:改進后的雙閾值二值化輸出函數
圖8:二值化處理的控制臺界面
系統(tǒng)初始雙閾值的初步處理圖和圖像二值化最終處理效果如圖9所示。
圖9:改進后的圖像二值化處理
2.2.2 特征提取
在人機交互過程中,計算機并不具備與人腦一樣的思考能力,這就需要我們在設計交互系統(tǒng)時事先定義和闡述所有可能的手勢。如下是事先定義的部分手勢模板,如圖10所示。
圖10:部分手勢模板
本系統(tǒng)所采用的特征提取算法基于二維矩陣的手勢確定算法,借鑒模式匹配識別算法的思想,將攝像頭采集圖像中的關鍵數據抽象成二維矩陣,然后對矩陣中所有特征點位坐標分析,最后再根據預先定義的手勢模板進行手勢的識別匹配。
該算法的實現過程如下。
(1)確定輪廓
根據攝像頭掃描的視頻數據,調用OpenCV庫中的mediapipe模塊進行實時檢測,檢測到手部位置之后,進行圖像分割,確定手的輪廓,如圖11所示。
圖11:經圖像二值化處理提取后的手部輪廓圖
(2)計算角度
獲取手部輪廓圖中所有點的位置坐標。根據獲得的所有點位坐標,計算特征二維向量的角度。這里以大拇指二維向量的角度計算為例,先獲取點位0和2所組成的向量坐標表示形式以及3和4所組成的向量坐標表示形式(點位數字全部采用OpenCV所規(guī)定的點位數字),接下來通過坐標信息計算出兩個向量所組成的角度大小,并轉換為180度以內的角度,如圖12所標出的向量角度α所示。
圖12:向量角度示意圖
(3)判斷手勢
根據每個手指計算出的角度值,結合組成相應手勢應該具備的手指之間的角度范圍,分情況判定手勢所代表的數字,比如手勢所代表數字為1時,食指的角度小于30度,其他四個手指角度都大于90度。
由于此系統(tǒng)屬于無感式系統(tǒng),亦即啟動程序后的所有界面顯示均可置于后臺運行,因此,本系統(tǒng)的人機交互設計也較為簡單。為了方便用戶觀看攝像頭所采集到的視頻內容和手勢識別結果,設計了如下四個人機交互界面:
(1)圖像二值化的閾值控制界面。如圖13所示。
圖13:二值化處理控制臺界面
(2)圖像預處理初步界面。如圖14所示。
圖14:圖像預處理初步界面
(3)圖像預處理最終界面。如圖15所示。
圖15:圖像預處理最終界面
(4) 隔空操作的指令顯示界面。顯示每一種手勢識別之后所對應的電腦操作指令是什么,比如顯示向下滑動,向上滑動,音量大小等。如圖16所示。
圖16:隔空操作的指令顯示界面
2.4.1 鼠標控制
鼠標控制隔空操作是由某一特定手勢對鼠標的日常操作進行簡單的界面控制,即將特定的手勢轉換為鼠標移動及鼠標滾輪的滑動,并將某一靜態(tài)手勢轉換為鼠標左鍵或右鍵的點擊動作。該操作指令轉換的主要過程是:首先識別用于鼠標控制的手勢,然后取某個手部點位的位置為基準坐標,設定一個移動范圍閾值scale,此閾值主要控制手勢移動的幅度,如果幅度過大,則判定此手勢移動無效。這樣可以減少鼠標移動的幅度,減少錯誤移動的次數。對于鼠標左鍵和右鍵的操作,主要是通過手勢懸停之后識別特定的兩種手勢然后進行點擊操作。
2.4.2 播放器控制
播放器控制的隔空操作是通過特定的手勢特征提取,識別出場景是播放器控制,進而實現包括視頻播放和暫停、視頻快進和快退等常見的簡單播放器指令以及音量控制。該操作指令轉換的主要過程是:對于視頻播放和暫停,模擬出按壓操作,在按壓過程中,若手部掌心距離攝像頭小于等于35cm時判定為暫停播放,再次按壓則繼續(xù)播放;對于視頻快進和快退,首先識別出手勢表達數字為3,然后判斷若保持該手勢向左滑動為快退,向右滑動則為快進;對于全局音量控制操作,觸發(fā)該操作的前提是手部除拇指和食指外,其他手指處于蜷縮狀態(tài),這樣通過拇指和食指之間的距離來調節(jié)電腦音量。
2.4.3 全屏批注
全屏批注的隔空操作是通過特定的手勢特征提取,識別出場景是全屏批注,即用戶希望在全屏范圍內進行勾圈畫點等。該操作指令轉換的主要過程是:首先識別出用戶目前的操作意圖是全屏批注功能,然后再識別用戶手勢所表達的數字含義是什么。此時手勢總共分為三種情況:第一種手勢表達數字為1,表示可以在此位置開始批注,直到用戶手勢變換為其他;第二種手勢表達數字為2,表示用戶想要移動鼠標位置,即開始批注的位置;第三種手勢表達數字為3,表示用戶想要撤銷上一次所作的批注。需要關注是最開始的識別場景的手勢,由于全屏批注的場景和播放器控制的場景均用到了手勢數字3,故為了防止沖突,識別場景的時候要確保手部場景識別正確。為了提高場景的識別準確度,在代碼編寫中增加了判定機制,盡可能提取到進入兩種場景時的手勢的不同特征,從而降低場景識別錯誤率。判定機制主要是以電腦當前界面為判定標準,如果界面在播放視頻等則認為是播放器控制場景,其余的情況均認為是全屏批注場景。由于設置手勢過程中,只有播放器控制和全屏批注有手勢沖突,因此只需要判定這兩個場景即可。
該系統(tǒng)實現了鼠標控制、播放器控制、全屏批注等應用場景下的隔空操作。
在系統(tǒng)的測試過程中,重點測試如下指標:
(1)識別準確率:攝像頭對多個手勢相近的樣本采樣后找出正確手勢的命中率,即系統(tǒng)對攝像頭所采集手勢動作的分析準確度。
(2)識別速率:計算機根據攝像頭所采集到的手勢動作開始,到識別成功并反饋前端界面顯示的時間差。
(3)環(huán)境適配性:攝像頭在采集手勢動作時背景環(huán)境會有所不同,該指標主要考察在不同的背景環(huán)境下系統(tǒng)的識別準確率和識別速率與常規(guī)環(huán)境下識別準確率和識別速率的差異。背景環(huán)境的不同主要包括:背景顏色、光照強度以及手部與攝像頭的距離,另外攝像頭的參數也對采集圖像有著一定程度的影響。該項指標驗證的是系統(tǒng)的穩(wěn)定性,因此圖像預處理尤其是二值化處理顯得尤為重要。
(4)平均識別準確率:該指標由每個手勢的識別準確率計算所得,目的是用來體現系統(tǒng)對于所有手勢識別的準確性和準確率。
測試所得的各項數據如表1和表2所示。
表1:單一背景測試數據
表2:復雜背景測試結果
綜合考量以上數據并依據單一背景和復雜背景下不同手勢識別的準確率可計算得出相應的平均識別準確率,即單一背景下平均識別準確率可達93.4%,復雜背景下平均識別準確率下降至89.0%。因此,本系統(tǒng)對手勢識別的識別效率達到了85%以上,對手勢的識別速率也較快。但是系統(tǒng)依然存在優(yōu)化提升空間,如二值化處理的參數閾值無法根據不同環(huán)境進行自適應調整;在復雜背景下對手勢的識別準確率和識別速率仍有待提升。后續(xù)也會考慮進一步改進算法。