韓 旭,于小億
(蘭州大學(xué) 信息科學(xué)與工程學(xué)院,甘肅 蘭州730000)
在體感遙控系統(tǒng)中,對人體手勢這個運(yùn)動目標(biāo)的圖像序列進(jìn)行分析處理主要由目標(biāo)檢測、目標(biāo)跟蹤、目標(biāo)識別和目標(biāo)行為理解組成。目標(biāo)檢測技術(shù)是整個手勢識別的最底層,運(yùn)動目標(biāo)檢測是指從視頻圖像序列中將變化的目標(biāo)從背景中分割出來。一旦識別出目標(biāo),就對目標(biāo)進(jìn)行編碼,根據(jù)編碼實現(xiàn)對監(jiān)控對象的控制。運(yùn)動目標(biāo)檢測主要包括背景提取、前景檢測、判斷報警、背景更新等主要步驟。常用的對手勢的檢測方法有基于運(yùn)動信息的檢測方法:幀差法、光流法和背景減法;基于膚色信息的檢測方法[1]。前者不能準(zhǔn)確檢測出整個手勢區(qū)域,而后者計算量小,可用于實時處理。目前,體感技術(shù)的應(yīng)用從任天堂、索尼、微軟家用游戲機(jī)上得到推廣。微軟最新的Kinect控制器采用彩色攝像頭和深度攝像頭結(jié)合的方法捕捉三維圖像信息,獲得了很好的識別效果。體感遙控應(yīng)用前景廣闊,將補(bǔ)充傳統(tǒng)的人機(jī)交互方式。本文設(shè)計的體感遙控系統(tǒng)采用Intel的開源函數(shù)庫OpenCV,直接調(diào)用單目攝像頭采集視頻流,對運(yùn)動目標(biāo)進(jìn)行檢測、跟蹤和識別。完成體感遙控中發(fā)現(xiàn)運(yùn)動目標(biāo)并根據(jù)運(yùn)動目標(biāo)給出控制信息,達(dá)到了低成本、具有實時性的要求。本設(shè)計中使用運(yùn)動和膚色相結(jié)合的目標(biāo)識別算法,并給出OpenCV實現(xiàn)此算法的程序流程和實驗結(jié)果。
體感遙控的系統(tǒng)結(jié)構(gòu)如圖1所示。Webcam攝像頭通過USB接口與PC機(jī)相連,PC機(jī)安裝的軟件為Windows7操作系統(tǒng)、Microsoft Visual Studio 2010和OpenCV 2.3函數(shù)庫。通過PC機(jī)的串行接口或USB接口,連接紅外線發(fā)射模塊和無線電發(fā)射模塊,與遠(yuǎn)端的紅外線接收模塊和無線電接收模塊進(jìn)行通信,實現(xiàn)對遠(yuǎn)端控制對象的控制[2-4]。
圖1 體感遙控的系統(tǒng)結(jié)構(gòu)
OpenCV(Open Source Computer Vision Library)是由Intel開發(fā)的一種用于數(shù)字圖像處理和計算機(jī)視覺的函數(shù)庫,OpenCV可以在Windows系統(tǒng)下使用,該函數(shù)庫源代碼是開放的。OpenCV用于實時圖像處理,比如說特征檢測與跟蹤、運(yùn)動分析、目標(biāo)分割與識別以及3D重建等。OpenCV提供了幀提取函數(shù)和根據(jù)圖像處理算法編寫的標(biāo)準(zhǔn)函數(shù),在具體的視頻開發(fā)項目中直接調(diào)用這些函數(shù)。OpenCV中每個函數(shù)的命名都以“cv”開始,然后是該函數(shù)的行為及目標(biāo)。例如用來創(chuàng)建圖像的函數(shù)“cvCreateImage”,載入圖像的函數(shù)“cvLoadImage”。
OpenCV是為圖像處理及計算機(jī)視覺在實際工程中的應(yīng)用而設(shè)計的一個類庫,其中所有的函數(shù)都由于其在實際應(yīng)用中所實現(xiàn)的不同功能而分屬不同的類型。
手勢定位的方法主要有基于運(yùn)動檢測的方法、膚色檢測的方法,并且目前流行于將機(jī)器學(xué)習(xí)的方法加入到手勢定位當(dāng)中[5]。
基于運(yùn)動檢測的方法有:幀差法、背景剪除法、光流法。幀差法是在視頻序列中對相鄰幀的圖像做差來獲取運(yùn)動目標(biāo)的信息,最直接的相鄰兩幀幀差和三幀差。三幀差是將第i幀與第i+1幀圖像做減得到差分圖像D1,i+1幀圖像與i+2幀圖像做減得到差分圖像D2。然后對差分圖像平滑濾波,二值化。最后對D1和D2進(jìn)行二次差分得到更精確的輪廓。背景剪除法是利用背景的參數(shù)模型來近似背景圖像,當(dāng)前幀與背景圖像進(jìn)行比較時區(qū)別較大的像素塊被認(rèn)為是運(yùn)動區(qū)域,而區(qū)別較小的像素塊為背景區(qū)域。光流法利用視頻序列中像素的灰度分布不同體現(xiàn)物體的運(yùn)動,對運(yùn)動場進(jìn)行近似估計來確定各像素的位置變化。其計算量大,不易實現(xiàn)實時目標(biāo)檢測。
近年來由于微處理器的高速發(fā)展,基于機(jī)器學(xué)習(xí)的方法也越來越多地在計算機(jī)視覺中采用。比較流行的如基于Haar特征的Adaboost算法[6],基于HOG特征的Adaboost算法[7]。Adaboost是一種自適應(yīng)的Boosting迭代算法,其原理是將弱分類器疊加起來構(gòu)成強(qiáng)分類器。Haar特征在人臉識別上獲得了成功,速度快且誤差小。Histograms of Oriented Gradients(HOG)基于方向梯度的直方圖的特征,該梯度分布能夠很好地描述圖像的局部特征。機(jī)器學(xué)習(xí)的方法避免不了計算的時間開銷和存儲的空間開銷,需要與其它方法相結(jié)合優(yōu)化才能達(dá)到很好的效果。
經(jīng)典的跟蹤方法包括:基于區(qū)域的如卡爾曼濾波、基于特征、基于變形模板、基于模型、粒子濾波、Meanshift、Camshift、人工神經(jīng)網(wǎng)絡(luò)等方法[8]。手勢跟蹤常用的Kalman濾波器采用遞歸的運(yùn)動方程和觀測方程,通過預(yù)測方程和更新方程的迭代計算來估計運(yùn)動系統(tǒng)的狀態(tài),其算法已應(yīng)用于各個領(lǐng)域。粒子濾波是一種非線性、非高斯系統(tǒng)的求解遞歸估計的濾波方法[9],目前已經(jīng)廣泛應(yīng)用于諸多領(lǐng)域?;贛eanshift的算法具有實時性、魯棒性和易用性,是目前流行的目標(biāo)跟蹤算法之一。但是Meanshift算法由于其固定尺度的搜索窗函數(shù)影響了跟蹤的準(zhǔn)確性。在Meanshift算法的基礎(chǔ)上,又提出了Camshift(continuously adaptive meanshit)算法,其搜索窗會自動調(diào)整大小以適應(yīng)目標(biāo)的變形問題。
依據(jù)前文的算法研究,設(shè)計得到如圖2所示的體感遙控器的程序流程圖。首先讀取USB攝像頭,獲得RGB圖像并顯示在PC機(jī)窗口中。為了減小復(fù)雜背景的干擾,適應(yīng)光照變化的影響,提高前景檢測的魯棒性,引入codebook背景建模的方法。其方法是將像素與編碼本進(jìn)行匹配,來判斷編碼本的更新。它能夠解決像素復(fù)雜變化的問題,進(jìn)而可以魯棒性地檢測出復(fù)雜背景下的前景物體。在codebook提取前景的前提下,利用如圖3所示的Camshift算法結(jié)合Kalman濾波器對人手進(jìn)行跟蹤。然后對Camshift輸出的圖像進(jìn)行形態(tài)學(xué)處理,利用OpenCV的內(nèi)部函數(shù)cvFindContours提取出輪廓特征。最后利用圖像特征匹配的方法進(jìn)行手勢識別,本設(shè)計采用了計算量較小的空間位置特征。另外由于膚色是人手檢測的重要特征之一,可采用膚色進(jìn)行背景建模。由于RGB空間的準(zhǔn)確度受光照的影響比較大,常采用將RGB空間換為HSV空間進(jìn)行處理,統(tǒng)計每個像素的H值在顏色空間范圍內(nèi)的分布。根據(jù)膚色信息,對原圖像進(jìn)行二值化處理,根據(jù)閾值處理特點(diǎn),得到人手區(qū)域。最后將codebook模型與膚色模型進(jìn)行與運(yùn)算,得到更準(zhǔn)確手部區(qū)域。
圖2 體感遙控器的程序設(shè)計流程
圖3 Camshift算法流程
實驗采用windows7操作系統(tǒng),系統(tǒng)的工作環(huán)境為CPU i7-640m,內(nèi)存4G,攝像頭為羅技C270 WebCAM,其最大輸出分辨率是1280×720,通過USB直接連接PC機(jī)。圖像的捕獲幀率為每秒30幀。圖像的捕獲采用微軟DirectShow外部函數(shù)進(jìn)行視頻捕獲的相關(guān)操作。
實驗時,輸入為單手手勢,盡量保持手掌平行于攝像頭成像平面,手掌的背景要盡量簡單。跟蹤效果如圖4所示。對于人手實時平移的4個方向會在命令行CMD窗口顯示,如圖5所示。
本設(shè)計的手勢識別方法對復(fù)雜背景、人手的平移、旋轉(zhuǎn)、縮放具有一定的魯棒性。如表1所示,對簡單方向運(yùn)動手勢準(zhǔn)確率基本在90%以上,可以達(dá)到實時性的要求。
表1 復(fù)雜背景下單手手式識別率
本文介紹基于OpenCV的體感遙控實現(xiàn)手勢圖像的采集、提取、識別和跟蹤,并利用手勢實現(xiàn)目標(biāo)對象的控制。OpenCV由大量代碼經(jīng)過優(yōu)化庫函數(shù)組成,是一種高效且實用的開發(fā)工具。該設(shè)計由于其較低的計算復(fù)雜度和較高的魯棒性,可應(yīng)用于視頻監(jiān)控、報警、家電控制、家庭監(jiān)護(hù)和游戲娛樂等領(lǐng)域。該開發(fā)平臺大大縮短研制周期,具有廣泛的應(yīng)用前景。
[1]張曉宇,彭四偉.基于OpenCV的運(yùn)動目標(biāo)識別算法與實現(xiàn)[J].現(xiàn)代電子技術(shù),2009,22:99-101.
[2]劉勇賓,胡國輝.淺議視頻的運(yùn)動形態(tài)識別[J].刑事技術(shù),2010,4:52-54.
[3]馬桂珍,朱玲贊.段麗.基于OpenCV的視頻應(yīng)用程序的開發(fā)方法[J].現(xiàn)代電子技術(shù),2007,4:78-88.
[4]孫統(tǒng)義,李林.基于OpenCV的紅外運(yùn)動目標(biāo)檢測方法及實現(xiàn)[J].信息化研究,2010,36(11):12-16.
[5]張學(xué)賀,張學(xué)東,丁寧.基于OpenCV的運(yùn)動目標(biāo)檢測與跟蹤[J].遼寧科技大學(xué)學(xué)報,2010,33(5):490-494.
[6]Yubo WANG,Haizhou AI,Bo WU,et al.Real Time Facial Expression Recognition with Adaboost[J].Pattern Recognition,ICPR,2004.
[7]Chi-Chen,Raxle Wang,Jenn-Jier James Lien.AdaBoost Learning for Human Detection Based on Histograms of Oriented Gradients[J].ACCV 2007,8th Asian Conference on Computer Vision,Tokyo,Japan,2007:18-22.
[8]李培華.序列圖像中運(yùn)動目標(biāo)跟蹤方法[M].北京:科學(xué)出版社,2010.
[9]胡士強(qiáng),敬忠良.粒子濾波原理及其應(yīng)用[M].北京:科學(xué)出版社,2010.