廖周宇 王鈺婷 陳科良
(河池學院計算機與信息工程學院 廣西壯族自治區(qū)河池市 546300)
人臉檢測是指對電子設備采集到的圖像進行搜索,找到所有可能是人臉的位置,并返回人臉位置和大小的過程。人臉識別中搜索部分所有操作都是基于人臉檢測的結果上進行,所以人臉檢測是人臉識別的一個關鍵環(huán)節(jié),檢測效果的好壞直接影響到人臉識別的效率和效果。因此,本文研究與實現(xiàn)一個對正臉、側臉、仰臉、垂頭臉、遮擋臉等不同姿態(tài)人臉圖像都有較好的檢測效果的人臉檢測算法具有一定的應用價值和意義。
目前OpenCV 庫中的級聯(lián)檢測器主要有正臉、左側臉、眼睛、嘴巴、鼻子等HAAR 級聯(lián)檢測器,但直接使用OpenCV 庫進行人臉檢測會存在以下問題:
(1)檢測范圍小,只能直接檢測出正臉和左側臉,對于局部遮擋臉、右側臉、仰頭臉、低頭臉等基本檢測不出來。
(2)檢測結果不準確,利用OpenCV 庫進行人臉檢測返回的是一個矩形位置,但是該矩形存在著重復人臉矩形結果、非人臉矩形結果,導致檢測結果雜亂。
(3)檢測人臉包含過多背景,利用OpenCV 庫中的檢測算法進行人臉檢測得到的人臉范圍往往比較大,把多余的部分背景也包含其中了。
(4)檢測圖像占用空間大,檢測耗時長。
綜上所述,要想設計和實現(xiàn)一個更優(yōu)的人臉檢測算法,需要解決上述問題。因此,本文的人臉檢測算法針對上述問題進行解決,解決新途徑如下:
(1)算法除實現(xiàn)基本的正臉檢測之外,還需實現(xiàn)側臉檢測、結合鼻子和嘴巴的五官臉檢測,使算法對正臉、側臉、仰臉、垂頭臉、遮擋臉等不同姿態(tài)人臉都有較好的檢測效果,達到擴大檢測范圍的目的。
(2)設置篩選算法把不是人臉的結果以及重復人臉結果過濾掉,提高檢測結果的準確率。
(3)本算法通過設置精確人臉位置算法,去除多余的背景。
(4)在確保對檢測效果影響非常小的前提下,犧牲一定的圖像質量縮短檢測時間。
HAAR 級聯(lián)分類器是采用積分圖方法和高效率的Haar-like 特征來進行底層特征提取,且把AdaBoost 算法所訓練出來的強分類器進行級聯(lián),最終形成的正確率極高的級聯(lián)分類器。它有以下兩個體系:
圖1:積分圖構建流程圖
(1)訓練體系是通過積分圖來計算人臉樣本集和非人臉樣本集的Haar-like 特征得到特征集,根據(jù)特征集生成最初弱分類器集,從弱分類器集選出最優(yōu)弱分類器,之后用Adaboost 算法訓練出強分類器集,對強分類器級聯(lián)生成HAAR 級聯(lián)分類器。
(2)檢測體系以電子設備采集的圖像作為輸入,以一定的擴大比例來不斷初始化搜索窗口大小,用初始化大小后的搜索窗口在采集到的圖像中不斷移動,每移動到一個位置,就對搜索窗口內的圖像進行特征提取,把提取到的特征用訓練好的級聯(lián)分類器判斷,判斷得出搜索窗口的圖像是否含有人臉的結果。
圖2:原圖和積分圖
圖3:級聯(lián)分類器識別過程圖
積分圖是一種犧牲空間換時間的矩陣表示方法,積分圖中的積分主要是求和,積分圖中每個值sum(i,j)是對應原圖像src(i,j)左上角方向所有像素值之和,公式如下:
積分圖的構建流程如圖1 所示。
根據(jù)圖2 的積分圖,計算邊緣矩形特征的特征值:
可以看出,根據(jù)積分圖來計算矩形特征只需一條加減運算語句,計算特征值的時間復雜度由原先的O(m*n)降為O(1),所以通過積分圖可以較大提高特征的計算速度。
AdaBoost 算法是一種基于Boosting 思想的迭代型的機器學習算法,其核心思想是在一個包含正樣本和負樣本的訓練樣本集上找到一個最優(yōu)弱分類器,并利用同一個訓練樣本集,對弱分類器進行迭代訓練得到一系列弱分類器,把這些弱分類器組合構成了一個錯誤率很低的強分類器。基于Adaboost 算法生成強分類器可以分為以下步驟:
圖4:精確人臉流程圖
圖5:精確人臉效果圖
(1)找到最優(yōu)弱分類器h1。最初的弱分類器集是由一個個最基本的Haar-like 特征組成,通過比較這些弱分類器對訓練樣本集分類之后的誤差率,從中選一個誤差率相對最小的弱分類器作為最優(yōu)弱分類器。
注:ε 是誤差率,eo 是樣本分類錯誤數(shù),N 是樣本總數(shù)。
(2)初始化訓練樣本集的權值S1。比如有N 個訓練樣本,最開始每個訓練樣本的權值都為1/N。
圖6:五官人臉檢測流程圖
(3)利用弱分類器h1 對訓練樣本集進行學習(分類),得到誤差率ε,利用誤差率ε 計算弱分類器h1 在強分類器中占的權重 。
(4)重新調整樣本的權值,即提高被分類錯誤樣本的權值,使其在接下來的分類中被正確分類的可能性提高,調整公式如下:
注:P1 是權值集合S1 的和,S1(i)是第i 個樣本在弱分類器h1上占的權值,S2(i)是第i 個樣本在第二個弱分類器h2 上占的權值。
(5)根據(jù)權值集合S2 進行學習得到第二個弱分類器。
(6)重復進行(3)-(5)步的迭代訓練,得到弱分類器集hi及其在強分類器中所占權重集合 。
(7)將訓練得到的弱分類器集組合構建成一個強分類器H,組合方式如下:
圖7:改進后的人臉檢測算法實現(xiàn)流程圖
由AdaBoost 算法訓練得到的強分類器往往存在著兩種情況,一種是強分類器誤識別率低、檢測率也低;一種是強分類器的誤識別率高、檢測率也高。而為了解決這個矛盾,有了級聯(lián)分類器,這是把包含兩種情況的多個強分類器組合在一起,從而達到誤識別率低、檢測率高的效果。因此,根據(jù)對最優(yōu)弱分類器的迭代次數(shù)不同,得到的多個弱分類器集合,這些不一樣的弱分類器集合構建成了強分類器集合;由強分類器集合級聯(lián)在一起,組成了一個級聯(lián)分類器。級聯(lián)分類器對人臉的判斷實際是一個個強分類器對人臉判斷的最終結果,判斷過程如圖3 所示。
圖8:五官人臉檢測效果圖
利用OpenCV 庫中的檢測算法進行人臉檢測得到的人臉范圍較大,把多余的部分背景包含進去了,從而導致檢測結果不準確。所以本文對檢測出來的人臉進行研究,設計了人臉圖像精確人臉位置的算法,通過精確人臉位置,把多余的背景消除,算法處理流程如圖4 所示。
根據(jù)精確人臉流程圖對人臉圖像進行處理,實現(xiàn)效果如圖5 所示。
直接基于HAAR 級聯(lián)分類器的人臉檢測雖然對正臉和左側臉的檢測效果都能達到要求,但是對于仰頭臉、低頭臉、半遮擋臉的檢測效果極差。而鼻子、嘴巴是臉部的重要特征,在正臉、側臉、仰頭臉、低頭臉、半遮擋臉都能清楚的找到,而HAAR 級聯(lián)分類器雖然沒有對仰頭臉、低頭臉、半遮擋臉圖像進行過訓練,但是對鼻子和嘴巴有進行過訓練。因此,本算法在基于針對鼻子和嘴巴進行檢測的HAAR 級聯(lián)檢測器設計了五官臉檢測算法,即通過HAAR 級聯(lián)檢測器定位鼻子和嘴巴的位置,然后通過鼻子和嘴巴的位置、大小來確定人臉的位置和大小,結合鼻子和嘴巴的人臉檢測流程如圖6 所示。
結合上述兩個算法,本文基于HAAR 級聯(lián)分類器而設計出的改進后人臉檢測算法實現(xiàn)流程如圖7 所示。
根據(jù)上述算法進行代碼實現(xiàn),并用不同姿態(tài)人臉圖像進行實驗測試,具體檢測效果如圖8 所示。
本文詳細介紹了HAAR 級聯(lián)分類器的原理,結合鼻子和嘴巴的五官臉算法、精確人臉去除背景等算法實現(xiàn)流程,并針對OpenCV 庫中人臉檢測算法存在的檢測效率低、檢測人臉范圍小、檢測人臉不精確、檢測人臉包含過多背景等諸多問題進行解決,從檢測范圍、檢測耗時、檢測結果、檢測人臉等四個方面入手,設計與實現(xiàn)了結合五官人臉檢測算法、精確去除背景人臉算法、篩選算法等三個人臉檢測算法。實驗結果表明,改進之后的人臉檢測算法解決了諸多問題,不僅檢測耗時縮短、結果更精確、多余背景雜質被去除,而且檢測范圍更廣,對正臉、左右側臉、仰頭臉、低頭臉、半遮擋臉等不同姿態(tài)的人臉圖像都有較好的檢測效果,性能得到了一定程度的提升。