陶建航 張琪
摘 要:人臉檢測是指使用計算機在動態(tài)的場景或復(fù)雜的背景中檢測出人臉的存在,并確定所有人臉的位置與大小的過程。人臉檢測技術(shù)是人臉識別、表情識別、人臉跟蹤等技術(shù)的重要前提條件,同時在模式識別、人機交互、智能監(jiān)控、視頻檢索等領(lǐng)域也有廣泛的應(yīng)用。
JavaCV在OpenCV基礎(chǔ)上提供了進行人臉識別的API。本文介紹了PC上使用Eclipse集成開發(fā)環(huán)境搭建了基于JavaCV的人臉檢測的算法及其系統(tǒng)。
關(guān)鍵詞:人臉檢測;JavaCV;OpenCV
一、 人臉檢測現(xiàn)狀分析
人臉檢測問題最初來源于人臉識別,任何一個自動的人臉識別系統(tǒng)首先必須對人臉進行準(zhǔn)確的定位,因此實時而有效的人臉檢測顯得尤為重要。跟其他生物特征識別方法相比,人臉識別具有更加直接、方便、友好的特點,因其非侵犯性更容易被用戶所接受。而且,通過對人臉的表情、姿勢等作分析,還能獲得其他識別系統(tǒng)難以獲得的信息,因此人臉識別成為最有潛力的生物身份驗證手段。早期的人臉識別研究主要針對具有較強約束條件的人臉圖像(如無背景的圖像),因此假設(shè)人臉容易獲得或在手工交互下運用,而人臉檢測問題并未得到重視。
近年來,隨著信號處理理論和計算機的出現(xiàn)及其發(fā)展,人們開始用攝像機獲取環(huán)境圖像并將其轉(zhuǎn)換成數(shù)字信號,用計算機實現(xiàn)對視覺信息的處理,這就形成了計算機視覺。計算機視覺是當(dāng)前計算機科學(xué)中的一個非常活躍的領(lǐng)域,其基本假設(shè)是:可以用計算的方式來模擬人類的視覺機制。
人臉的自動識別是一種重要的生物特征識別技術(shù),與其它身份識別方法相比,人臉識別具有直接、方便、友好等特點,因而人臉自動識別問題的研究不僅具有重要的應(yīng)用價值,而且具有重要的理論意義。現(xiàn)在,隨著科學(xué)技術(shù)和電子商務(wù)的發(fā)展,人臉檢測的應(yīng)用背景已經(jīng)遠遠超出了人臉識別系統(tǒng)的范疇,在基于內(nèi)容的檢索、數(shù)字視頻處理、計算機視覺、人機交互等方面都有著重要的應(yīng)用價值。
人臉識別通過計算機提取人臉的特征,并根據(jù)這些特征進行身份驗證。人臉與其他生物特征(指紋、虹膜等)一樣與生俱來不可改變,它們所具有的唯一性和不易被復(fù)制的良好特性為身份鑒別提供了必要的前提,同其他生物特征識別技術(shù)相比,人臉識別技術(shù)具有操作簡單、結(jié)果直觀、隱蔽性好的優(yōu)越性。人臉識別一般包括三個步驟:人臉檢測、人臉特征提取和人臉的識別與驗證。其處理流程如圖1所示。
圖1 人臉識別的一般步驟
二、 使用JavaCV進行人臉識別的方法
人臉檢測一種主流的方法就是類haar adaboost方法,OpenCV中也是用的這種方法。這種方法可以推廣到剛性物體的檢測,前提是要訓(xùn)練好級聯(lián)分類器(比如說用類haar特征),一旦訓(xùn)練數(shù)據(jù)弄好了,直接調(diào)用OpenCV中的類CascadeClassifier,用它的幾個簡單的成員函數(shù)就可以完成檢測功能。
2.1 Adaboost算法簡介
Adaboost是一種迭代算法,其核心思想是針對同一個訓(xùn)練集訓(xùn)練不同的分類器(弱分類器),然后把這些弱分類器集合起來,構(gòu)成一個更強的最終分類器(強分類器)。其算法本身是通過改變數(shù)據(jù)分布來實現(xiàn)的,它根據(jù)每次訓(xùn)練集之中每個樣本的分類是否正確,以及上次的總體分類的準(zhǔn)確率,來確定每個樣本的權(quán)值。將修改過權(quán)值的新數(shù)據(jù)集送給下層分類器進行訓(xùn)練,最后將每次訓(xùn)練得到的分類器最后融合起來,作為最后的決策分類器。使用Adaboost分類器可以排除一些不必要的訓(xùn)練數(shù)據(jù)特徵,并將關(guān)鍵放在關(guān)鍵的訓(xùn)練數(shù)據(jù)上面。Adaboost 算法是1995 年提出的一種快速人臉檢測算法,是人臉檢測領(lǐng)域里程碑式的進步,這種算法根據(jù)弱學(xué)習(xí)的反饋,適應(yīng)性地調(diào)整假設(shè)的錯誤率,使在效率不降低的情況下,檢測正確率得到了很大的提高。
Adaboost算法是目前在人臉檢測方面檢測速度較快、檢測效果較好的一種檢測方法,它是一種把弱分類器采用級聯(lián)的方式訓(xùn)練成為強分類器的方法。這些弱分類器只需要滿足比隨機猜測好一點,就能通過不斷的修正每個弱分類器的權(quán)值,即挑選那些比較好的分類器,拋棄不好的分類器,從而最終形成由這些弱分類器組成的強分類器,相比較其他的方法而言,Adaboost方法對每個弱分類器的權(quán)值的形成都是無人值守的,完全自動化的,因而Adaboost算法有著比較好的易用性。大量的實驗證明,Adaboost算法是有效的將多弱分類器強化成為強分類器的一種方法,經(jīng)過訓(xùn)練的分類器具有比較好的分類效果,而且速度較快。
2.2 Google識圖
本系統(tǒng)采用Google識圖技術(shù),Google識圖的關(guān)鍵技術(shù)叫做感知哈希算法(Perceptual Hash Algorithm),它的作用是對每張圖片生成一個"指紋"(fingerprint)字符串,然后比較不同圖片的指紋,結(jié)果越接近,說明圖片越相似。
下面是一個最簡單的實現(xiàn):
第一步,縮小尺寸。
將圖片縮小到8x8的尺寸,總共64個像素。這一步的作用是去除圖片的細節(jié),只保留結(jié)構(gòu)、明暗等基本信息,摒棄不同尺寸、比例帶來的圖片差異。
第二步,簡化色彩。
將縮小后的圖片,轉(zhuǎn)為64級灰度。也就是說,所有像素點總共只有64種顏色。
第三步,計算平均值。
計算所有64個像素的灰度平均值。
第四步,比較像素的灰度。
將每個像素的灰度,與平均值進行比較。大于或等于平均值,記為1;小于平均值,記為0。
第五步,計算哈希值。
將上一步的比較結(jié)果,組合在一起,就構(gòu)成了一個64位的整數(shù),這就是這張圖片的指紋。組合的次序并不重要,只要保證所有圖片都采用同樣次序就行了。
得到指紋以后,就可以對比不同的圖片,看看64位中有多少位是不一樣的。在理論上,這等同于計算"漢明距離"(Hamming distance)。如果不相同的數(shù)據(jù)位不超過5,就說明兩張圖片很相似;如果大于10,就說明這是兩張不同的圖片。圖2給出了Google識圖的流程圖
圖2 Google識圖的流程圖
這種算法的優(yōu)點是簡單快速,不受圖片大小縮放的影響,缺點是圖片的內(nèi)容不能變更。如果在圖片上加幾個文字,它就認不出來了。所以,它的最佳用途是根據(jù)縮略圖,找出原圖。
本論文就是在此基礎(chǔ)上運用人臉識別算法找出靜態(tài)圖片人臉位置后,進行截圖,并根據(jù)其他靜態(tài)圖片的人臉截圖進行相似度比對,判別是否同一人。
三、實驗分析和研究
本系統(tǒng)應(yīng)用JavaCV進行人臉識別,于靜態(tài)的圖片上截取人臉后,使用Google識圖的原理,將圖片與其他靜態(tài)圖片的頭像進行比對,當(dāng)相似度在一定范圍內(nèi)時,則認為為同一人。
而在視頻等動態(tài)圖中尋找人臉,我們是使用了ffmpeg的軟件對視頻按時間進行截圖,命名方式就是以時間命名,之后的人臉比對就是靜態(tài)圖片之間的人臉比對了,當(dāng)發(fā)現(xiàn)與要求人物所在圖片時,根據(jù)圖片取名字,即可得到當(dāng)前人物在視頻中出現(xiàn)的時間,以此給出結(jié)果。
圖3給出了本系統(tǒng)進行比對的流程圖。
圖3 系統(tǒng)人臉識別的流程
本系統(tǒng)可較好地實現(xiàn)人臉的識別和判斷,但由于本身的學(xué)習(xí)數(shù)據(jù)不足,并不是每個人臉都能檢測出來。特別是在圖片邊界上的人臉,也就是被遮擋了部分的人臉,基本檢測不出來。還有,在人眼不是特別正的情況下,也不易檢測,這應(yīng)為訓(xùn)練數(shù)據(jù)不充分或OpenCV算法的原因。另外,本系統(tǒng)中拍攝圖片時的光線強度和人臉的相對傾斜都對系統(tǒng)的人臉識別有一定的影響,這也有待系統(tǒng)算法的改進。
四、結(jié)論
本文使用JavaCV進行人臉圖像的采集、處理和檢驗,基本實現(xiàn)了人臉的識別和檢驗。但系統(tǒng)還存在一些不足,可在下面兩點進一步改進,首先需要改進人臉的識別,使得在圖片中的人臉?biāo)褜?zhǔn)確率提高。其次,在進行人臉圖片比對時,應(yīng)使用不易被光線影響的計算人臉特征值的算法進行計算,減少某些因素的影響,提高系統(tǒng)識別準(zhǔn)確率。
參考文獻:
[1] 蘇草,林亞明.基于人臉識別的移動終端課堂考勤系統(tǒng)[J].計算機光盤軟件與應(yīng)用, 2014(4):112-113
[2] 秦小文,等.基于OpenCV的圖像處理[J], 電子測試,2011(7):51-53
[3] 曹瑩,等. AdaBoost算法研究進展與展望[J], 自動化學(xué)報,2013(6):89-92
[4] 黑吧安全網(wǎng). 利用OpenCV實現(xiàn)人臉檢測[J/OL].2014-6. www.myhack58.com/Article/68/2014/49692.htm
[5]阮一峰. 相似圖片搜索的原理[J/OL].2013-3. www.ruanyifeng.com/blog/2011/07/principle_of_similar_image_search.html
作者簡介:
陶建航(1991.10-),男,漢族,浙江溫州人,本科學(xué)生,研究方向:手機及網(wǎng)絡(luò)系統(tǒng)開發(fā)與應(yīng)用
張琪(1972.9-),男,漢族,江蘇南京人,碩士,副教授,研究方向:物聯(lián)網(wǎng)及其應(yīng)用技術(shù)等;