摘 要:針對使用計算機(jī)視覺技術(shù)進(jìn)行手勢識別易受環(huán)境影響的問題,提出了一種基于kinect的骨骼系統(tǒng)的手勢識別方案。采用Kinect進(jìn)行深度數(shù)據(jù)采集,建立深度圖像,提取人體輪廓,利用骨骼系統(tǒng)確定腕部坐標(biāo)及灰度值后,提出根據(jù)腕部坐標(biāo)采用最近鄰法則和閾值法提取手勢區(qū)域,可有效去除非手勢目標(biāo),對平滑后的手勢輪廓用不變矩對4種手勢進(jìn)行了識別。實驗結(jié)果表明,該方法能有效的識別靜態(tài)手勢,且在不同光照和復(fù)雜背景的條件下,具有很強(qiáng)的健壯性。
關(guān)鍵詞:Kinect;深度;骨骼系統(tǒng);不變矩
中圖分類號:TP391.41
一直以來,手勢作為通用的肢體語言,在信息交流中扮演著重要的角色。人機(jī)交流中使用手勢,可以使交互直觀化、自然化。在手勢識別的早期階段,人們常利用光電傳感器等設(shè)備采集手部數(shù)據(jù)來進(jìn)行手勢提取,成本高,約束條件多,不便利。隨著計算機(jī)技術(shù)和數(shù)字圖像處理技術(shù)的發(fā)展,基于計算機(jī)視覺的捕捉技術(shù)逐步變成手勢識別的主流[1]。在基于計算機(jī)視覺的手勢識別系統(tǒng)中,通過攝像機(jī)組件對采集人的手部動作,與傳統(tǒng)技術(shù)相比,更加便宜、便利。但是傳統(tǒng)的手勢識別算法通常使用膚色模型來實現(xiàn)手勢識別,易受照度變化、復(fù)雜背景、硬件特性的影響,識別準(zhǔn)確性不高[2],針對這種情況,本文以Kinect攝像頭獲取的深度圖像數(shù)據(jù)為基礎(chǔ),提出基于腕部坐標(biāo)的手勢識別算法,按照Hu矩匹配原則可對4種手勢進(jìn)行有效識別,在不同光照條件和復(fù)雜背景下均可達(dá)到較高的識別準(zhǔn)確率,算法魯棒性強(qiáng),可使基于機(jī)器視覺的人機(jī)交互的更加可靠和流暢。
Kinect是一款性價比較高的圖像采集裝置,其由紅外發(fā)射器、紅外CMOS和彩色CMOS以及其他部件構(gòu)成,使用結(jié)構(gòu)光技術(shù)主動獲取深度信息,可以釆集80x60、320x240、640x480像素三種分辨率、16位的深度幀數(shù)據(jù)[3],其幀速最高可達(dá)30幀/秒,深度值的精度約為3-30毫米。內(nèi)嵌圖像處理器芯片PS1080 Soc,不需要花費大量的硬件資源進(jìn)行運算,可以以較低的配置達(dá)到實時性的手勢數(shù)據(jù)采集要求。
Kinect設(shè)備的配置和訪問是通過Kinect SDK實現(xiàn)的。Kinect SDK由Kinect驅(qū)動、攝像頭棧、USBAudio棧和NUI API四個部分組成。NUI API是其重要核心組件,它提供了本文所使用的深度幀數(shù)據(jù)流信息和骨骼關(guān)節(jié)點信息的訪問接口。
1 手勢識別軟件結(jié)構(gòu)
基于Kinect的骨骼系統(tǒng)來進(jìn)行手勢識別的軟件結(jié)構(gòu)如圖1所示。首先利用Kinect攝像頭記錄人體手勢,經(jīng)Kinect內(nèi)部處理獲得目標(biāo)場景的深度幀數(shù)據(jù),將其轉(zhuǎn)換為灰度圖像,然后提取人體輪廓,通過骨骼系統(tǒng)采集的腕部數(shù)據(jù)輔助閾值分割獲得手勢圖像,再進(jìn)行圖像平滑等處理,最后進(jìn)行特征提取達(dá)到手勢識別的最終目的,實現(xiàn)了非接觸式的手勢識別[4]。
圖1 基于Kinect的手勢識別系統(tǒng)結(jié)構(gòu)
2 深度值的空間變換
Kinect的紅外攝像頭在獲取目標(biāo)圖像,對采集的圖像進(jìn)行一系列內(nèi)部處理后,產(chǎn)生16位的深度幀數(shù)據(jù)供開發(fā)者使用。在供用戶使用的16位深度幀數(shù)據(jù)中,系統(tǒng)使用了其中的高13位數(shù)據(jù)來表示像素點的深度值,最低3位為用戶索引占用,因此使用Kinect SDK提供給用戶的深度幀數(shù)據(jù)時須先對其進(jìn)行移位處理(原始的深度幀數(shù)據(jù)右移3位),以獲得深度空間各點的深度值,將其映射到灰度空間后可顯示深度圖像。
假設(shè)gmax和dm分別表示灰度空間和深度空間的最大值,di表示深度空間第i點的深度值,g(i)表示該點的相應(yīng)灰度值,由于當(dāng)物體離深度攝像頭太近時攝像頭會對距離誤判造成di<0,從而導(dǎo)致g(i)>gmax,本文提出用gk進(jìn)行修正,得到如下深度空間到灰度空間的轉(zhuǎn)換公式:
g(i)=f(di)=gmax-gmax×di/dm+gk (1)
圖2 RGB圖像與深度圖像
圖2中,左圖為現(xiàn)實場景的RGB圖像,右圖為場景相應(yīng)的深度圖像。對比兩圖可知:深度圖像中像素點灰度值不是表示物體相應(yīng)顏色而是代表目標(biāo)物與Kinect攝像頭的距離,且數(shù)值大小可以反映目標(biāo)物距離攝像頭的遠(yuǎn)近程度,目標(biāo)距攝像頭越近,顏色值愈趨于白色。
3 人體輪廓提取
由式(1)可知,不同物體深度值相等時會有相同灰度值,這會對手形提取造成干擾。本文利用Kinect提供的用戶索引實現(xiàn)人體輪廓與周圍物體分離,以消除大多數(shù)物體對手勢區(qū)域提取的影響。
Kinect對人體輪廓識別,是先在傳感器的附近區(qū)域掃描,根據(jù)人體的結(jié)構(gòu)特征獲得疑似人體區(qū)域[5],接著使用邊緣檢測、閥值處理、目標(biāo)特征點分類等方法,將人體從拍攝圖像中剝離出來,最后加上用戶索引,組成深度幀數(shù)據(jù)供開發(fā)者使用。已知深度幀數(shù)據(jù)后3位是用戶索引,取值范圍為0到6。數(shù)值為0時表示此像素點不屬于人體,在此用PlayerIndexBitmask變量獲得用戶索引數(shù)據(jù),將人體輪廓從場景中分離出來。
設(shè)由深度幀數(shù)據(jù)獲得灰度圖像尺寸為w×h,設(shè)灰度圖像第i點的坐標(biāo)為(xi,yi)則i=w×yi+xi,由公式(2)可獲得人體輪廓,如圖3所示。
(2)
g(i)和dp(i)分別為該點的灰度值和深度幀數(shù)據(jù)值。
圖3 人體輪廓圖
4 基于骨骼系統(tǒng)的手勢識別
4.1 根據(jù)骨骼系統(tǒng)獲取腕部坐標(biāo)
由于手腕點與深度攝像頭的距離并不固定,僅根據(jù)深度圖像難以對其精確的定位,在此使用骨骼追蹤系統(tǒng)對它進(jìn)行捕捉。
Kinect骨骼追蹤系統(tǒng)對景深圖像進(jìn)行技術(shù)處理,使用矩陣變換,機(jī)器學(xué)習(xí)等方式來確定骨骼點的坐標(biāo)[6]。SDK提供的骨骼跟蹤引擎可以給每位用戶提供全身共20個關(guān)節(jié)點在骨骼空間坐標(biāo)系的位置信息,可追蹤的關(guān)節(jié)點圖4所示:
圖4 骨骼關(guān)節(jié)點示意圖
在通常情況下,骨骼系統(tǒng)可以對視野內(nèi)的6個人體進(jìn)行捕捉,但只會選擇其中兩個用戶進(jìn)行全身骨骼數(shù)據(jù)追蹤,并且選擇過程有著很大的隨機(jī)性。本文通過SDK提供SkeletonPoint類型的Position對象獲取人體骨骼中間點坐標(biāo)(xM,yM,zM),在比較多個人體zM的值后,選取zM值最小的(即離攝像頭最近的)人體作為用戶,再利用Joint對象對其左腕和右腕的空間位置進(jìn)行捕捉。
由于Kinect捕獲到的左腕坐標(biāo)(xL,yL,zL)和右腕坐標(biāo)(xR,yR,zR)是骨骼空間數(shù)據(jù),只有轉(zhuǎn)換到深度空間里,才能真正確定手腕在深度圖像中的位置。針對這種情況,微軟的SDK提供了Map Skeleton Point To Depth方法來輔助開發(fā)者對骨骼關(guān)節(jié)點數(shù)據(jù)進(jìn)行兩個空間之間的轉(zhuǎn)換,轉(zhuǎn)換后的腕部坐標(biāo)位置分別為(xiL,yiL)和(xiR,yiR)。
4.2 手勢區(qū)域分割
本文使用圖像處理中的閾值法[7]進(jìn)行手勢區(qū)域分割。根據(jù)骨骼系統(tǒng)獲取的左右手腕點在深度圖像中的坐標(biāo)位置(xiL,yiL)和(xiR,yiR)可以得到相應(yīng)的深度值dL和dR,通過公式(1)求出手腕點的灰度值GL和GR,得出如下手勢輪廓提取公式:
(3)
式中g(shù)(i)為圖像第i點的灰度值,G為左手腕灰度值GL或右手腕灰度值GR,d1、d2為裕量值,根據(jù)實驗結(jié)果分別取3和5,gmin和gmax為整幅圖像灰度最小值和最大值,一般分別取0和255。
使用公式(3)對深度圖像所有像素點進(jìn)行處理后得到手勢圖像如圖5a所示。
a 圖像分割后的手勢圖像
b 圖像去除非手勢目標(biāo)前后的手勢圖像
c 邊界平滑與邊緣提取后的手勢輪廓
圖5 手勢圖像
4.3 基于腕部坐標(biāo)最鄰近法則的手勢輪廓提取
實驗中發(fā)現(xiàn),直接按公式(3)進(jìn)行圖像分割時,當(dāng)手腕關(guān)節(jié)點和身體某部位深度值相等時,手勢圖像中易出現(xiàn)其他輪廓,如圖5b左圖所示,這會對后期的特征提取造成干擾。在此提出使用基于腕部坐標(biāo)的最鄰近法則,對程序進(jìn)行優(yōu)化,以提高識別的準(zhǔn)確度。即把腕部點正下方8cm處作為長方形下底邊的中點,在深度圖像中做長為W,高為H的長方形,計算出長方形區(qū)域在深度圖像中的范圍,并將此范圍內(nèi)的所有的像素點按公式(3)提取出來作為手勢區(qū)域,而把正方形范圍外的灰度值置gmin,以去除非手勢目標(biāo),在確定長方形的范圍時需根據(jù)人體腕部坐標(biāo)將其轉(zhuǎn)換成像素位置,轉(zhuǎn)換方法如下:
假設(shè)已標(biāo)定的kinect深度攝像頭相當(dāng)于理想情況下的針孔模型,則深度圖像坐標(biāo)系上像素位置為(xi,yi)點與其在以深度攝像頭光心為原點建立的攝像頭坐標(biāo)系下的對應(yīng)點(x,y,z)之間關(guān)系為:
(4)
(4)中d為(xi,yi)點的深度值,K為深度攝像頭內(nèi)部參數(shù),由s,u0,v0,fx,fy決定。其中,s=0為傾斜因子,u0=161和v0=122為圖像中心坐標(biāo),fx=fy=295為焦距[8]。本文根據(jù)GB/T12624-2006對11碼掌圍和長度的規(guī)定,根據(jù)實驗效果,取長方形長W=25cm,高H=35cm。以右手為例,采用基于腕坐標(biāo)最鄰近法則提取的手勢輪廓如圖5b的右圖所示。
由于閾值處理后獲得的二值圖像其邊緣存在大量毛刺,本文中采用形態(tài)學(xué)操作的閉運算進(jìn)行圖像平滑。圖像處理技術(shù)中的閉運算是個先膨脹,再腐蝕的過程。它能在填充物體內(nèi)細(xì)小空洞、連接鄰近物體、平滑其邊界,同時不會明顯改變輪廓面積[9]。試驗結(jié)果表明,所選取結(jié)構(gòu)元素的膨脹次數(shù)和腐蝕次數(shù)都為1次時,可以達(dá)到良好的去毛刺效果。去毛刺后再使用emgucv進(jìn)行邊緣提取,圖5c左圖為邊界平滑后的手勢圖像,右圖為提取的手勢輪廓。
4.4 模板匹配與手勢識別
本文設(shè)定了4個用于識別的右手手勢模板,如圖6所示,對于其大小沒有嚴(yán)格的量化標(biāo)準(zhǔn)。由于左右手互為鏡像,因此可以根據(jù)對稱性獲取相應(yīng)的左手手勢模板。用emgucv對模板進(jìn)行邊緣提取后,提取手勢輪廓的Hu矩進(jìn)行手勢識別。
Hu矩指的是利用二階矩和三階規(guī)范化中心矩非線性組合而成的七個典型的不變矩{hu1,hu2,hu3,hu4,hu5,hu6,hu7},具有旋轉(zhuǎn),縮放和平移不變性,前三個低階矩反應(yīng)了圖像邊緣的低頻信息,后四個高階矩體現(xiàn)了目標(biāo)邊緣的高頻信息[10]。所得Hu矩如表1所示。
手勢1 手勢2 手勢3 手勢4
圖6 右手手勢模板
表1 手勢模板的hu矩
手勢
不變距手勢1手勢2手勢3手勢4
hu19.14E-31.33E-21.08E-25.51E-3
hu25.34E-68.76E-53.90E-52.47E-6
hu34.93E-86.79E-85.78E-87.13E-11
hu46.82E-115.86E-109.13E-101.24E-8
hu5-1.24E-19-2.30E-19-3.68E-181.11E-17
hu68.19E-153.74E-12-5.50E-121.93E-11
hu71.58E-203.69E-185.51E-183.42E-18
為了防止7個不變矩變化范圍過大,同時考慮到數(shù)據(jù)出現(xiàn)負(fù)值的情況,對數(shù)據(jù)采用取絕對值再取對數(shù)的方法,實際使用的不變矩為[11]:
hui=lg∣hui∣ (5)
(5)中hui表示第i個不變矩,i=1,2,…,7。
相似性有多種度量方式,在本文中,使用距離度量d(α,β)對Hu矩進(jìn)行匹配,d(α,β)的公式如下[12]:
(6)
式中,huκi表示第i個不變矩,i=1,2,…,7
κ=α,β。
5 實驗結(jié)果與分析
本文實驗數(shù)據(jù)來自Kinect攝像頭采集的320x240像素、30f/s手部深度圖像。圖像采集過程中讓手心正對攝像頭、前臂朝上、手掌與攝像頭平面平行或傾斜一個很小的角度,在Kinect官方規(guī)定的最佳偵測范圍采集不同距離、位置以及旋轉(zhuǎn)角度的手部形態(tài)圖像,如圖7所示。
圖7 捕捉的手部圖像
在光強(qiáng)為17 lux的條件下,每個手勢采集150幅圖像,手勢識別結(jié)果如表2所示:
表2 手勢識別結(jié)果
手勢1手勢2手勢3手勢4
總數(shù)150150150150
識別為手勢114912710
識別為手勢2113200
識別為手勢3031429
識別為手勢4010128
準(zhǔn)確率99.3%88%94.6%85.3%
漏檢數(shù)0213
漏檢率0%1.3%0.67%2%
實驗結(jié)果表明,手勢在平移、比例變換和在長方形范圍內(nèi)旋轉(zhuǎn)的條件下,識別率可以達(dá)到85%以上。在實驗中,手勢1取得了較高的識別度,主要是因為該手勢的輪廓相對其他幾種手勢比較簡單集中。而手勢4由于五指的輪廓較為復(fù)雜,增加了手勢識別難度,導(dǎo)致了識別率相對降低。從總體上看,靜態(tài)手勢最終識別效果還是讓人滿意的。
為了驗證手勢識別方案在不同光照強(qiáng)度下的健壯性,在不同光照強(qiáng)度、相同距離的條件下,每個手勢做了100次實驗,表3給出了不同照度下各個手勢的識別率。
表3 不同光照下識別準(zhǔn)確率
光強(qiáng)
手勢105 lux40 lux3 lux
手勢1準(zhǔn)確率100%100%100%
手勢2準(zhǔn)確率95%93%97%
手勢3準(zhǔn)確率91%96%97%
手勢4準(zhǔn)確率87%93%94%
圖8是不同復(fù)雜場景下手勢區(qū)域提取的對比。
圖8 復(fù)雜場景下手勢提取效果
由表3可知,4種手勢在相同距離,不同光照下識別的準(zhǔn)確率達(dá)到87%以上,室內(nèi)的光強(qiáng)弱程度對手勢識別的影響并不明顯。圖8表明在復(fù)雜的背景下手勢識別系統(tǒng)依舊能準(zhǔn)確的對手勢區(qū)域進(jìn)行提取。因此,本文所采用的手勢識別方案有很強(qiáng)的健壯性。
6 結(jié)束語
本文使用Kinect提供的骨骼系統(tǒng)和深度圖像進(jìn)行手勢識別,提出根據(jù)腕部坐標(biāo)用最鄰近法則提取手勢區(qū)域,解決了照度變化和復(fù)雜背景下手勢區(qū)域分割的難題,避免了膚色區(qū)域重合對手勢提取的影響,實驗表明對簡單手勢有著較快、較高的識別率,且有較強(qiáng)的健壯性。但本文采用的模版匹配算法還存在一定的局限性,對復(fù)雜手勢識別的準(zhǔn)確率有待進(jìn)一步提高,可考慮采用SVM等算法獲得更好的復(fù)雜手勢的識別效果。
參考文獻(xiàn):
[1]曾芬芳,王建華,別小川.基于神經(jīng)網(wǎng)絡(luò)的手勢識別[J].機(jī)器人,1999,1(01):40-4.
[2]關(guān)然,徐向民.基于計算機(jī)視覺的手勢檢測識別技術(shù)[J].計算機(jī)應(yīng)用與軟件,2013(30):155-164.
[3]Jing T,Jin Z.Scanning 3D full human bodies using Kinects[J].Visualization and Computer Graphics,2012,18(04):643-50.
[4]黃季冬.動態(tài)手勢識別技術(shù)研究與實現(xiàn)[D].武漢:華中科技大學(xué),2012.
[5]Shotton,Real-Time J.Human pose recognition in parts from single depth images[C].Colorado Springs:IEEE Computer Society,2011,1298-9.
[6]Jarrett Webb.Beginning Kinect Programming with the Microsoft Kinect SDK[M].Berkeley:Apress,2012.
[7]韓思奇,王蕾.圖像分割的閾值法綜述[J].系統(tǒng)工程與電子技術(shù),2002,24(06):91-4.
[8]陳曉明.基于Kinect深度信息的實時三維重建和濾波算法研究[D].上海:上海交通大學(xué),2012.
[9]劉軍華,雷超陽.基于灰度形態(tài)學(xué)的車牌定位算法[J].交通科學(xué)與工程,2012,28(04):65-71.
[10]盧阿娟,陳普春.基于顏色聚類和Hu不變矩的道路交通標(biāo)志檢測[J].物聯(lián)網(wǎng)技術(shù),2013(05):43-6.
[11]王華瑩.基于機(jī)器視覺的車輛檢測和車距測量方法研究[D].大連:大連理工大學(xué),2011.
[12]程小鵬.基于特征提取的手勢識別技術(shù)研究[D].武漢:武漢理工大學(xué),2012.
作者簡介:方華(1965-),女,副教授,博士研究生,主要研究方向:自動控制技術(shù)和機(jī)器視覺;劉詩雄(1985-),男,碩士,碩士研究生,主要研究方向:機(jī)器視覺;田敬北(1975-),男,壯族,講師,主要研究方向:機(jī)器視覺。
作者單位:廣西科技大學(xué)工程訓(xùn)練中心,廣西柳州 545000;廣西科技大學(xué)電子與信息工程學(xué)院,廣西柳州 545000