手势跟踪与识别
手勢跟蹤與識別
摘要
對于人機交互系統中的手勢識別問題,本文實現了一種基于膚色分割和模板匹配的人手檢測的方法,以及在單攝像頭條件下進行靜態手勢識別的方法。首先是用膚色分割和模板匹配的方法進行人手檢測,然后把檢測結果作為Camshift算法跟蹤的一個重要目標進行跟蹤。然后通過擬合手勢圖的外接多邊形,找出其對應的手勢缺陷圖,并建立手勢與手勢缺陷圖的一一映射,利用手勢缺陷圖的特征來匹配和識別不同的手勢。實驗表明,該方法能夠在簡單環境中完成人手的檢測與跟蹤,并且實現靜態手勢識別,為進一步開發高效的人機交互系統奠定了基礎。
關鍵詞:人手檢測;人手跟蹤;手勢缺陷圖;手勢識別
?
隨著科學技術的不斷發展,人機交互已經成為人們生活中的重要部分。人機交互有著許多豐富的表現形式,常見的有鼠標、鍵盤、觸摸屏、麥克風等。傳統的人機交互有著自身的局限性,已經無法滿足人們的需要,進而需要開發出更加新穎和方便的人機交互方式。手是人體中使用得十分頻繁的部位,手勢具有表現方式簡單,表達內容豐富,具有生動、形象和直觀的特點,自然地成為一種人機交互方式的研究方向。
然而,正因為手勢的多義性、多樣性以及時空差異性,使得手勢識別也面臨著巨大的挑戰。手勢模式是一類復雜多變的模式,手勢識別的效果容易受到膚色、光照、附屬物和手勢多樣性的影響[1],這些問題很難同時解決,所以對于手勢識別的研究往往針對某個具體的應用場景而給出具體的解決方案。
1 手勢識別的關鍵技術
?????? 在人機交互系統中,手勢的跟蹤與識別應該滿足以下幾個要求:①實時性好,避免對高維度特征矢量的計算,數據量大的數組處理以及復雜的搜索過程;②足夠的魯棒性。不受識別對象旋轉、平移和比例改變以及攝像頭視角改變的影響;③手勢跟蹤的連續性和自動初始化,能夠在跟蹤失敗后自動恢復跟蹤,盡量減少人的干預[2]。
手勢無論是靜態或動態,其實現時首先需進行圖像的獲取、手的檢測和分割、手勢的分析,然后進行靜態或動態的手勢識別。具體流程如圖1所示。
轉存失敗重新上傳取消
圖1 手勢識別流程
對于手勢分割和手勢識別這兩個重要步驟,目前常用的一些方法[3]總結如下。
1.1 手勢分割
手勢分割的根本目的就是對前景手勢區域和背景區域進行區分,并將手勢區域從圖像中分割出來,從而為后續的手勢特征提取和手勢分類提供保證。因此,手勢分割是整個靜態手勢識別的基礎,其分割質量的好壞會對最終識別的結果產生直接影響。基于手勢目標的顏色、運動、紋理、邊緣、亮度等信息[4],可以較為精確的分割出手勢。
基于膚色的手勢分割? 膚色是人的手勢最具代表性的特征之一,而基于膚色檢測的手勢分割也是目前最為常見的手勢分割方法。由于基于膚色的方法主要對手勢的輪廓、角度、大小、位置等變化并不敏感,同時,其算法復雜度普遍較低,因而具有良好的實用性。根據膚色建模方法的不同,基于膚色的手勢分割方法主要分為兩種類型,即統計膚色模型方法和物理膚色模型方法。
基于運動信息的手勢分割? 對于動態目標的分割而言,運動檢測是一種常見的方法。運動檢測的基本思路就是在二維的動態視頻序列中,結合過去時刻的圖像信息,來完成當前時刻運動目標的定位和提取。目前常見的基于運動信息的手勢分割方法主要有三類,即幀間差分法、背景減除法、光流法等。幀間差分法的基本思想就是選取視頻序列中相鄰的若干幀,并進行差分運算,然后根據一定的閾值來將運動目標與背景分離,從而實現對運動目標的提取。背景減除法的基本思想與幀間差分法是類似的,首先根據視頻序列對背景進行建模,然后通過對當前時刻的圖像與背景模型進行差分運算,最后根據一定的閾值來將運動目標與背景分離,從而實現對運動目標的提取。基于光流法的目標分割方法一般通過光流場來估計視頻序列中像素在時域和空域中的變化,從而構建出目標的運動模型,進而得到其運動的方向、速度等信息。
基于輪廓信息的手勢分割? 輪廓與邊緣是手勢分割的一項重要特征。基于輪廓信息的目標分割方法為手勢分割帶來了一個新的突破點。目前常見的基于輪廓信息的手勢分割方法主要有三類,包括邊緣檢測算子、模板匹配、活動輪廓模型等。傳統的提取目標輪廓的方法是使用邊緣檢測算子來對圖像中的邊緣進行檢測,進而確定手勢的輪廓。模板匹配作為一種經典的目標定位方法,也在手勢分割領域中得到過一定程度的應用。模板匹配本質上就是將預設置的模板放在圖像的一個點上,然后計算模板此時與圖像的匹配程度,然后遍歷整幅圖像并重復該過程,從而找到最佳匹配點。
1.2 手勢識別
手勢識別主要有模板匹配、神經網絡和隱馬爾科夫模型三種方法[5]。模板匹配法主要根據手勢的幾何特征,即手勢的邊緣和手勢區域特征,自動提取每一幀特征圖像與模板庫匹配后識別手勢,多用于靜態手勢識別。神經網絡在靜態手勢的識別中應用較多,其特點為抗干擾、自組織、自學習和抗噪聲能力強,可處理不完整的模式并進行模式推廣,但對時間序列的處理能力不強,因此在靜態手勢的識別中使用較多,不用于動態手勢的識別。隱馬爾可夫模型(Hidden Markov Model,HMM)是一種統計分析模型,能非常細致的描述手勢信號的時空變化,適用于動態手勢的識別。諸多手語識別系統均采用HMM 作為識別技術。HMM拓撲結構具有一般性,使得對手語信號的分析過于復雜,計算量過大,速度過慢,故而大多采用離散HMM。
本文主要實現靜態手勢的識別,即單幀圖像里手勢表達的意思,而不對前后幀的手勢作進一步的解釋。本文將手勢跟蹤的結果與手勢的識別這兩個獨立的步驟聯系起來,將跟蹤得到的手勢預測的區域設為下一幀圖像識別的感興趣區域(region of interesting,ROI);基于Camshift算法,根據前一幀手勢在圖像中的位置和顏色信息,對手勢在下一幀圖片所處的位置進行預測,主要是基于顏色的統計信息。它不僅運算量小,而且跟蹤和預測的效果也非常好。通過對ROI區域進行手勢的分割和識別,可以排除背景圖像對手勢的部分干擾,識別過程的計算量也減小很多。由于每種手勢的邊線都有不同特征。這些不同的特征能很好地反映在手勢的外接多邊形上,因此,可以對不同手勢和外接多邊形建立一個一一映射的關系;通過建立不同手勢的外接多邊形特征庫,對分割出來的手勢作多邊形擬合,只要將提取出來的多邊形與特征庫中的外接多邊形進行匹配就能判斷出手勢的類型。
2 手勢分割與跟蹤
2.1 手勢分割
為了實現視頻中的人手跟蹤,首先要定位視頻幀中的人手區域,也就是要進行手勢分割。人手區域的檢測可以采用膚色檢測的方法來實現,但是,視頻中可能存在人臉及其他與膚色類似的物體,會干擾人手區域定位。因此,本文采用基于膚色分割和模板匹配的人手檢測方法,首先根據膚色檢測模型檢測出膚色區域,然后用預先準備好的人手模板對分割出的膚色區域作匹配,排除非人手區域,從而實現人手檢測[6]。
由于 RGB 色彩空間中,三個顏色分量都含有亮度信息,膚色模型容易受到光照變化干擾,為了更好地提取人手的膚色特征,需要將圖像幀從RGB空間轉換到其他空間,例如:HSV空間。HSV空間是RGB空間的非線性變換,它將相關性很強的R、G、B分量轉換成相關性較弱的H、S、V分量,只需要通過H分量的閾值分割,就可以完成膚色區域的定位。
將人手圖像從RGB色彩空間轉換到HSV色彩空間的效果如圖2所示。可以看出,經過色彩空間轉換后,人手區域和背景就很容易區分開了。設定H、S閾值將HSV空間圖像轉換成二值圖像。
轉存失敗重新上傳取消轉存失敗重新上傳取消
圖2 圖像從 RGB 色彩空間轉換到 HSV 色彩空間的效果
由于人手膚色和臉部膚色或其他背景具有較大的相似之處,直接有上面的方法確定的膚色部分可能會存在其他非人手部分。為進一步縮小后續搜索范圍,可以進行去噪處理,然后將面積較大的膚色區域都列為候選的人手區域。
在進行圖像目標檢測與識別的過程中,容易受各種各樣的噪聲干擾,使圖像出現質量退化。手勢在整幅圖像中的大小、位置以及質量容易受焦距大小、距離、遠近等方面的影響。由于各攝像機內部處理機制不同,采集的圖像在計算機中的顯示方法也不同。而且,受噪聲干擾,數字成像可能被強度隨機變化所破壞。一些常見的噪聲模型與真實的噪聲類似,如:椒鹽、脈沖和高斯噪聲。這些噪聲都可能會改變已處理數據的分析,或可能導致處理手勢識別時出現各種問題。因此,圖像預處理這項工作在保證采集圖像的質量、格式以及手勢大小的一致性上就變得十分重要。經過圖像預處理有效地減少噪聲而形成較高質量圖像,有利于進一步的圖像操作。圖像預處理主要通過彩色顏色空間的轉換,圖像濾波和圖像縮放處理來完成。
轉存失敗重新上傳取消
圖3 最終得出的人手二值化圖像
2.2 手勢跟蹤
得到人手區域的候選區后就可以利用準備好的人手模板對候選區域進行匹配。模板匹配是為了在圖像中識別出已知形狀特征的目標物體,使用目標物體的形狀特征模板與圖像進行匹配,在規定的相應準則下識別出目標物體。將模板圖在被搜圖上滑動,通過比較模板圖與子圖的相似度來確定目標位置。檢測出人手的位置后就可以使用Camshift算法來跟蹤人手。
Camshift算法利用目標的顏色直方圖模型將圖像轉換為顏色概率分布圖,初始化一個搜索窗的大小和位置,并根據上一幀得到的結果自適應調整搜索窗口的位置和大小,從而定位出當前圖像中目標的中心位置,有效地解決了跟蹤目標被遮擋或變形的問題,對系統的要求不高,時間復雜度也不高,在簡單背景條件下有較好的跟蹤效果。其搜索步驟[7]為:
(1)將整個圖像作為搜索區域;
(2)把檢測出的人手作為初始化搜索窗口;
(3)計算檢測出的人手區域的顏色概率分布圖;
(4)調用 Mean Shift 算法,獲取搜索窗口新的尺寸以及位置;
(5)在下一幀視頻圖像中,用(3)中獲取的值初始化搜索窗的尺寸和位置;
轉存失敗重新上傳取消轉存失敗重新上傳取消轉存失敗重新上傳取消
(6)跳到(3)繼續運行,直到收斂。
圖4 跟蹤效果
從跟蹤效果圖可見,本文提出的方法在較為復雜的環境中可以準確的對人手進行跟蹤,并且不會被人臉或其它和人手膚色相近的區域干擾。
3 靜態手勢識別
通過靜態手勢的識別,使系統能夠對被跟蹤對象有一個基本的理解。靜態手勢的識別是基于輪廓特征的識別,對分割出來的人手作邊緣檢測,得到手勢完整的輪廓邊緣。通過前面的方法能夠得到圖像的手勢分割的二值圖。接著使用一種查找外接邊的搜索方法,通過對手勢輪廓按輪廓點順序進行定長掃描,將手勢輪廓線的外接多邊形擬合出來,再根據幾何特征,進行模板匹配,最終完成靜態手勢識別。
本文使用手勢輪廓及手勢凸缺陷檢測指尖。手勢凸缺陷定義為手勢凸包與手勢外輪廓的差,如圖5所示,由虛線組成的多邊形表示該輪廓的凸包,灰色多邊形表示人手的外輪廓,黑色雙向箭頭表示該凸缺陷中距離凸包的最大距離,P1轉存失敗重新上傳取消 點表示該凸缺陷開始的輪廓點,P2轉存失敗重新上傳取消 點表示該凸缺陷結束的輪廓點,P3轉存失敗重新上傳取消 點表示該凸缺陷中距離凸包最遠的輪廓點。有圖可知凸缺陷與手勢指尖息息相關,能有效地表達手勢。進一步觀察可知,指尖一定在手勢外輪廓附近;與凸包的最大距離滿足一定長度的凸缺陷才是指尖出現的凸缺陷候選集,圖中a凸缺陷是滿足要求的,而b凸缺陷是不滿足要求的;指尖靠近凸缺陷開始及結束的輪廓點,可以將第一凸缺陷開始的輪廓點以及最后一個凸缺陷結束的輪廓點分別作為第一個和最后一個指尖;除了第一個以及最后一個凸缺陷外,以當前凸缺陷結束的輪廓點與下一凸缺陷開始的輪廓點的平均作為指尖坐標。由此,可以得到指尖的個數以及位置。
轉存失敗重新上傳取消
圖5 手勢缺陷圖
為了得到手勢輪廓缺陷圖,需要先對手勢輪廓進行多邊形擬合,得到它的外接多邊形。本文根據手勢輪廓上相鄰兩點間的凹凸性來進行擬合,通過一次遍歷輪廓上的點,對以下方程進行判定,將適合的點剔除,剩下的點即為外接多邊形的候選定點:
by=next y-cur y#1轉存失敗重新上傳取消
ay ×bx-ax×by#2轉存失敗重新上傳取消
ax=pcur.x-pprev.x,ay=pcur.y-pprev.y轉存失敗重新上傳取消
bx=pnext.x-pcur.x,by=pnext.y-pcur.y轉存失敗重新上傳取消
其中,pcur為當前遍歷的輪廓線上的點,pprev、pnext分別表示當前點的前一個點和后一個點,ax、ay分別為當前點和前一點的x和y坐標值差,bx、by分別為當前點和后一點指尖的x和y坐標值差。
基于輪廓線凹凸行的擬合算法流程如下:
(1)將所有的輪廓線上的點按x坐標值大小排序,并找出所有的點中y坐標的最大最小值maxY和minY。
(2)將排序后的輪廓點劃分為四部分:首先按照y坐標將輪廓線分為上下兩個部分,將上半部分以maxY所在的x坐標(即為Xmaxy)劃分為兩個部分,分別記為topLeft(左上)和topRight(右上);將下半部分以minY所在的x坐標(記為Xminy)劃分為兩個部分,分別記為bottomLeft(左下)和bottomRight(右下)。
(3)分別對前一步劃分的四個部分進行遍歷:對區域topLeft將滿足式1<0轉存失敗重新上傳取消 ,式2>0轉存失敗重新上傳取消 的點剔除;對區域topRight將滿足式1<0轉存失敗重新上傳取消 ,式2<0轉存失敗重新上傳取消 的點剔除;對區域bottomLeft將式1>0轉存失敗重新上傳取消 ,式2>0轉存失敗重新上傳取消 的點剔除;對區域bottomRight將滿足式1>0轉存失敗重新上傳取消 ,式2>0轉存失敗重新上傳取消 的點剔除。剔除后剩下的點即為手勢輪廓線外接多邊形的頂點。
手勢缺陷圖的谷底以及谷底深度的求解就是建立在擬合外接多邊形的基礎之上的,還需要對外接多邊形的每一條邊所對應的輪廓線再進行一次遍歷,并將滿足以下方程的最大值求出即是該邊所對應的谷底:
dx=cur.x=hullcur.x#3轉存失敗重新上傳取消
dy=cur.y-hullcur.y#4轉存失敗重新上傳取消
depth=dy0×dx+dx0×dy×scale#5轉存失敗重新上傳取消
其中,scale為單位化量值,hull_cur和hull_next分別為外接多邊形當前遍歷的邊和下一條邊,dx0、dy0分別為外接多邊形當前邊的x和y坐標的差值,dx、dy分別為當前遍歷的輪廓線上的點與hull_cur點之間x和y坐標的差值,depth為遍歷點與對應邊之間的距離,它的最大值即為該邊對應的谷底深度,相應的點位谷底。
有了手勢的幾何特征之后,只要將提取出來的多邊形與特征庫中的外接多邊形進行匹配就能判斷出手勢的類型。整個靜態手勢識別過程如圖6所示。
轉存失敗重新上傳取消
圖6 靜態手勢識別流程
4 實驗與分析
本文在windows系統下使用python3 + OpenCV實現了手勢識別。實驗環境為實驗室,可以檢驗本文算法在普通光照下的準確性。本文共實驗了五種手勢:A為握拳、B為食指伸長、C為V型手勢、D為三指伸開、E為五指張開。
轉存失敗重新上傳取消
圖7 實驗過程記錄
轉存失敗重新上傳取消
圖8 手勢及其對應的幾何特征(依次為握手、食指伸開、V型手勢、三指伸開、五指伸開)
進一步地,為了測試本文算法的有效性,對五種手勢分別測試了100次,記錄了對應的識別準確率,如下表所示。可見整體上有一定的識別效果,但是識別的準確率不是非常高,特別是V型手勢和三指伸開這兩種情況。可見本文目前所使用的算法還有進一步優化的需要。
表1 手勢識別結果
| 手勢 | 測試次數 | 正確率 |
| A | 100 | 76% |
| B | 100 | 84% |
| C | 100 | 65% |
| D | 100 | 71% |
| E | 100 | 83% |
由此可見,本文對于手勢識別有了初步的成效,能夠進行靜態手勢識別。進一步地可以考慮具體的人機交互應用場景,如開發一個基于手勢的拼圖游戲,通過變換手勢來完成拼圖。A、E手型分別對應抓取與松開。手勢為握拳狀態時,手對應的圖片塊被選中(類似鼠標左鍵按下),此時可以拖動圖片,選定位置后可以換成手勢E,圖片被松開(類似鼠標左鍵松開),B、C、D手勢分別表示將圖片放大、縮小和旋轉。
5 結束語
本文從基于手勢的人機交互系統設計出發,實現了一種基于手勢幾何特征的手勢識別。在進行手勢跟蹤是,本文使用了基于膚色和模板匹配的改進的 Camshift 人手跟蹤算法,以膚色概率分布圖中的模板匹配是否成功作為算法迭代的終止條件,解決了場景中存在大面積類膚色干擾時跟蹤失誤和定位區域不完整的問題。在進行靜態手勢識別時,使用手勢輪廓缺陷圖作為手勢識別的特征結構,不僅大大減少了計算量,由于缺陷圖是從整體結構刻畫手勢的結構,所以它還增強了手勢識別的魯棒性。實驗表明,該方法簡單有效,為進一步開發高效的人機交互系統奠定了基礎。
參考文獻
[1] 趙小川, 趙繼鵬, 范炳遠, et al. 手勢識別技術研究綜述與應用展望[C]// 第十一屆全國信號和智能信息處理與應用學術會議專刊. 2017.
[2] 徐成, 馬翌倫, 劉彥. 一種基于嵌入式系統實時交互的手勢識別方法[J]. 計算機應用研究, 2011, 28(7):2782-2785.
[3] 武霞, 張崎, 許艷旭. 手勢識別研究發展現狀綜述[J]. 電子科技, 2013, 26(6):171.
[4] 潘丹丹, 柳燦雄, 聶建華. 復雜背景下的手勢分割及掌心檢測[J]. 工業控制計算機, 2016, 29(1):109-110.
[5] 馮志全, 蔣彥. 手勢識別研究綜述[J]. 濟南大學學報(自然科學版), 2013, 27(4).
[6] 余鵬飛, 張海科, 李濤. 基于Camshift算法的人手檢測與跟蹤定位方法研究[J]. 信息工程, 2013(5):99-103.
[7] Exner D, Bruns E, Kurz D, et al. Fast and robust CAMShift tracking[C]// Computer Vision & Pattern Recognition Workshops. IEEE, 2010.
?
?
總結
- 上一篇: 9017R单节锂电池线性充电管理 IC
- 下一篇: 个人博客,草根的成长之旅