手勢識別系統(tǒng)設計與開發(fā)_第1頁
手勢識別系統(tǒng)設計與開發(fā)_第2頁
手勢識別系統(tǒng)設計與開發(fā)_第3頁
手勢識別系統(tǒng)設計與開發(fā)_第4頁
手勢識別系統(tǒng)設計與開發(fā)_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

系統(tǒng)開發(fā)平臺本文所開發(fā)的系統(tǒng)是基于所進行開發(fā)的,相應的開發(fā)環(huán)境具體涉及到了,在此過程當中還應用到了作為系統(tǒng)內部相應的界面庫,并且基于相對開源的針對于手勢檢測以及識別完成了相應的開發(fā)。OpenCV關于的OpenCV概述所謂的具體可以歸結為開源形式的計算機視覺庫,相應的組合命名可以概括為。在年就已經建立起,如今由提供支持。它是一個跨平臺開源計算機視覺庫,可以運行在以為代表的多個操作系統(tǒng)上。包括C函數和少量類,同時提供了包含在內等多種語言接口,在圖像處理和計算機視覺方面有很多通用算法。提供了機器學習庫。該機器學習庫側重于統(tǒng)計方面的模式識別和聚類。除了在視覺相關的任務中,還可以方便地應用與其他的機器學習場合。版本于年發(fā)布。的第二個版本是2009年10月的OpenCV2.0,主要更新包括C++接口,更容易、更安全的模式,新的函數,對現有實現代碼優(yōu)化等。2012年8月,對的支持由一個非營利組織提供,現在它也集成了對的支持。2014年8月,隨著的發(fā)布,這個強大的計算機視覺庫迎來了全新的紀元。2019年,發(fā)布4.0版本。據相關統(tǒng)計,一個人獲取的信息大約有75%來自視覺。而圖像又是其中最重要的組成部分。在人工智能時代,機器視覺會在人機互動、人臉識別、手勢識別等方面得到更廣泛的應用。作為圖像處理的重要工具之一,它將會在這一領域發(fā)揮更加重要的作用。OpenCV配置本文采用的是的配置方法,OpenCV作為開源的軟件,直接到官網下載即可,目前官網更新到4.1.0版本,本系統(tǒng)因需要用到控件,故文中采用2.4.9版本。配置過程如下:安裝,打開資源包,解壓到相應文件夾。圖2-1OpenCV資源包解壓配置環(huán)境變量,將環(huán)境變量添加到路徑:圖2-2配置環(huán)境變量工程包含(include)目錄的配置圖2-3配置工程包含(include)目錄工程庫(lib)目錄配置圖2-4配置工程庫(lib)目錄鏈接庫配置圖2-5鏈接庫配置加入動態(tài)鏈接庫將文件夾下所有dll文件復制粘貼到圖2-6動態(tài)鏈接庫如圖所示,呈現出的模塊構成,其具體可以歸結為部分,即模塊、模塊、模塊以及模塊(包含了相應的基本形式的數據結構以及相關函數)。圖2-7OpenCV模塊MFCMFC簡介是微軟基礎類庫的簡稱,是微軟公司實現的一個c++類庫,其具體涵蓋了眾多的句柄封裝類以及大量的的內建控件以及相應的組件的封裝類。MFC除了是一個類庫以外,還是一個框架,MFC作為一個通用框架,不具備最好的針對性,同時也就喪失了部分靈活性和效率。但的具體封裝形式相對較淺,故其相應的效率損失相對較少。利用MFCAppWizard創(chuàng)建Test工程之后將自動生成5個類:CAboutDlg(“關于”對話框類)、CMainFrame(基礎框架類)、CTestApp(應用程序類)、CTestDoc(文檔類)、CTestView(視圖類)。創(chuàng)建一個MFC文件->新建->項目->MFC應用程序,其余項默認,點擊創(chuàng)建。本文命名為“MFCGesture”。點擊“解決方案資源管理器”,可以看到CAboutDlg、CMFCGusetureApp(和CMFCGusetureDlg。其中CAboutDlg是應用程序的“關于”對話框類,CMFCGusetureApp是由CDialogEx派生的類,CMFCGusetureDlg是主對話框類,本系統(tǒng)程序運行后顯示的主界面即為主對話框。在“資源視圖”中可以看到工程MFCGuesture的資源樹。點擊展開Dialog項,出現兩個ID分別為:IDD_ABOUTBOX(“關于”對話框的模板)和IDD_MFCGuesture_DIALOG(主對話框的模板)的對話框模板。ID是資源的唯一標識,本質上是一個無符號整數,一般ID代表的整數值由系統(tǒng)定義。在這之后,可以對系統(tǒng)自動生成的主對話框模板進行編輯、添加控件和函數等操作,或者創(chuàng)建新的對話框模板和所對應的對話框類再進行編輯等操作,最終實現圖形界面。系統(tǒng)相關技術及算法介紹系統(tǒng)相關技術圖像采集技術對于計算機而言,攝像頭扮演著眼睛的角色,是環(huán)境圖像采集的工具。現有多數手勢識別系統(tǒng)中,圖像采集可以是從指定文件夾中讀入的視頻和計算機本地攝像頭實時視頻流,本文開發(fā)的手勢識別系統(tǒng)是基于本地攝像頭。為實現動態(tài)手勢識別功能,首先要將攝像頭采集的視頻轉換為單幀圖像,這些圖像存儲到Mat中,然后進行圖像處理。本文采用OpenCV開源函數庫打開本地攝像頭進行圖像采集。圖像預處理技術預處理是計算機圖像處理過程重要的一步。在圖像采集時會存在許多干擾因素,導致采集到的圖像會存在不同程度的噪聲。圖像噪聲包括外部噪聲和內部噪聲。由系統(tǒng)外部電磁波干擾等因素引起的噪聲稱為外部噪聲。由光、電的基本性質引起的噪聲稱為內部噪聲。圖像后續(xù)處理受噪聲直接影響,所以在圖像使用前,需經過降噪、量化、壓縮等處理,減少圖像噪聲,提高圖像質量。OpenCV包含線性濾波(方框濾波、均值濾波、高斯濾波)、非線性濾波(中值濾波、雙邊濾波)、形態(tài)學濾波。經測試,本文采用中值濾波及膨脹濾波。膚色檢測與分割技術膚色檢測與分割手勢輪廓檢測的關鍵一步。在這一處理過程中將采集圖像中的手勢與背景分離,消除背景對手勢的影響,為下一步手勢識別過程提供單純的手勢圖像,這一操作將影響識別準確率的高低。膚色易因光照強度和不同人之間差異,以及某些攝像頭的自動對光功能的影響。為此,需要一種快捷的手段根據現場情況進行調整。本文采用將顏色空間從RGB色彩空間轉換到亮度與色度分離的某個顏色空間,然后放棄亮度分量。在雙色差或色調飽和度平面上,不同人的膚色區(qū)別較小,膚色的不同更多在亮度上而不是色度上。膚色分割后得到的是二值化圖像,皮膚部分為白色,其余部分為黑色。在完成圖像的預處理之后,將圖像的RGB空間轉換成YCrCb空間。YCbCr顏色空間是一種常用的膚色檢測的色彩模型,其中Y代表亮度,Cb代表光源中的藍色分量,Cr代表光源中的紅色分量。特征提取一旦有效獲取相應的單獨目標手勢以后,接下來就需要對其完成切實有效的描述。也就是說針對于相應的關鍵特性完成相對具有代表性的提取,除此之外,還要將其進行一定的數值化處理,建立起相應特征向量,在一定程度上將手勢識別完成對應的數字化建模,便于后期進行切實有效的手勢識別。關于靜態(tài)形式的手勢,僅需要針對某一特定時間點完成相應的描述,不難分析出,此狀態(tài)下的手勢特征值不會受限于相應的手勢所處的地域環(huán)境與位置,幾乎完全憑借其相應的姿態(tài)來決定。具體可以概括為,不管手勢如何變更方位,只要保持其姿態(tài)不發(fā)生任何變化,與之相對應的特征向量便會保持相對一致。針對于動態(tài)手勢識別就不那么簡單了,從動態(tài)的字眼就可以看出其同時兼具時、空二元耦合特性,在此過程中必須將這兩方面全部考慮進去才能確保所提取的動態(tài)手勢切實有效??梢赃@樣理解,一方面要如同于靜態(tài)手勢逐一時間點進行有效識別,與此同時還要對其相應的運動軌跡完成有效的識別工作,并將二者有效融合,即可完成所謂的動態(tài)手勢識別工作。系統(tǒng)相關算法當前形式下針對于圖像特征提取已經開發(fā)出了各式各樣的算法,其中也存在一定量的散發(fā)針對于相應的幾何變換呈現出相對較為良好的適應性,但是在手勢識別過程當中還要有效處理好光照變化問題,對此前的算法還要進一步的完善,在一定程度上可以說是相對較為繁瑣且艱巨的過程??紤]到這些原因,該手勢識別系統(tǒng)是基于手勢檢測技術,恰巧基本可以實現相應的收拾特征獲取任務,在一定程度上能夠相對較好的有效解決光照變化所引申出的一系列問題。故可有效憑借的方式切實有效完成相應收拾特征的獲取工作,確定手勢位置。然后對此區(qū)域進行圖像采集及識別。完成相應的手勢特征獲取以后,確保實現相對較為切實有效的手勢識別,還需進一步針對于相應的分類器進行不斷的模擬與調試,本項研究具體采取的是為,即支持向量機來作為分類器。HOG特征具體所指方向梯度直方圖,其在一系列的視覺檢測以及相應的圖像處理方面已經得到了相對較為廣泛的應用,在此過程當中可以實現相應物體的檢測以及所對應的特征描述。其具體的運作形式可以歸結為有效憑借圖形局部區(qū)域所對應的梯度方向直方圖來實現相應的特征搭建。尤其是在針對于行人進行相關檢測當中,并與進行有效組合在一定程度上已經成功應用的眾多領域當中。即針對于一副圖像,相應的梯度幾乎全部集中于其邊緣的位置。相應的目標的形態(tài)可有效憑借梯度或者相應的邊緣方向進行切實有效的描述。存在的優(yōu)勢具體可以歸結為:在一定程度上具備一定的幾何以及光學不變特性;微量的動作幾乎不會對相應的檢測效果造成任何形式的干擾,可以理解為允許手部肢體不那么僵持。針對于直方圖所呈現出的更大區(qū)域:完成相應的歸一化,可以將其整體性能有效提升。如圖3-3所示,呈現出具體形式的生成流程。檢測窗口歸一化圖像計算梯度檢測窗口歸一化圖像計算梯度對于每個cell塊對梯度直方圖進行規(guī)定權重投影把所有block內的直方圖向量一起組合成一個大的HOG特征向量對于每一個重疊的block塊內的cell進行對比度歸一化圖3-1關于生成流程其具體的生成流程可以歸結為以下幾方面:規(guī)范化以及相應的顏色空間所謂光照的程度會對相應的具體圖像色值造成一定的影響,確保將其所呈現出的干擾程度有效壓低,要做的第一步就是針對于圖像進行相應的歸一化處理。在相應的紋理強度當中,所占比重相對較大的部分要屬表面曝光,故此類壓縮處理方式能使圖像對這類變化具有不變性特征,相應的局部陰影以及所對應的光強改變均能得到切實有效的下降。由于在此過程當中相應的顏色信息功效不是很強烈,一般采取的方式是進行相應的灰度處理;(3-(3-1)在這里將相應取為,從而切實保證高光區(qū)呈現出相對較低的對比度,反之陰影區(qū)相應的對比度則有效提升。該項壓縮處理方式在一定程度上確保局部陰影以及相應的光照改變呈現出切實有效的下降趨勢。試驗結果可知,引入這項步驟呈現出效果幾乎不夠顯著,進而將其忽略。關于圖像梯度的相關求解憑借一維形式的微分算子即對最初的圖像進行相應的卷積求解,結果顯示相應的方向梯度分別呈現在橫縱坐標當中,隨后完成相應梯度方向值的有效求解;進行相應的倒數運算在一定程度上不單能可有效獲取其輪廓,還可以有效將光照的干擾有效壓低?;诒硎緢D像某一通道中(x,y)處的顏色值,其(x,y)處的水平方向梯度記為Gx(x,y),垂直方向梯度記為Gy(x,y),計算式如下:(3-(3-2)則(x,y)

處的梯度幅值G(x,y)

和梯度方向θ(x,y)計算公式如下:(3-(3-3)求解的具體方式可以歸結為:分別基于以及對應的梯度算子對最初狀態(tài)的圖像完成相應的卷積求解,即可有效得到相應水平以及垂直方向上所對應的梯度分量,進而可以求解出任意像素點所對應的梯度方向與數值。針對于任意細胞單元進行相應的梯度方向直方圖的建立這步的功效在于有效產出相應的編碼供所對應的局部圖像區(qū)域運用,與此同時還能確保圖像內部的人體姿態(tài)以及相應的外形具備一定相對較弱的敏感性。該單元當中的任意像素點均能夠針對于方向形式的直方圖進行所謂的投票。其具體憑借加權的形式,也就是說任何的票均夾雜這一定的權值,其相應的大小是基于相應的梯度幅度進行求解的??梢杂行{借其自身或者一系列的函數關系實現相應權值的表示,基于相關測試結果顯示:在一定程度上憑借幅值的方式進行表示權值所得到的效果最為良好,除此之外,一系列關于幅值的函數關系,譬如其平方、立方等形式也可以進行相應的權值表示。相應的單元的形狀也呈現出多樣化的趨勢,具體可以歸結為:星、矩形等。相應的直方圖通道具體均布呈現在以及區(qū)間內。針對于相應的人體進行檢測時,其中單元格大小呈現出以及像素的時候所對應的檢測效果相對最為良好。倘若相應的單元格大小呈現出以及個像素時,造成的差異也不是很明顯。因此將相應的圖像進行像素單元化處理,也就是說任意的尺寸必須確保像素?,F擬憑借進行相應的梯度信息統(tǒng)計工作。其具體步驟可以歸結為:首先針對于相應的梯度方向進行區(qū)間層面的有效劃分,也就是說進一步完成度的塊等分,在此過程中任意直方圖塊均呈現出。如圖所示:倘若其相對于梯度方向呈現出的形式,即可將其歸納到相應的第一塊,倘若其相對于梯度方向呈現出的形式,便將其歸納到相應的第二塊,除此之外,相應的直方圖第個執(zhí)行累加的運算,逐次類推。完成全部形式的加權投影,即可得到與之對應的。圖3-2cell的梯度方向直方圖把細胞單元組合成大的塊(block),塊內歸一化梯度直方圖(將細胞單元組合成大的區(qū)間)通常情況下,相應的梯度強度在一定程度上會隨局部光照以及相應的對比度改變呈現出相對較為劇烈的改變,因此必須進行切實有效的歸一化處理。歸一化能夠進一步地對光照、陰影和邊緣進行壓縮。本文采取把任意進行相應連通區(qū)間的組合,即。也就是說,將一個內全部形式的的特征向量進行有效串接從而獲取到此所對應的特征。這部分區(qū)間存在一定的重疊性,也就是說:任意的特征會基于相對差異的形式呈現在最終的特征向量當中。如圖所示,呈現出以及的關系形式。圖3-3關于以及相應的重疊關系SVM支持向量機(SupportVectorMachine,SVM)是由機器學習領域的最大間隔分類算法發(fā)展而來的,是一類按\t"/item/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA/_blank"監(jiān)督學習(supervisedlearning)方式對數據進行\(zhòng)t"/item/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA/_blank"二元分類(binaryclassification)的廣義線性分類器(generalizedlinearclassifier),針對于降低最小化實驗誤差以及相應的最大化幾何邊緣呈現出相對較為良好的效果,故可以將其歸結為最大邊緣分類器。其本質在于在相對更高維度的空間內部進行相應的超平面搭建,所謂的\t"/item/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA/_blank"決策邊界是對學習樣本求解的最大邊距超平面(maximum-marginhyperplane),確保其對相應進行分類的數據呈現出相對較大的間隔。相應的誤差與間隔之間也就是所謂的負相關形式。經過不斷發(fā)展,SVM己經成為了機器學習領域的標準工具之一。我們以二維平面加以分析。如圖所示,圖中呈現的紅方以及藍圓均為即將進行分類的相關對象,兩條藍線即為相應的超平面,不難分析出,任意點與之間的間距要高于,也就是說即能進行相對較為良好的區(qū)分,憑借對的有效調節(jié)直至實現任意點間距達到最大化,此刻呈現出最近形式的點即為所謂的支持向量。圖3-4相應的最大間隔分類核函數針對在低維空間呈現出一定的線性不可分的相關特性,如圖所示,可有效憑借高維度映射的方式,逐步實現線性可分形式的切實有效轉化。圖3-5關于線性轉化過程膚色模型膚色特征區(qū)別于其他特征,對于彩色圖像,膚色是圖像中相對聚集和穩(wěn)定的區(qū)域,不會基于人的各類現象的產出而發(fā)展改變,呈現出相對較高的魯棒性,與相應的背景色彩呈現出顯著的差異。通過大量的實驗研究表明,不同人種的人其皮膚的色調是比較一致的,不同之處具體呈現在灰度。故一般情況下基于相對較為常見的相關膚色模型針對于人臉特征進行有效概括。由于膚色在存在差異的色彩空間中,具有不同的表現形式。本項研究基于當中的橢圓模型進行相應膚色分布的具體描述。所謂的皮膚模型可以歸結為:等。通過對相關學者所做的關于皮膚信息統(tǒng)計方面的文獻進行切實有效分析可知,倘若實現相應的皮膚信息映射到,則在相應的二維空間中呈現出類橢圓形式的分布狀況。一旦可以得到相應的橢圓,在有效憑借接下來獲取到的坐標進行相應的區(qū)域位置判別,也就是在橢圓內部還是外部,倘若落在其內部的話,即可將其判別為相應的皮膚,否則即為所謂的像素點。確保相應的亮度不對所謂的膚色聚類造成一定的干擾,在當中針對于相應色度執(zhí)行一系列的非線性變換,完成光影相對較高的區(qū)域剔除,也就是所謂關于的極值,在進行一系列非線性變換當中,憑借有效代表相應的中軸線,相應膚色區(qū)域的具體寬度可憑借進行有效表示。也就是將其全部轉化到當中,再依次進行關于平面的有效投影,故通過相應采樣得到的相關點集,依次進行相應的投影以及相應的變換。圖3-6關于橢圓模型的相關坐標(3-4)(3-4)(3-5)(3-5)RGB色彩空間模型RGB色彩空間是人們最常用到的顏色模型。于年選取了紅,綠,藍這幾種單色作為相應的基本色,也就是所謂的色彩空間。在一定程度上可以基于三基色實現任何色彩的體現與表示,這是當今時代下最為常用的色彩表示方式。也可以有效憑借三基色進行相應光量的有效表示,其中紅色(波長=700.0nm),綠色(波長=546.1nm),藍色(波長=435.8nm)組成的坐標系為RGB色系坐標系。圖像的顏色一般都用RGB坐標系來表示。在針對于手勢識別相關研究過程當中,一般情況下攝像頭所采集到的各種形式圖像都是來源于相應的色彩空間,需要注意的是不能直接對其進行相應的膚色分割。這是因為其三基色之間存在相對較為突出的相關性,倘若進行任意分量保持相對獨立的形式進行處理,可以說要比登天還難,在此過程中其對光照要求相當嚴格,其所帶來的干擾也尤為突出,故在進行目標手勢膚色分割的過程當中,幾乎沒有采取的現象。圖3-7關于色彩空間相關坐標系在RGB模型中,手勢表現出來的顏色受到關照的影響,但對同一點來說,在不同的亮度條件下其對應的值是成比例的:(3-6)(3-6)(3-7)可以歸結為相應的光照幾乎不會影響同一點的色彩情況,僅僅局限于亮度存在差異(3-7)YCbCr色彩空間模型具體可以歸結為由進行有效變換所得到的。其中代表相應的亮度,、Cr分別代表光源中的紅色分量與藍色分量。通過非線性分段而得到的的亮度以及色度所對應的采樣比率分別為,在一定程度上基本能夠滿足于肉眼對色度變化的敏感程度明顯低于亮度變化的性質,與此同時相關色彩的求解相對較為簡便、相應的亮度以及色度分量可有效進行分離、具備相對較為良好的聚類性等特征被認為是很出色的膚色空間模型。經過對文獻的調研,在人們的大量實驗后,通過統(tǒng)計的方法來確定膚色的參數,人手膚色在YCbCr空間中的范圍Cb∈(105,127),Cr∈(137,162),當像素點屬于此范圍時,我們就認為它是皮膚像素點。其轉換公式為:(3-8)(3-8)相關實驗結果顯示,基于相關模型,以及分量呈現出一定的相關性,但需要注意的是與之間沒有所謂的相關性,當亮度存在差異的形勢下以及均能呈現出相對較為出色色聚類效果。而且基于到空間的轉化基本可以稱之為線性變換,從而可以忽視的干擾,從而有效降低冗余通道的數量。這就實現了相應的維度降低操作。如圖3-8所示,呈現出膚色關于平面相應的投影。圖3-8關于膚色在平面上相應的投影經查閱文獻及實驗,本文首先將采集到圖像轉換到YCrCb空間,再對其進行手勢分割以得到想要的目標手勢。相比于RGB和HSV,YCrCb空間計算量遠遠小于前兩種,同時對人體膚色的聚類效果最佳,受光線變化干擾也最小。接下來的一章將進一步介紹基于膚色聚類分割的具體呈現形式,此處不再贅述。中值濾波膚色分割之后,我們還需對圖像進行一定的平滑度處理。在一定程度上又可歸結為模糊,通常情況下憑借其進行有效降噪,其本質在于針對于相應的圖像進行平滑化,從而有效降低其內部的噪點存在。在本文所涉及的手勢識別當中,所謂的圖像平滑處理的最根本原因在于盡可能最大限度降低一系列的冗余信息,便于后續(xù)的手勢輪廓分割以及相關特征的有效獲取,與此同時致使相應的計算量有效下降。中值、雙邊以及相應的高斯濾波是相對較為常見的幾種平滑濾波方式。中值濾波可以歸結為相對較為典型的非線性技術,其具體的原理是有效憑借像素點灰度中值進行有效近似等價替代,其功效在于有效剔除相應的造成,與此同時還能切實有效保證一系列邊緣細節(jié)不會被破壞?;趯嶒炦M行分析,相應的中值濾波對去除圖片噪聲特別理想。相比于其他平滑方法,其在一定程度上能夠有效克服一系列相對較為常見的線性濾波器,譬如最小均方、方框、均值濾波等造成的一系列細節(jié)模糊問題,與此同時能夠有效降低脈沖干擾以及相應的掃描噪聲,還能切實有效保證一系列邊緣細節(jié)不會被破壞。除此之外,相應的算法相對較為便捷實用。故本文所涉到的手勢識別系統(tǒng)有效憑借中值濾波的方式完成相應的噪音剔除。(3-9(3-9)其中f(x,y)、g(x,y)分別表示中值濾波處理前、后的圖像,W是模板,通常為3*3或者2*2,本文采用3*3。膨脹濾波形態(tài)學(morphology)是生物學的一個分支,圖像處理中的形態(tài)學具體可以歸結為數學形態(tài)學,其實質在于格論以及相應的拓撲學層面的圖像分析。簡而言之,所謂的形態(tài)學操可以歸結為基于相應形狀的圖像處理。在一定程度上為相應的圖像形態(tài)學變換營造了相對較為快捷的函數以及開發(fā)環(huán)境。最基本的形式可以歸結為兩類,即膨脹以及腐蝕。本文采用膨脹進行濾波。膨脹(dilate)又稱為作圖像加粗,也可以稱之為局部最大峰值的求解。基于數學視角出發(fā),所謂的膨脹即為將圖像(與核進行卷積計算。核的形狀以及大小幾乎不受任何限制,它具備一定的單獨形式進行定義的相關參考點,也就是所謂的錨點。通常情況下,核具體表現為相對較小其中心部位存在一定的參考點的實心圓或者正方形??梢詫⑵洚斪鱿鄳哪0迳踔潦茄诖a。相應的膨脹操作在一定程度上能夠針對于噪音以及陰影等干擾所進行分割的各個部分完成相應切實有效的融合。如圖所示,有效憑借膨脹可以進行局部最大峰值的求解。核與圖形發(fā)生卷積,即進行核覆蓋區(qū)域所對應的的像素點的最峰值的求解,并將其賦給相應的參考像素,便可將相應的高亮區(qū)域逐步擴大。(p188)圖3-9膨脹濾波膨脹的數學表達式如下(3-(3-10)系統(tǒng)設計與實現憑借著計算機以及圖像處理技術發(fā)展勢頭迅猛提升,相應的計算機視覺等方面也在迅速發(fā)展,手勢識別作為人機交互的一種方式,也迎來了新的發(fā)展機遇。通過前期調研發(fā)現,手勢識別技術已應用在多個領域,如日常生活視頻直播或者拍照過程中,結合用戶的手勢(如點贊、比心),實時顯示相應的特效,豐富交互體驗。智能駕駛過程中將手勢識別應用到駕駛輔助系統(tǒng),使用手勢控制車內的各種功能,一定程度上解放雙眼,將更多的注意力放在道路上,提升駕車安全性。同時還包括百度AI開放平臺提供的在線手勢識別服務等。這些均反映著手勢識別技術的火熱。開始打開攝像頭采集圖像圖像預處理結束膚色檢測圖像分割手勢識別特征提取開始打開攝像頭采集圖像圖像預處理結束膚色檢測圖像分割手勢識別特征提取圖4-1手勢識別流程圖下面對系統(tǒng)中三個重要模塊進行介紹:圖像采集模塊基于本地形式的攝像頭,完成相應的視頻圖像的切實有效采集,呈現出空間視頻流的形式進而為手勢識別輸入奠定一定的基礎,并將采集到個各項數據有效儲存到當中,為接下來的輸入做好充分準備。圖像預處理模塊憑借圖片的有效縮放,進而將后期的相關計算量有效壓低,在此過程當中有效剔除相應的圖片噪音,為接下來的相應處理提供相對較為便捷的條件。這部分具體涵蓋了灰度變換、空間轉化以及相應的平滑處理等。匹配識別模塊該模塊是手勢識別系統(tǒng)需要實現的目標功能,也是本系統(tǒng)最重要的模塊。在對圖像進行一系列的處理后,有效獲取到相應手勢圖像具體形式的特征值,接下來與事先設定好的模板特征值完成切實有效的對比以及歸類,進而有效尋找出所對應的手勢信息,譬如手型所代表的數字。然而在動態(tài)識別當中,系統(tǒng)內部會進行實時的信息采集,并完成相應的處理工作。系統(tǒng)整體設計根據前期的需求分析和調研,本文設計的整體系統(tǒng)結構如下圖所示:手勢樣本采集開始手勢訓練模塊手勢樣本采集開始手勢訓練模塊圖像預處理圖像預處理待識別手勢采集圖像預處理手勢分割手勢特征提取手勢分割待識別手勢采集圖像預處理手勢分割手勢特征提取手勢分割手勢測試模塊訓練手勢模板手勢特征提取訓練手勢模板手勢特征提取提取手勢模板提取手勢模板手勢判定手勢判定輸出結果輸出結果結束結束圖4-2手勢識別程序流程圖手勢訓練模塊在開始訓練手勢之前,需要用戶打開電腦自帶的攝像頭提供視頻流。voidCMFCGuestureDlg::OnBnClickedOpencap()//打開攝像頭{ m_Cap.open(0); if(!m_Cap.isOpened()) { MessageBox("攝像頭打開失敗"); return; }但是MFC的picturecontrol控件中的圖像格式與OpenCV的圖像格式不盡相同,因此需要將OpenCV得到的視頻流通過CvvImage開源圖像處理庫進行轉變處理。處理完以后攝像頭所得到的圖像就會被顯示在控件中。voidCMFCGuestureDlg::regniseHand(stringpath_img){ imagesRegnise=imread(path_img.c_str());//imagelist[0].c_str() Matincp=imagesRegnise.clone(); srcCvvImg.CopyOf(&(IplImage)imagesRegnise); //繪制圖像到控件 srcCvvImg.DrawToHDC(m_HDCImg,&m_RectImg); resize(incp,incp,Size(HogWIDTH,HogHEIGHT)); hand=handPreprocess(incp); if(1.0*countNonZero(hand)/(incp.cols*incp.rows)>0.23) { intregResult=mySvmClassifier->svmPredict(incp); CStringstr; str.Format("%d",regResult); SetDlgItemText(IDC_EDIT2,str); sprintf_s(buffer,"%d",regResult); putText(imagesRegnise,buffer,Point(incp.cols/2,incp.rows/2),FONT_HERSHEY_SIMPLEX,1.5,Scalar(0,0,255),2); srcCvvImg.CopyOf(&(IplImage)imagesRegnise); //繪制圖像到控件 srcCvvImg.DrawToHDC(m_HDCImg,&m_RectImg); srcCvvImg.CopyOf(&(IplImage)hand); //繪制圖像到控件 srcCvvImg.DrawToHDC(m_HDCImg2,&m_RectImg2); } else { MessageBox("沒有檢測到手勢"); }}在本系統(tǒng)中,為降低識別失敗率及程序復雜度,我直接定義并設置了檢測區(qū)域的位置。intWIDTH=m_src.cols; intHEIGHT=m_src.rows; capRt=cv::Rect(1*WIDTH/3-1,1*HEIGHT/3-1,WIDTH/2,HEIGHT/2);采集手勢如圖所示圖4-3手勢采集voidCMFCGuestureDlg::OnBnClickedReg()//注冊手勢類別{ CStringstr; GetDlgItem(IDC_EDIT1)->GetWindowText(str); regingInt=atoi(str); regBool=false; sprintf_s(buffer,"./Data/%d",regingInt); if(_access(buffer,0)==0) { sprintf_s(buffer,"手勢%d已注冊,如需重新注冊請先刪除對應類別文件夾",regingInt); MessageBox(buffer); regingInt=-1; return; } CreateDirectory(buffer,NULL); regBool=true; regNum=0;}圖像采集完畢后,存入指定文件夾下。如例子中注冊手勢1,則存入D:\2019畢設\vs13program\handGuesture\MFCGuesture\Data\1。保存如圖所示圖4-4手勢采集保存形式本系統(tǒng)手勢預處理將計算機攝像頭采集到的的RGB色彩空間轉換為YCrCb空間,再利用橢圓皮膚模型進行皮膚檢測與分離。MatCMFCGuestureDlg::handPreprocess(Mat&src){ ycrcb_image; Matoutput_mask=Mat::zeros(Size(src.cols,src.rows),CV_8UC1); for(intj=0;j<src. //如果該落在皮膚模型橢圓區(qū)域內,該點就是皮膚像素點 output_mask.at<uchar>(j,i)=255; } dilate(output_mask,output_mask,element);//膨脹,參數1:輸入圖片,參數2:輸出圖片,參數3:卷積核 medianBlur(output_mask,output_mask,3);//中值濾波, morphologyEx(output_mask,output_mask,MORPH_CLOSE,element2);//形態(tài)學運算函數 returnoutput_mask;}輸出如圖所示圖4-5手勢預處理采集并處理完圖像后,進行手勢模型的訓練voidCMFCGuestureDlg::OnBnClickedButton3()//訓練模型{ char*path_="./Data/"; readDir(path_,imagelist,labelName); mySvmClassifier=newsvmGuesture(imagelist.size(),HogWIDTH,HogHEIGHT); //新建的手勢識別的類svmGuesture,這個類在另外的文件 if(_access("./model.xml",0)==0) { mySvmClassifier->svm.load("./model.xml"); return; } intflag=mySvmClassifier->loadData(imagelist); if(flag==-1) { MessageBox("notFoundimagefiles"); } flag=mySvmClassifier->svmTrain(); if(flag==-1) { MessageBox("trainmodelerror"); } MessageBox("trainingmodeldone");}手勢測試模塊系統(tǒng)必須先通過手勢檢測模塊來畫出手勢輪廓與皮膚區(qū)域。此系統(tǒng)中的手勢檢測功能就是通過OpenCV手勢識別庫,在特定區(qū)域提取手勢特征。本系統(tǒng)手勢識別模塊包括了動態(tài)識別和靜態(tài)識別。具體方法將在第五章敘述。啟動手勢識別功能代碼如下:voidCMFCGuestureDlg::OnBnClickedButton2()//手勢識別{ if(_access("./model.xml",0)!=0) { MessageBox("請先訓練模型"); return; } startRegnise=true;}系統(tǒng)測試與分析在系統(tǒng)運行和測試階段,通過對系統(tǒng)功能逐個進行測試,驗證系統(tǒng)是否達到了預期的設計要求。系統(tǒng)測試環(huán)境在本文的測試中,系統(tǒng)的運行環(huán)境為英特爾Corei7-8750H@2.20GHz六核處理器和16GB內存配置的電腦,操作系統(tǒng)為win10,開發(fā)環(huán)境采用VisualStudio2013,開發(fā)語言為C++。系統(tǒng)界面測試手勢注冊功能測試系統(tǒng)界面如圖5-1所示圖5-1手勢識別系統(tǒng)界面考慮需要一只手注冊,一只手操作,我將注冊區(qū)域調整到畫面左下方。以注冊手勢0為例。圖5-2注冊手勢“0”voidCMFCGuestureDlg::OnTimer(UINT_PTRnIDEvent) //時間響應函數{ m_Cap>>m_src; rectangle(m_src,capRt,Scalar(255,0,0),2); srcCvvImg.CopyOf(&(IplImage)m_src); //繪制圖像到控件 srcCvvImg.DrawToHDC(m_HDCImg,&m_RectImg); frameCounter++; if(regBool||startRegnise) hand=handPreprocess(m_src(capRt)); //皮膚檢測判斷是否為手勢 if(regBool&®Num<50&®ingInt>=0) { //Mathand=handPreprocess(m_src(capRt)); if(regingInt==1)thresh_=0.24;elsethresh_=0.3; if(frameCounter%3==0&&1.0*countNonZero(hand)/(capRt.width*capRt.height)>thresh_) { sprintf_s(buffer,"./Data/%d/%d_%d.jpg",regingInt,frameCounter,regNum); MatsaveImg=m_src(capRt); //cvtColor(saveImg,saveImg,CV_RGB2GRAY); imwrite(buffer,saveImg/*hand*/); regNum++; } srcCvvImg.CopyOf(&(IplImage)hand); //繪制圖像到控件 srcCvvImg.DrawToHDC(m_HDCImg2,&m_RectImg2); } if(regBool&®Num==50) { sprintf_s(buffer,"手勢%d注冊完成",regingInt); regBool=false; regNum=0; MessageBox(buffer); } if(startRegnise) { MatsaveImg=m_src(capRt);//handPreprocess(saveImg) if(1.0*countNonZero(hand)/(capRt.width*capRt.height)>0.3) { resize(saveImg,saveImg,Size(HogWIDTH,HogHEIGHT)); cvtColor(saveImg,saveImg,CV_RGB2GRAY); intregResult=mySvmClassifier->svmPredict(saveImg); CStringstr; str.Format("%d",regResult); SetDlgItemText(IDC_EDIT2,str); sprintf_s(buffer,"%d",regResult); putText(m_src,buffer,Point(capRt.x,capRt.y),FONT_HERSHEY_SIMPLEX,1.5,Scalar(0,0,255),2); srcCvvImg.CopyOf(&(IplImage)m_src); //繪制圖像到控件 srcCvvImg.DrawToHDC(m_HDCImg,&m_RectImg); srcCvvImg.CopyOf(&(IplImage)hand); //繪制圖像到控件 srcCvvImg.DrawToHDC(m_HDCImg2,&m_RectImg2); } }手勢識別(動態(tài)手勢)測試圖5-3手勢“0”動態(tài)識別圖5-4手勢“1”動態(tài)識別圖5-5手勢“2”動態(tài)識別圖5-6手勢“3”動態(tài)識別圖5-7手勢“4”動態(tài)識別圖5-8手勢“5”動態(tài)識別圖5-9手勢“6”動態(tài)識別圖5-10手勢“7”動態(tài)識別圖5-11手勢“8”動態(tài)識別圖5-12手勢“9”動態(tài)識別由上圖可以看出,在光線條件合適的情況下,背景與膚色對比度明顯,系統(tǒng)可以準確識別出0-9共10個手勢,并實時將識別結果顯示在界面上。圖片識別(靜態(tài)手勢)測試點擊圖片識別按鈕,打開靜態(tài)手勢存儲的文件夾,識別圖片手勢。圖5-13手勢“1”靜態(tài)識別圖5-14手勢“2”靜態(tài)識別voidCMFCGuestureDlg::OnBnClickedButton4()//圖片識別按鈕{ KillTimer(1); startRegnise=false; regBool=false; CStringstr; BROWSEINFObi; TCHARname[MAX_PATH]; name[0]='d'; ZeroMemory(&bi,sizeof(BROWSEINFO)); bi.hwndOwner=GetSafeHwnd(); bi.pszDisplayName=name; bi.lpszTitle=_T("Selectfolder"); bi.ulFlags=0x80; LPITEMIDLISTidl=SHBrowseForFolder(&bi); if(idl==NULL) return; SHGetPathFromIDList(idl,str.GetBuffer(MAX_PATH)); str.ReleaseBuffer(); m_Path=str; if(str.GetAt(str.GetLength()-1)!='\\') m_Path+="\\"; UpdateData(FALSE); m_ImageDir=(LPSTR)(LPCSTR)m_Path; imagelist.clear(); labelName.clear(); readDir(m_ImageDir,imagelist,labelName); NumImg=imagelist.size(); if(NumImg<=0) { MessageBox("文件夾下沒有圖片"); return; } regniseHand(imagelist[0]);}測試問題測試過程中也發(fā)現了一些問題,具體如下:手勢識別(動態(tài)手勢)問題如圖所示:圖5-155-16動態(tài)手勢識別光線問題由于光照條件變化和手掌與攝像頭距離等原因,在手勢注冊時,膚色分割變化較大,直接影響從視頻流中采集的圖像質量,并影響手勢訓練結果,最終導致手勢識別效率降低。5-17手勢角度變換造成識別錯誤從測試中發(fā)現,由于采集手勢樣本數量有限,當攝像頭采集區(qū)域手勢角度發(fā)生變化時,系統(tǒng)無法或錯誤識別動態(tài)手勢。圖5-185-19身體其他部位膚色對識別的影響另外由于人體其他部位膚色與手部膚色差別不大,當有身體其他部位如臉或手臂進入圖像采集區(qū)時,同樣會被膚色分割。在手勢采集時會影響模型訓練效果,而在手勢識別時,則會導致錯誤或無法識別。圖片識別(靜態(tài)手勢)問題5-20異側手無法識別從測試結果中我們可以看出,靜態(tài)手勢在圖像處理方面不如動態(tài)手勢,主要表現在圖像平滑處理不好。同時遇到與動態(tài)測試中相同的問題,當旋轉圖片角度測試,或者導入另一只手進行測試時,系統(tǒng)無法識別該手勢類型。測試結論經過上述的測試,表明該系統(tǒng)可以基本實現設計需求中的各項功能,在光線和背景穩(wěn)定的情況下能夠保證這些功能的正確執(zhí)行,本系統(tǒng)的算法基于原有算法進行部分了改進,達到預期設想。其中手勢檢測可以很好地檢測動態(tài)正面手勢,攝像頭采集的視頻中的手勢都可以正常進行預處理,但當外界條件變化或因手部移動造成光線、位置等因素造成的干擾,影響了圖像的采集,從而造成后續(xù)識別率降低。且由于邊緣濾波算法研究不夠全面和充分,因此靜態(tài)手勢識別效果不夠好。通過系統(tǒng)整體運行測試,說明該系統(tǒng)可以實現一定程度上的動態(tài)、靜態(tài)手勢識別功能。總結和展望隨著時代的不斷發(fā)展伴隨著科學技術的日新月異,相應的手勢識別在人機交互的過程當中呈現出相對較為便捷、高效等特點,成為當前研究和應用的熱點。而新一代的人機交互必然會呈現出相對較為人性化、智能化以及自由化的趨勢。本系統(tǒng)優(yōu)點總結本文以VisualStudio2013+OpenCV2.4.9作為開發(fā)平臺,開發(fā)出基于圖片以及本地攝像頭采集手勢并進行切實有效識別的系統(tǒng),同時利用圖像處理及模式識別的理論知識,我對手勢識別相關領域有了更深入的了解。本文首先了闡述了手勢識別的基本原理。對輸入圖像充分做好相應的預處理,其次針對于手勢圖像的各方面特征,基于相應的皮膚模型的橢圓模型法對皮膚特征進行提取。為了使分割效果更佳,在膚色模型區(qū)域的算法中,在查閱資料后選取形式的顏色空間,與此同時考慮到相應的亮度變換比相對較大,一旦呈現過亮或者過暗區(qū)域的現象產出,在一定程度上會導致中呈現膚色溢出的現象。有效憑借完成相應類橢圓模型的搭建。相應的皮膚色彩呈現出一定的聚類特性,基于該聚類特性可有效求解出各點的相似度,并進行相應的歸一化處理,即呈現在區(qū)間內。去除膚色區(qū)域中的非手勢區(qū)域,從而可以較好的分割出目標部分。本項研究具體的貢獻在于:針對于的手勢模板,提出了相應的動態(tài)識別算法進行切實有效識別。本文對手勢的特點進行了切實有效的分析,具體涵蓋了靜態(tài)以及動態(tài)手勢相關提取與識別,并且基于特征以及相應的算法進行了切實有效的探索。整體而言,系統(tǒng)運行情況良好,符合預期。本論文不足總結針對于本文所開發(fā)的手勢識別系統(tǒng)進行了一系列驗證性實驗以后,將相應的不足之處有效歸結為以下幾點:雖然幀速的相關識別相對較快很快,但在精準度方面還有待進一步完善;手勢采集區(qū)域固定,可通過更換算法實現手勢區(qū)域自由定位;圖像預處理算法仍需改進,尤其是圖像平滑處理;對旋轉或者不同位置的手勢,系統(tǒng)無法快速、準確地進行識別;基于調試中相應的參數,使其相應的特征提取更加切實有效。算法需要手動設置參數值,無法自適應外部環(huán)境的變化;給程序構造更加友好的用戶界面;當前能夠有效識別手勢形式相對較少,未來可進行相關算法的完善以及模板的擴充。未來工作展望針對于手勢識別未來的研究工作從以下方面著手進行:完善相關識別算法,確保相應的識別精度有效提升,同時保證相對較高的流暢性;在光線、位置以及相應的環(huán)境方面的適應程度還有待進一步完善;著手考慮手勢旋轉等因素,確保得以實現全方位的手勢識別納;擴展現有的模板容量,保證手勢識別呈現多樣化的趨勢;考慮與啞語進行有效結合;逐步引入類似于神經網絡形式的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論