摘 要:人臉是確定人類身份的最重要的身份特征,本文利用OpenCV設(shè)計(jì)并實(shí)現(xiàn)了視頻流中的人臉實(shí)時(shí)檢測系統(tǒng),并通過實(shí)驗(yàn)進(jìn)行了驗(yàn)證,效果較好。
關(guān)鍵詞:OpenCV;人臉檢測;實(shí)時(shí)
中圖分類號:TP391.41
人臉檢測(Face Detection)是指對于給定的圖像或視頻,采用一定的策略對其進(jìn)行搜索以確定其中是否含有人臉,如果是則返回一臉的位置、大小和姿態(tài)。人臉檢測是人臉識別的重要環(huán)節(jié),運(yùn)用攝像機(jī)或攝像頭采集含有人臉的視頻流,并進(jìn)行實(shí)時(shí)的人臉檢測是目前主流的應(yīng)用。
OpenCV(Open Source Computer Vision Library)是開源的計(jì)算機(jī)視覺代碼庫,它輕量級而且高效,由一系列C函數(shù)和少量C++類構(gòu)成,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面的很多通用算法[1]。
1 系統(tǒng)設(shè)計(jì)
本系統(tǒng)采用了OpenCV的基于boost篩選式級聯(lián)Haar分類器,該分類器是通過成千上萬的物體各個(gè)角度的訓(xùn)練圖像訓(xùn)練出來的,它先對圖像進(jìn)行直方圖均衡化處理,并將圖像歸一化到同樣大小,然后標(biāo)記是否包含要檢測的物體,在人臉檢測方面比較擅長。系統(tǒng)加載分類器后,利用OpenCV的視頻捕獲函數(shù)實(shí)時(shí)捕獲連接在電腦上的攝像頭讀入的視頻流,并將抓取的視頻幀轉(zhuǎn)換為圖像,然后對圖像進(jìn)行人臉檢測和標(biāo)定,具體流程圖如圖1所示:
圖1 系統(tǒng)流程圖
2 系統(tǒng)實(shí)現(xiàn)
本系統(tǒng)在WindowsXP操作系統(tǒng)下使用VC++6.0基于OpenCV1.0進(jìn)行開發(fā)。系統(tǒng)具體實(shí)現(xiàn)如下:
(1)初始化聲明。通過CvMemStorage*captureFaceStorage=cvCreateMemStorage(0);語句創(chuàng)建一個(gè)內(nèi)存存儲器,來統(tǒng)一管理各種動態(tài)對象的內(nèi)存,參數(shù)為0時(shí)創(chuàng)建的內(nèi)存塊默認(rèn)大小為64k。然后分別聲明分類器對象、圖像對象級聯(lián)名稱及識別函數(shù)等成員:
Static CvHaar Classifier Cascade* cascade=0;
Ipl Image *frame,*frame_copy=0;
Char* capture Face Cascade_name=〞haarcascade_frontalface_alt2.xml〞;
(2)加載分類器。通過cvLoad函數(shù),加載調(diào)用CvHaarClassifierCascade類的分類器文件“haarcascade_frontalface_alt2.xml”:
cascade=(CvHaarClassifierCascade*)cvLoad(captureFaceCascade_name,0,0,0);
(3)捕獲視頻。通過cvCreateCameraCapture函數(shù)捕獲攝像頭,捕獲視頻后循環(huán)執(zhí)行抓取幀操作cvGrabFrame(cap)和獲取圖像操作cvRetrieveFrame(cap)操作,從而將幀轉(zhuǎn)換成圖像,以便于處理。
(4)圖像格式轉(zhuǎn)換。一般從硬盤讀入的圖片或者通過cvCreateImage方法創(chuàng)建的IplImage圖片默認(rèn)的origin屬性為0,即顯示的時(shí)候都是正的。而由攝像頭或者視頻文件獲取的幀圖像origin屬性為1,此時(shí)顯示的圖像掃描順序是從下到上,它會將幀圖像的第i行賦值給圖像的第height-i行,因此采集的圖像會出現(xiàn)倒立現(xiàn)象,為此,應(yīng)將復(fù)制的圖像的origin屬性調(diào)整為與幀圖像的origin屬性一致。此時(shí)需要使用cvFlip(frame,frame_copy,0)函數(shù),實(shí)現(xiàn)對幀圖像沿X軸的翻轉(zhuǎn)。
(5)識別與檢測人臉。本部分主要實(shí)現(xiàn)人臉檢測功能,首先將從實(shí)時(shí)視頻中提取的圖像進(jìn)行灰度化處理:
然后調(diào)整新圖像gray,使它精確匹配目標(biāo)small_img的大小,并利用cvEqualizeHist函數(shù)進(jìn)行灰度圖像直方圖均衡化處理,最終通過cvHaarDetectObjects函數(shù)檢測出人臉:
(6)標(biāo)定檢出的的人臉。繪制目標(biāo)圓形區(qū)域,標(biāo)定出檢測出的人臉:
最后通過cvShowImage(\"result\",img)顯示出檢測后的圖像,如果檢測到人臉,顯示效果圖。
3 結(jié)束語
基于的攝像頭實(shí)時(shí)人臉檢測系統(tǒng)的實(shí)現(xiàn)充分說明了OpenCV技術(shù)在實(shí)現(xiàn)人臉檢測方面的效率高、功能強(qiáng)的特點(diǎn),OpenCV必將在計(jì)算機(jī)視覺、圖形圖像處理領(lǐng)域有著廣泛地應(yīng)用前景。
參考文獻(xiàn):
[1]Gray Bradski,Adrian Kaebler.Learning OpenCV:Computer Vision with the OpenCV Library[M].USA:O Reilly media,2008.
[2]梁路宏.人臉檢測研究綜述[J].計(jì)算機(jī)學(xué)報(bào),2002(05):449-458.
作者簡介:徐占鵬(1979.01-),男,山東棲霞人,講師,碩士,研究方向:計(jì)算機(jī)應(yīng)用、計(jì)算機(jī)圖形圖像處理和計(jì)算機(jī)視覺。
作者單位:青島職業(yè)技術(shù)學(xué)院 軟件與服務(wù)外包學(xué)院,山東青島 266555
基金項(xiàng)目:校級課題“人臉識別認(rèn)證登錄及監(jiān)控錄像人臉識別的研究”(項(xiàng)目編號:13-A-4)。