丁 闖,徐宏宇
(沈陽航空航天大學 電子信息工程學院,遼寧 沈陽 110136)
伴隨著計算機技術(shù)的長足發(fā)展,人工智能人機交互等眾多學科成為研究熱點[1]。人機交互主要是研究人和計算機之間的信息交換。人與計算機之間的信息交換主要依靠交互設(shè)備進行,手勢被視作人機交互的一個重要方式。手勢識別指人體做出的手勢動作通過計算機進行分析與識別,起始于20世紀80年代初期。在人們早期的探索和識別方法研究中,研究手段主要是利用手勢特征和機器學習的方法,如支持向量機(SVM)、SCG神經(jīng)網(wǎng)絡(luò)算法和動態(tài)時間規(guī)則算法(DTW)。目前,由于作為智能的輸入設(shè)備擁有操作簡單、靈活易懂等優(yōu)點,手勢被大量應(yīng)用在動作識別領(lǐng)域[2],如智能機器人、無人駕駛汽車以及智能家居等方面。
嵌入式系統(tǒng)一般是指有著計算機功能但又不稱之為計算機的器材。它的主要特性是應(yīng)用性,可以通過修改其軟硬件達到在成本、功耗、體積以及可靠性等方面的要求。它主要包含嵌入式處理器、操作系統(tǒng)和相關(guān)硬件等。相較于通用的計算機系統(tǒng)而言,嵌入式系統(tǒng)具有高可靠性、高性價比、低功耗以及功能強大等優(yōu)點。由于它面向的是特定的應(yīng)用,因此可以根據(jù)具體需求進行靈活定制。因為嵌入式系統(tǒng)本身并不具有自舉開發(fā)能力[3],所以需要一套開發(fā)工具和開發(fā)環(huán)境對其進行開發(fā)。
Linux是一個廣泛運用在服務(wù)器上的操作系統(tǒng),天生具有開放性。用戶可以根據(jù)自己的特定要求修改功能[4-5]。
對人體膚色所采集的圖像處理是最常用的顏色空間RGB模型[6-8],且在RGB空間里人體膚色對亮度非常敏感。訓練時的圖像亮度與測試時存在較大差距時,將很難從圖像分割出比較完整的手勢圖像,得到的膚色點可能會是離散的。不同人之間的膚色會存在很大差異,主要體現(xiàn)在亮度與飽和度方面,其中黑人的飽和度最大,白人的飽和度最小,黃種人的飽和度居中,而色度的差+異并不明顯。因此,可以將亮度與色度分離,然后只使用色度信息,以降低光照所產(chǎn)生的影響。通常是將RGB空間轉(zhuǎn)換成某個亮度與色度分離的空間[9],再通過比較不同物體與手勢之間存在的色度上的差異分割手勢主體。
對于HSI灰度化,H、S、I分別表示色調(diào)、飽和度、明度。色調(diào)指日常所說的顏色(紅、白、黑等);飽和度代表顏色的不同鮮艷度,值越大,代表越鮮艷;明度則是顏色的明亮。計算得到的H范圍為[0,1),S范圍為[0,1),I范圍[0,255]。膚色在HSI中的分布如圖1所示。
圖1 膚色在HSI中的分布
RGB顏色空間中,物體的色度和感知存在差距。HSV顏色空間比較均勻,體現(xiàn)的亮度分量和色差信息之間沒有很強的關(guān)聯(lián)性,所以分割效果比前者的顏色空間好[10],因此被廣泛應(yīng)用于彩色圖像處理。
YCbCr顏色空間也屬于非常常見的關(guān)于亮度分離的一種顏色空間[11],通過YUV顏色空間轉(zhuǎn)換所得,能夠便利地分離出其中的亮度信息,還可以較好地對膚色分布進行一定的聚類。所以,在YCbCr顏色空間對膚色進行分割的時候,能夠?qū)崿F(xiàn)良好的分割效果,并且能使計算更簡單。對于YCbCr顏色空間而言,在將膚色的信息映射到Y(jié)CbCr顏色空間時,會使得在CrCb二維空間里關(guān)于膚色的像素點近似于呈現(xiàn)橢圓分布,然后依據(jù)YCbCr模型計算得到的幀間差分的值,直接完成對前景物體的提取。
本文主要通過背景建模算法實現(xiàn)對運動目標的檢測,通過計算每個像素的平均值來作為它的背景建模。在檢測當前幀時,只需將當前幀的像素值R(x,y)減去背景模型中相同位置的像素的平均值T(x,y),從而得到差值D(x,y)。將D(x,y)與其中的一個閾值TH進行對比,大于閾值認為是前景,小于閾值認為是背景。輸出圖像為二值圖像,二值化的閾值設(shè)置為20,學習率設(shè)置為0.01。
改進算法通過新增一個輔助背景SBG(Secondary Background),同時將SBG的初始值設(shè)置成BG,即使SBG(x,y)=BG(x,y)得到的新的輸出圖像的output_g的值為:在本文的動態(tài)手勢識別系統(tǒng)內(nèi),通過系統(tǒng)的手勢檢測模塊,獲取手勢所感興趣的區(qū)域1D色調(diào)直方圖,再使用該直方圖得到每一幀圖像的色調(diào)通道的反投影。
首先獲取在空間點周圍密度分布的重心,然后依據(jù)得到的不同密度的傾斜,制定不同的更改方案對空間點進行聚類。
定義1 鄰近重心點,即在以核心點為圓心、以Eps為半徑的圓域內(nèi)的所有鄰近點的重心點。鄰近重心點Q(m,n)的坐標與所有鄰近點的分布有關(guān),坐標計算公式為:
其中,k代表鄰近點數(shù)量;Qim代表任意一個鄰近點的x軸的坐標;Qin代表任意一個鄰近點的y軸的坐標。
其中,Px表示鄰近點的x軸坐標;Py表示鄰近點的y軸坐標。
然后,計算重心點偏離SP:
圖3 重心點偏離
手勢通過人的意識操控肌肉的活動產(chǎn)生變化,是一種較為高級的行為活動方式。而通過手部的變化所產(chǎn)生的信息就是手勢,是一種體現(xiàn)人的思考和思維轉(zhuǎn)變的表達形式。用戶主要的任務(wù)內(nèi)容是展示自己的操作用意,也就是用戶的心理想法(概念手勢),經(jīng)過自己的動作操控以手勢的變化表現(xiàn)出來。
手勢的模型建立是通過手的形狀構(gòu)造和手部的運動軌跡來傳遞輸入的手勢語音信息的內(nèi)容。人的手可以通過關(guān)節(jié)的運動來不斷改變手的形狀,這種變化可以通過手指的位置和狀態(tài)空間的轉(zhuǎn)變來描繪手部運動的特征。
手勢跟蹤應(yīng)用程序根據(jù)系統(tǒng)信號量執(zhí)行軟件編程。為了提高程序的可移植性,為將來的系統(tǒng)功能擴展預(yù)留空間,整個軟件系統(tǒng)均采用模塊化和分層方法進行設(shè)計,并使用匯編語言讀取、寫入和中斷寄存器,同時為上層的開發(fā)提供靈活的接口。上層用C語言編寫,通過調(diào)用下層函數(shù)間接控制硬件資源。以這種方式創(chuàng)建程序可以為整個系統(tǒng)提供清晰的結(jié)構(gòu),提高程序的可移植性和可伸縮性,減少對硬件資源的消耗,并為擴展系統(tǒng)功能和進一步開發(fā)提供充足的空間。
系統(tǒng)通過判斷手勢的運動方向,操作顯示屏上的圖片。為了方便處理,系統(tǒng)中規(guī)定運動方向為水平,圖像的每一個像素點和目標顏色對比并計算重心,再算出偏移的重心的偏移量,對比x軸和y軸的偏移量,通過記錄兩幀之間人手的面積信息或坐標信息[12],運算和處理此時刻的數(shù)據(jù)與前一時刻的數(shù)據(jù)來判定人手的運動方向[13],進而實現(xiàn)操縱顯示屏上的圖片。
主程序中調(diào)用的手勢識別子例程采用動態(tài)手勢識別算法,動態(tài)手勢會在一段時間內(nèi)測量手勢的空間特征的序列值并通過該值進行表示。如圖4所示,通過USB攝像頭采集手勢的相關(guān)特征數(shù)據(jù)信息采集手勢信息,然后將收集的數(shù)據(jù)發(fā)送到A/D模塊,并通過串行端口模塊發(fā)送到控制單元。在該模塊中,控制單元接收實時數(shù)據(jù),并由ARM嵌入式操作系統(tǒng)控制程序進行處理。在PC端完成手勢信息的采集與獲取來檢測手勢的前后左右運動方向,最后實現(xiàn)上位機的手勢運行方向的跟蹤與顯示。
圖4 控制系統(tǒng)模型
在當前的人機交互領(lǐng)域中,本文將手勢用作主體,將動態(tài)手勢功能和嵌入式系統(tǒng)用作載體,設(shè)計了一種可以根據(jù)手勢變化來完成相應(yīng)指令的一套系統(tǒng)。文中簡單介紹了ARM芯片以及Linux操作系統(tǒng),并根據(jù)系統(tǒng)的總體框架和設(shè)計理念,不斷依據(jù)具體情況調(diào)整設(shè)計流程,調(diào)試優(yōu)化算法,完成了系統(tǒng)的硬件設(shè)計和軟件實現(xiàn),基本實現(xiàn)預(yù)定目標。