向陽(yáng) 詹明強(qiáng)
摘要:隨著科技的發(fā)展,計(jì)算機(jī)發(fā)展越來(lái)越快,人機(jī)交互手段也日新月異,而手勢(shì)控制與人臉識(shí)別作為一種新型的人機(jī)交互手段,有著便捷的特點(diǎn)。通過(guò)單個(gè)手指移動(dòng)鼠標(biāo),兩個(gè)手指相互靠近來(lái)點(diǎn)擊,通過(guò)提取人臉面部中所具有的特征,通過(guò)增加特征值點(diǎn)和較流行的Open CV算法來(lái)提高精度,在現(xiàn)實(shí)生活中有很重要的實(shí)用價(jià)值。
關(guān)鍵詞:人臉識(shí)別 手勢(shì)控制 面部特征值 Open CV 攝像頭
Camera-based Face Recognition and Gesture Recognition and Control
XIANG YangZHAN Mingqiang
Abstract: With the development of science and technology, the development of computers is getting faster and faster, and the means of human-computer interaction are also changing with each passing day. As a new type of human-computer interaction means, gesture control and face recognition have the characteristics of convenience. Move the mouse with a single finger, and click with two fingers close to each other. By extracting the features in the face, the accuracy is improved by adding feature value points and the more popular Open CV algorithm. It has very important practical value in real life.
Key Words: Face recognition;Gesture control;Facialfeature value;Open CVCamera
隨著科技快速的發(fā)展,傳感技術(shù)已經(jīng)獲得質(zhì)的飛躍,人機(jī)交互的手段更加多樣,從傳統(tǒng)的鼠標(biāo)、鍵盤輸入設(shè)備,到現(xiàn)在的指紋識(shí)別、人臉識(shí)別、瞳孔識(shí)別、手勢(shì)控制等方式,與傳統(tǒng)的方式相比更加方便、直觀。但由于人臉識(shí)別與手勢(shì)控制對(duì)圖像處理的算法要求很高,開(kāi)發(fā)難度較大,現(xiàn)在人臉識(shí)別與手勢(shì)控制系統(tǒng)還不夠完善,都還處于發(fā)展?fàn)顟B(tài)[1]。
1 人臉識(shí)別
1.1 系統(tǒng)的總體設(shè)計(jì)
本文設(shè)計(jì)的是一個(gè)智能交互式人臉識(shí)別系統(tǒng),主要有人臉?shù)浫搿⑷四樧R(shí)別、收集未知人臉。
1.2 理論分析
1.2.1 人臉?shù)浫敕治?/p>
人臉?shù)浫霑r(shí),本文采用的是事先通過(guò)攝像頭對(duì)當(dāng)前的人臉進(jìn)行檢測(cè),然后將人臉的特征值信息錄入數(shù)據(jù)庫(kù),并將后面的未知人臉的信息錄入另一個(gè)數(shù)據(jù)庫(kù),以便于人臉?shù)浫胂到y(tǒng)的完善。
1.2.2 人臉識(shí)別
系統(tǒng)打開(kāi)筆記本自帶的攝像頭,通過(guò)攝像頭采集的人臉圖像,把圖像信息進(jìn)行轉(zhuǎn)換成特征信息,然后對(duì)圖片進(jìn)行檢測(cè),再與錄入的人臉進(jìn)行比對(duì),得出結(jié)果[2]。
1.3 算法設(shè)計(jì)
1.3.1 代碼的設(shè)計(jì)
對(duì)于人臉識(shí)別,主要采用Open CV和face_recognition庫(kù),face_recognition是基于dlib進(jìn)行了二次封裝,號(hào)稱世界上最簡(jiǎn)潔的人臉識(shí)別庫(kù)。dlib有專門的函數(shù)和模型,能夠?qū)崿F(xiàn)人臉68個(gè)特征點(diǎn)的定位。代碼主要簡(jiǎn)介如下。
load_image_file 這個(gè)方法主要用于加載要是別的人臉圖像,加載返回的數(shù)據(jù)是Numpy數(shù)組,記錄了圖片的所有像素的特征向量。
face_locations 定位圖片中所有的人臉的像素位置返回值是一個(gè)列表形式,列表中每一行是一張人臉的位置信息,包括[top,right,bottom,left]四方位坐標(biāo)。每個(gè)人臉就是一組元組信息,主要用于表示圖像中所有的人臉信息
face_landmarks 識(shí)別人臉關(guān)鍵特征點(diǎn)參數(shù)仍然是待檢測(cè)的圖像對(duì)象,返回值是包含面部特征點(diǎn)字典的列表,列表長(zhǎng)度就是圖像中的人臉數(shù)。面部特征包含以下幾個(gè)部分:nose_bridge(鼻梁)、right_eyebrow(右眼眉)、left_eyebrow(左眼眉)、right_eye(右眼)、left_eye(左眼)、chin(下巴)、nose_tip(人中、下鼻梁)、bottom_lip(下嘴唇)。
face_encodings 獲取圖像文件中所有面部編碼信息返回值是一個(gè)編碼列表,參數(shù)仍然是要識(shí)別的圖像對(duì)象。如果是后續(xù)訪問(wèn)時(shí),需要注意加上索引或遍歷進(jìn)行訪問(wèn)。每張人臉的編碼信息是一個(gè)128維向量。
面部編碼信息是進(jìn)行人像對(duì)比的重要參數(shù)。
compare_faces 由面部編碼信息進(jìn)行面部識(shí)別匹配用于匹配兩個(gè)面部特征編碼,利用這兩個(gè)特征向量的內(nèi)積來(lái)衡量他們的相似度,根據(jù)閾值確認(rèn)是否是同一個(gè)人。
第一個(gè)參數(shù)就是一個(gè)面部編碼列表(很多張臉),第二個(gè)參數(shù)就是給出單個(gè)面部編碼(一張臉)。
compare_faces會(huì)將第二個(gè)參數(shù)中的編碼信息與第一個(gè)參數(shù)中的所有編碼信息依次匹配,返回值是一個(gè)布爾列表,匹配成功則返回true,匹配失敗則返回false,順序與第一個(gè)參數(shù)中臉部編碼順序一致。
1.3.2人臉識(shí)別的結(jié)果
圖1為用此方法的識(shí)別結(jié)果舉例。
當(dāng)把頭像從人臉?shù)浫胂到y(tǒng)刪除或者出現(xiàn)人臉?shù)浫胂到y(tǒng)沒(méi)有的頭像時(shí),會(huì)顯示圖2所示圖像。
1.4 結(jié)論
根據(jù)功能要求,將系統(tǒng)分為兩個(gè)部分,分別為人臉圖像的錄入、人臉識(shí)別和未知頭像的保存。人臉識(shí)別主要是先用攝像頭采集頭像,對(duì)采集的頭像進(jìn)行特征值提取,再與錄入的部分圖像進(jìn)行對(duì)比,使用OpenCV庫(kù)進(jìn)行處理,來(lái)確定數(shù)據(jù)庫(kù)中的訓(xùn)練好的樣本和現(xiàn)在攝像頭拍攝的頭像檢測(cè)出人臉最相似的,也可以用參數(shù)要求對(duì)設(shè)計(jì)的系統(tǒng)多次進(jìn)行調(diào)試,可以提高準(zhǔn)確率,同時(shí)具有靈敏度高、穩(wěn)定性強(qiáng)等特點(diǎn)[2-3]。
2手勢(shì)識(shí)別
2.1 手勢(shì)的表示
手勢(shì)的表示方法有很多種,常見(jiàn)的表示方法是將手勢(shì)表示成一個(gè)向量,如使用手心的坐標(biāo)、輪廓中曲率較大的點(diǎn)等手勢(shì)特征組成的向量來(lái)表示。在手勢(shì)識(shí)別中,以輪廓中曲率較大的點(diǎn)作為特征點(diǎn)的魯棒性低,一方面是由于手在運(yùn)動(dòng)過(guò)程中存在變形,同一部分在相鄰兩幀圖像中的曲率往往存在較大差異;另一方面是由于這種方法對(duì)手勢(shì)分割的精度要求較高,很難適用于復(fù)雜背景、復(fù)雜光照的條件。此外,還有一種方法是使用直扳模型,它是人手物理結(jié)構(gòu)的一種簡(jiǎn)化形式,能有效地描述人手的3D特征,但同時(shí)也有算法復(fù)雜、對(duì)手勢(shì)分割的精度要求高等缺點(diǎn)[4]。
本文將人手劃分成手掌、手指關(guān)節(jié)兩部分,使用結(jié)構(gòu)分析的方法來(lái)表示手勢(shì),這兩部分描述手勢(shì)的角度和層次不同,是一種從整體到局部逐漸細(xì)化的表示法;手掌可以作為一點(diǎn)(手心)或一塊來(lái)表示整個(gè)手,而手指的關(guān)節(jié)則較為詳細(xì)地描述人手信息[4]。
2.2 手勢(shì)獲取的技術(shù)
手勢(shì)獲取技術(shù)主要分為兩類:基于視覺(jué)技術(shù),主要靠攝像機(jī)進(jìn)行手勢(shì)識(shí)別與跟蹤;基于可穿戴的手套、戒指、手鐲等設(shè)備輸出的數(shù)據(jù)進(jìn)行識(shí)別。這兩類方法的主要區(qū)別在于;基于視覺(jué)的技術(shù)無(wú)干擾或者少干擾,用戶不需要戴傳感器,可以用手進(jìn)行交互,更符合用戶的交互習(xí)慣;而基于可穿戴設(shè)備的技術(shù)需要在手上安裝其他傳感器,對(duì)用戶有干擾[5]。本文采用關(guān)節(jié)等效距離特征識(shí)別方法[6],將通過(guò)對(duì)手指的各個(gè)關(guān)節(jié)彎曲的角度,利用21個(gè)關(guān)節(jié)的相關(guān)數(shù)據(jù),對(duì)這21個(gè)關(guān)節(jié)點(diǎn)組成的手,先通過(guò)攝像頭提取手的特征信息,構(gòu)造一種有效距離特征和手指伸直程度特征,根據(jù)不同手勢(shì)對(duì)應(yīng)不同的特征信息進(jìn)行手勢(shì)識(shí)別[6]。
2.3手勢(shì)識(shí)別結(jié)果
手勢(shì)識(shí)別前先建立可能出現(xiàn)結(jié)果的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)為1到5這5位數(shù)的5張手勢(shì)照片,本文只以1到5這5個(gè)數(shù)做簡(jiǎn)單的舉例,通過(guò)筆者筆記本電腦自帶的攝像頭拍攝的圖像,追蹤到手部區(qū)域?qū)κ植康?1個(gè)關(guān)節(jié)點(diǎn)進(jìn)行分析,得到這21個(gè)關(guān)節(jié)點(diǎn)的三維坐標(biāo),再通過(guò)圖像分析得到與數(shù)據(jù)庫(kù)內(nèi)最相似的圖片,并最后返回一個(gè)數(shù),結(jié)果如圖3、圖4所示。
2.4 結(jié)論
本文用OpenCV算法,從實(shí)時(shí)視頻流中讀取手部關(guān)節(jié)點(diǎn)信息,并且對(duì)這21個(gè)關(guān)節(jié)點(diǎn)進(jìn)行分析,得出基于關(guān)節(jié)點(diǎn)等效距離特征和手指伸直程度和關(guān)節(jié)點(diǎn)的位置數(shù)量的手勢(shì)識(shí)別方法,并與數(shù)據(jù)庫(kù)中的圖像進(jìn)行對(duì)比,得出結(jié)果,結(jié)果表明了此方法的有效性,相比于傳統(tǒng)的Kinect方法,此方法更加簡(jiǎn)便、有效,實(shí)用性更高。
3手勢(shì)控制
3.1 研究背景
隨著科技的發(fā)展,人們和社會(huì)對(duì)“智能化”的需求越來(lái)越大,而人機(jī)交互已經(jīng)成為主要的“智能化”方式,也成為人們研究的重點(diǎn)。人機(jī)交互主要有以上研究的人臉識(shí)別、手勢(shì)識(shí)別,以及接下來(lái)要研究的手勢(shì)控制等。手勢(shì)控制需要借助于手勢(shì)識(shí)別,對(duì)攝像頭拍攝的圖像序列進(jìn)行分析處理。當(dāng)今國(guó)內(nèi)外有許多種研究手勢(shì)控制的傳統(tǒng)方法,如穿戴數(shù)據(jù)手套、采用RealSense 3D攝像頭采集圖像進(jìn)行圖像處理[7]。而本文則借助簡(jiǎn)單的筆記本電腦自帶的攝像頭進(jìn)行手勢(shì)控制。
3.2 系統(tǒng)方案
本文采用Python3.6版本借用Autopy 、Numpy和OpenCV等函數(shù)庫(kù)對(duì)手勢(shì)的特征值信息進(jìn)行提取,并實(shí)現(xiàn)手勢(shì)運(yùn)動(dòng)時(shí)的運(yùn)動(dòng)特征提取提取,得到21個(gè)關(guān)節(jié)點(diǎn)的三維坐標(biāo)信息,再檢測(cè)是否只有食指伸出,若只有食指伸出,則進(jìn)入移動(dòng)模式。通過(guò)攝像頭拍攝的食指的位置,就可以得到食指的“關(guān)節(jié)點(diǎn)”的三維坐標(biāo)信息,并將食指的坐標(biāo)信息轉(zhuǎn)化為鼠標(biāo)在桌面的信息。當(dāng)食指的“關(guān)節(jié)點(diǎn)”運(yùn)動(dòng)到某個(gè)位置時(shí),再檢測(cè)食指和中指是否都伸出,若食指和中指都伸出,則檢測(cè)食指和中指兩指尖的“關(guān)節(jié)點(diǎn)”的距離,若果距離短到一定的值時(shí)則對(duì)應(yīng)為鼠標(biāo)的點(diǎn)擊。
3.3 動(dòng)態(tài)手勢(shì)的獲取
由于攝像頭拍攝手勢(shì)圖像時(shí)容易受到手勢(shì)的背景等各種外部環(huán)境的影響,而要從各種不同或復(fù)雜多變的環(huán)境中提取中手勢(shì)位置、形狀的改變,就必須要考慮背景顏色、物體與攝像頭的距離等因素的影響。因此,借用一種比較簡(jiǎn)單但實(shí)用的方法來(lái)盡可能減少噪聲干擾[8]。
借用背景差分法,通過(guò)攝像頭拍攝圖像與背景的圖像進(jìn)行對(duì)比,得出運(yùn)動(dòng)的目標(biāo)。首先要有一個(gè)明亮干凈的背景,如果在黑暗環(huán)境下,手勢(shì)的提取效果會(huì)變差。用攝像頭拍攝的視頻中某一幀圖像和背景圖像進(jìn)行差分運(yùn)算,并將計(jì)算的結(jié)果存入一個(gè)新的圖像中去。在新得到的圖像中,如果像素的值大于一個(gè)特定的閾值,則認(rèn)為視頻圖像中在相同位置的像素屬于運(yùn)動(dòng)目標(biāo)區(qū)域;若像素的值小于或等于一個(gè)特定的閾值,則認(rèn)為視頻圖像中在相同位置屬于背景區(qū)域,通過(guò)此方法就可以提取運(yùn)動(dòng)的手勢(shì)[8]。提取運(yùn)動(dòng)的手勢(shì)后,再通過(guò)Open CV函數(shù)得到手勢(shì)的幾何特征,即先根據(jù)手勢(shì)識(shí)別得到的21個(gè)關(guān)節(jié)點(diǎn)的三維坐標(biāo)信息,對(duì)這21個(gè)掛節(jié)點(diǎn)進(jìn)行建模,得到關(guān)節(jié)點(diǎn)的信息為M,可以表示為[6]:
M ?(1)
其中, 表示第i個(gè)關(guān)節(jié)點(diǎn)的j分量的值。計(jì)算除0節(jié)點(diǎn)外,每?jī)蓚€(gè)節(jié)點(diǎn)的距離D,其公式為:
(2)
同時(shí),為了減小不同人的手大小可能不同,所以我們進(jìn)行標(biāo)準(zhǔn)化處理,其計(jì)算公式為:
(3)
其中, 表示關(guān)節(jié)點(diǎn)m到關(guān)節(jié)點(diǎn)n的等效距離。
3.4 動(dòng)態(tài)檢測(cè)手勢(shì)的優(yōu)化
現(xiàn)實(shí)生活中的動(dòng)態(tài)手勢(shì)的檢測(cè)中,大多數(shù)情況下要求算法能夠在沒(méi)有人為干預(yù)下,自動(dòng)進(jìn)行手勢(shì)的檢測(cè)。而這對(duì)程序和算法的要求非常高,對(duì)攝像頭采集圖片的精度依賴性很高。再加上外界環(huán)境中光照等復(fù)雜環(huán)境的影響,使得攝像頭檢測(cè)手勢(shì)的移動(dòng)很困難。
本文在手勢(shì)檢測(cè)處理的步驟中,利用傳統(tǒng)的機(jī)械學(xué)習(xí)的方法構(gòu)造出手部關(guān)節(jié)點(diǎn)的特征,在用基于骨架的動(dòng)態(tài)手勢(shì)識(shí)別方法,此方法提取4種手部形狀特征和手部方向特征,在輸入線性SVM分類器進(jìn)行識(shí)別[5],得出21個(gè)關(guān)節(jié)點(diǎn)特征信息,比普通的特征值提取效果更好。
3.5 實(shí)驗(yàn)結(jié)果
通過(guò)用Python3.6版本和OpenCV算法,系統(tǒng)Win10,攝像頭為筆記本自帶的攝像頭,手勢(shì)控制結(jié)果如圖5和圖6所示。
如圖5所示,當(dāng)只有一個(gè)食指的時(shí)候,會(huì)在食指的指尖顯示一個(gè)“紅色的小點(diǎn)”,這時(shí)則可以通過(guò)攝像頭拍攝的照片來(lái)捕獲食指的三維坐標(biāo),代替鼠標(biāo)指針的移動(dòng);當(dāng)伸出食指和中指時(shí),此時(shí)食指則不能控制鼠標(biāo)的移動(dòng),但如圖6所示,在食指和中指的指尖處會(huì)出現(xiàn)一條“紅線”用來(lái)測(cè)量?jī)芍甸g的距離,當(dāng)兩指尖的距離小于某個(gè)值時(shí),就會(huì)出現(xiàn)圖5所示的現(xiàn)象,此時(shí)表示鼠標(biāo)的點(diǎn)擊,從而完成簡(jiǎn)易的鼠標(biāo)控制。
3.6 結(jié)論
本文從上面介紹的手勢(shì)識(shí)別和本實(shí)驗(yàn)的手勢(shì)控制的整體流程,關(guān)節(jié)點(diǎn)的設(shè)置、測(cè)量、和OpenCV算法的實(shí)現(xiàn),以及手勢(shì)獲取的優(yōu)化等等方法,最后實(shí)驗(yàn)證實(shí)基于OpenCV的手勢(shì)識(shí)別算法有一定的簡(jiǎn)易性和準(zhǔn)確性。隨著人機(jī)交互方式的不斷升級(jí),手勢(shì)控制將在不久的將來(lái)應(yīng)用越來(lái)越廣泛,同時(shí)手勢(shì)控制也將給人們帶來(lái)更多的便捷之處。
4結(jié)語(yǔ)
隨著科技的飛速發(fā)展,人們不斷追求“智能化”,本文通過(guò)本電腦自帶的普通攝像頭,首先捕獲人臉,進(jìn)行臉部特征值的提取,采用OpenCV算法,與建立的錄入人臉數(shù)據(jù)庫(kù)內(nèi)的人臉進(jìn)行對(duì)比后,找到最相似的人臉,同時(shí)發(fā)現(xiàn)未知人臉也可以保存下來(lái),以便以后完善錄入人臉的數(shù)據(jù)庫(kù),然后得出結(jié)果,結(jié)果發(fā)現(xiàn)準(zhǔn)確率很高。再通過(guò)攝像頭拍攝的視頻得到手部的21個(gè)“關(guān)節(jié)點(diǎn)”,采用基于關(guān)節(jié)點(diǎn)等效距離特征和手指伸直程度和關(guān)節(jié)點(diǎn)的位置數(shù)量的手勢(shì)識(shí)別方法,并采用OpenCV算法進(jìn)行幾何特征提取得到每個(gè)“關(guān)節(jié)點(diǎn)”的三維坐標(biāo)信息,根據(jù)三維坐標(biāo)信息與實(shí)現(xiàn)建立的手勢(shì)數(shù)據(jù)庫(kù)內(nèi)進(jìn)行特征信息的對(duì)比,得出手勢(shì)代表的數(shù)字,然后得出簡(jiǎn)單的手勢(shì)識(shí)別結(jié)果。最后在手勢(shì)識(shí)別的基礎(chǔ)上,借用手勢(shì)識(shí)別和OpenCV算法,再利用傳統(tǒng)的機(jī)械學(xué)習(xí)的方法構(gòu)造出手部關(guān)節(jié)點(diǎn)的特征,通過(guò)基于骨架的動(dòng)態(tài)手勢(shì)識(shí)別方法優(yōu)化手勢(shì)的識(shí)別,得到21個(gè)“關(guān)節(jié)點(diǎn)”的坐標(biāo)信息,并用食指的移動(dòng)代表鼠標(biāo)的移動(dòng),中指和食指之間的距離代表鼠標(biāo)的左鍵(確定鍵),最后完成簡(jiǎn)易的手勢(shì)控制。這3個(gè)實(shí)驗(yàn)在算法上有一定的相似之處,相輔相成,推動(dòng)了人機(jī)交互的發(fā)展,在人機(jī)交互中有重要的借鑒意義。
參考文獻(xiàn)
[1]夏梓璐,譚方敏,李靜.基于手勢(shì)控制的鼠標(biāo)設(shè)計(jì)[J].信息與電腦:理論版,2021,33(9):134-137.
[2]李成勇,王莎,陳成瑞.基于OpenCV的人臉識(shí)別系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].國(guó)外電子測(cè)量技術(shù),2021,40(11):168-172.
[3]邵曉康,張恒,田春子,等.OpenCV算法的人臉識(shí)別在課堂簽到系統(tǒng)上的分析與研究[J].電子世界,2021(23):31-32.
[4]朱繼玉,王西穎,王威信,等.基于結(jié)構(gòu)分析的手勢(shì)識(shí)別[J].計(jì)算機(jī)學(xué)報(bào),2006(12):2130-2137.
[5]張維,林澤一,程堅(jiān),等.動(dòng)態(tài)手勢(shì)理解與交互綜述[J].軟件學(xué)報(bào),2021,32(10):3051-3067.
[6]張遠(yuǎn)來(lái),王傳江,黃燦.基于Realsense的手勢(shì)識(shí)別與應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2019,40(03):839-844,873.
[7]胡茜. 基于深度學(xué)習(xí)的三維手勢(shì)識(shí)別模型的研究與應(yīng)用實(shí)例[D].昆明:云南大學(xué),2017.
[8]賁永明,管孟凌,李丹陽(yáng),等.智能手勢(shì)控制系統(tǒng)的算法實(shí)現(xiàn)[J].中國(guó)科技信息,2014(1):95-97.