劉暉 龔知資
摘 ?要:根據(jù)人臉照片快速檢索人物信息,在實(shí)際應(yīng)用中具有重要意義。借助互聯(lián)網(wǎng)的海量數(shù)據(jù),利用網(wǎng)絡(luò)爬蟲(chóng)技術(shù)可以對(duì)人臉數(shù)據(jù)進(jìn)行爬取。文中設(shè)計(jì)的檢索平臺(tái)首先對(duì)人臉照片進(jìn)行預(yù)處理;然后利用SURF算法提取特征,并將特征數(shù)據(jù)保存為XML文件;再利用FLANN算法進(jìn)行特征向量匹配,得到匹配的人物;最后,將匹配的人物信息通過(guò)用戶接口進(jìn)行展示。實(shí)驗(yàn)結(jié)果顯示該檢索平臺(tái)具有良好的應(yīng)用前景。
關(guān)鍵詞:網(wǎng)絡(luò)爬蟲(chóng);圖像檢索;人臉識(shí)別
中圖分類(lèi)號(hào):TP391.41 ? ?文獻(xiàn)標(biāo)識(shí)碼:A ? ? 文章編號(hào):2096-4706(2020)13-0074-04
Abstract:It is of great significance in practice to quickly retrieve the personnel information according to facial photo. With the help of the massive data of the internet,the web crawler technology can be used to capture the facial photo data. In this system,firstly,the facial photo is preprocessed. Secondly,the features are extracted by SURF algorithm and the feature data is saved as an XML file. Thirdly,the FLANN algorithm is used to match the feature vectors to get the matched person. Lastly,the matched personnel information is displayed through user interface. The experimental results show that the system has a good application prospect.
Keywords:web crawler;image retrieval;face recognition
0 ?引 ?言
人們常常通過(guò)文本在搜索引擎中檢索自己感興趣的內(nèi)容,然而隨著多媒體技術(shù)的發(fā)展,基于文本的搜索已無(wú)法滿足用戶的需求,有時(shí)人們希望根據(jù)人物的頭像查找人物的相關(guān)信息,這種對(duì)圖像語(yǔ)義檢索[1,2]的研究是目前重要的研究課題之一。
對(duì)圖像語(yǔ)義的檢索,主要是通過(guò)圖像標(biāo)注方法建立圖像和語(yǔ)義之間的關(guān)聯(lián)[2],然后通過(guò)提取圖像的低層視覺(jué)特征來(lái)進(jìn)行相似度的匹配以完成檢索功能,檢索結(jié)果在很大程度上取決于相似度算法[3]。本文基于百度百科的人物數(shù)據(jù)庫(kù),結(jié)合網(wǎng)絡(luò)爬蟲(chóng)、人臉識(shí)別技術(shù)來(lái)設(shè)計(jì)在線檢索平臺(tái),以實(shí)現(xiàn)通過(guò)人臉圖像對(duì)人物信息進(jìn)行在線檢索的應(yīng)用需求。中南林業(yè)科技大學(xué)可視計(jì)算課題組在研究人臉識(shí)別的基礎(chǔ)上,通過(guò)圖像檢索獲取圖像語(yǔ)義信息的方法,完成了基于人臉識(shí)別的人物信息在線檢索平臺(tái)的設(shè)計(jì)與研發(fā)。
1 ?平臺(tái)整體架構(gòu)
本文所設(shè)計(jì)的檢索平臺(tái)部署在連接互聯(lián)網(wǎng)的服務(wù)器端,用戶可通過(guò)瀏覽器訪問(wèn)檢索平臺(tái)進(jìn)行人臉檢索。檢索平臺(tái)提供給用戶兩個(gè)接口,一是通過(guò)本地上傳人臉圖像進(jìn)行人臉檢索的接口,二是通過(guò)網(wǎng)絡(luò)圖片地址進(jìn)行人臉檢索的接口。如圖1所示,用戶通過(guò)檢索接口上傳人臉圖像之后,檢索展示模塊會(huì)調(diào)用人臉識(shí)別模塊來(lái)匹配人物,最后展示匹配人物的相關(guān)信息。
2 ?網(wǎng)絡(luò)爬蟲(chóng)模塊
為了獲取人物與其對(duì)應(yīng)的信息數(shù)據(jù),進(jìn)而根據(jù)人臉識(shí)別來(lái)實(shí)現(xiàn)在線檢索的功能,需要借助于網(wǎng)絡(luò)爬蟲(chóng)技術(shù)[4]。為了簡(jiǎn)化問(wèn)題,檢索平臺(tái)設(shè)計(jì)了一個(gè)專用爬蟲(chóng),并設(shè)置URL種子為百度百科人物欄目地址。爬蟲(chóng)程序包含網(wǎng)頁(yè)下載、網(wǎng)頁(yè)解析、圖片下載、圖片存儲(chǔ)等幾個(gè)部分,用于下載百度百科人物相冊(cè)圖片并存儲(chǔ)在本地人臉庫(kù)。
3 ?人臉識(shí)別模塊
人臉識(shí)別模塊分為人臉檢測(cè)及預(yù)處理程序、人臉特征提取程序以及人臉特征匹配程序,作為三個(gè)功能接口提供給網(wǎng)絡(luò)爬蟲(chóng)模塊和檢索展示模塊進(jìn)行調(diào)用。
3.1 ?人臉檢測(cè)
由于網(wǎng)絡(luò)爬蟲(chóng)抓取的人臉圖像并沒(méi)有統(tǒng)一的規(guī)格,需要先執(zhí)行人臉檢測(cè)操作,從人臉圖像中提取出統(tǒng)一規(guī)格的人臉。
在OpenCV里實(shí)現(xiàn)了基于Haar的級(jí)聯(lián)分類(lèi)器來(lái)進(jìn)行人臉檢測(cè),可適用于正臉、側(cè)臉、眼睛、嘴巴、鼻子等多種對(duì)象[5]。從OpenCV 2.0版本開(kāi)始擴(kuò)展LBP[6]對(duì)象檢測(cè)器,基于LBP的特征檢測(cè)器一般比基于Haar的特征檢測(cè)器更快。
3.1.1 ?人臉檢測(cè)前的預(yù)處理
在進(jìn)行人臉檢測(cè)前要進(jìn)行幾步預(yù)處理:
(1)灰度化:人臉檢測(cè)方法主要針對(duì)灰度圖像,所以需要先將彩色圖像轉(zhuǎn)換為灰度圖像。
(2)圖像大小調(diào)整:人臉檢測(cè)的執(zhí)行速度取決于所檢測(cè)圖像的大小,圖像越大其執(zhí)行速度越慢,而在低分辨率下其人臉檢測(cè)的正確率也相當(dāng)高,所以先將圖像尺寸等比縮小為合理尺寸,從而提高人臉檢測(cè)執(zhí)行速度。通常圖像尺寸只要大于240×240像素,并且所拍攝圖片中人臉距離鏡頭不遠(yuǎn),人臉檢測(cè)器就可以得到比較好的結(jié)果。
(3)直方圖均衡化:由于在光線不充足的條件下所拍攝的圖像使得人臉檢測(cè)器并不可靠,所以需要進(jìn)行直方圖均衡化,改善對(duì)比度和亮度,提高檢測(cè)可靠性。
3.1.2 ?人臉檢測(cè)
經(jīng)過(guò)預(yù)處理后,可通過(guò)使用OpenCV的detectMultiScale()函數(shù)進(jìn)行人臉檢測(cè)。該函數(shù)需要設(shè)置以下幾個(gè)關(guān)鍵參數(shù):
(1)minFeatureSize:此參數(shù)決定所檢測(cè)的最小人臉大小。由于本文所設(shè)計(jì)的檢索平臺(tái)的圖像來(lái)源中人臉大小不確定,將此參數(shù)設(shè)置為20*20像素較合適。
(2)searchScaleFactor:此參數(shù)決定存在多少不同大小的人臉需要檢測(cè),通常該參數(shù)可設(shè)置為1.1,就能得到相當(dāng)不錯(cuò)的檢測(cè)結(jié)果。如果參數(shù)設(shè)置增大,可加快檢測(cè)速度,但會(huì)增加檢測(cè)不到人臉的可能性。
(3)minNeighbors:此參數(shù)決定人臉檢測(cè)器如何確定人臉已被檢測(cè)到,通常該參數(shù)可設(shè)置為3。若需要提高檢測(cè)人臉的正確率,則可將其設(shè)置得更大,但會(huì)導(dǎo)致一些人臉無(wú)法檢測(cè)到。
(4)flags:此參數(shù)決定人臉檢測(cè)器的查找方式,如查找所有人臉或只查找最大的人臉等。根據(jù)設(shè)計(jì)需求,只需要使用CASCADE_FIND_BIGGEST_OBJECT模式查找最大的人臉,這樣同時(shí)也能夠提高程序運(yùn)行速度。
使用detectMultiScale()函數(shù)后可得到一個(gè)向量類(lèi)型的結(jié)果。在之前的預(yù)處理中已將圖像縮小,所以在人臉檢測(cè)結(jié)束之后,需要等比放大檢測(cè)結(jié)果,從而獲得人臉在原始圖像中的區(qū)域。
3.2 ?人臉特征提取
由于光照、人臉角度、表情等因素都會(huì)對(duì)人臉識(shí)別產(chǎn)生影響,所以在進(jìn)行人臉特征提取前需要盡量消除這些差異。為了簡(jiǎn)單化問(wèn)題,并且保證程序運(yùn)行速度,僅檢測(cè)眼部,并根據(jù)雙眼位置對(duì)人臉進(jìn)行調(diào)整,接著依次進(jìn)行仿射變換、直方圖均衡化、光滑化和橢圓掩碼處理。
3.2.1 ?檢測(cè)眼部
在眼部檢測(cè)中,若對(duì)整個(gè)人臉圖像區(qū)域進(jìn)行眼部檢測(cè)會(huì)使速度很慢并且結(jié)果不可靠,所以需要限定眼部的大致區(qū)域范圍,從而提高檢測(cè)速度和可靠性。另外,由于眼部相對(duì)人臉很小,所以在檢測(cè)眼部前并不像檢測(cè)人臉之前要縮小圖像以提高檢測(cè)速度。
3.2.2 ?仿射變換
在成功檢測(cè)到雙眼位置之后,需要將所有人臉按同樣的標(biāo)準(zhǔn)對(duì)齊。OpenCV提供了getRotationMatrix2D()函數(shù)和warpAffine()函數(shù),以完成旋轉(zhuǎn)人臉、縮放人臉、平移人臉和裁剪人臉外圍區(qū)域這四個(gè)操作。旋轉(zhuǎn)人臉是為了將雙眼保持水平,縮放人臉使所有人臉圖像雙眼之間的距離保持相同,平移人臉使得眼部總在所需高度上水平居中,最后裁剪掉人臉外圍區(qū)域,如背景、頭發(fā)、額頭、耳朵和下巴等區(qū)域,這樣使得每一個(gè)人臉圖像都得到標(biāo)準(zhǔn)化處理,以提高人臉識(shí)別準(zhǔn)確度。
3.2.3 ?直方圖均衡化
由于圖片來(lái)源的質(zhì)量不可保證,所以會(huì)存在人臉兩側(cè)光照不均勻的情況,導(dǎo)致人臉識(shí)別算法受到很大影響。因此,在進(jìn)行人臉特征提取時(shí)需要對(duì)人臉左右兩側(cè)進(jìn)行直方圖均衡化,將人臉兩側(cè)的對(duì)比度和亮度標(biāo)準(zhǔn)化處理。OpenCV中提供的equalizeHist()函數(shù)可使用戶很容易地進(jìn)行直方圖均衡化處理。
3.2.4 ?人臉光滑化
在經(jīng)過(guò)直方圖均衡化后,圖像像素的噪聲會(huì)被大幅度提高,所以需要使用雙邊濾波器進(jìn)行平滑處理。OpenCV提供了bilateralFilter()函數(shù)來(lái)進(jìn)行平滑處理,其中需要設(shè)置兩個(gè)關(guān)鍵參數(shù),一個(gè)是濾波器強(qiáng)度,另一個(gè)是鄰域。將濾波器強(qiáng)度參數(shù)設(shè)置為20,來(lái)去除之前操作產(chǎn)生的過(guò)多像素噪聲,并設(shè)置鄰域參數(shù)為2個(gè)像素,用來(lái)加強(qiáng)平滑小區(qū)域圖像的像素噪聲。
3.2.5 ?橢圓掩碼處理
使用橢圓掩碼來(lái)刪除人臉圖像的一些拐角區(qū)域,如一些人臉陰影區(qū)域。根據(jù)通常人臉的形狀,這里將橢圓水平方向半徑長(zhǎng)度設(shè)置為0.5倍的人臉圖像水平寬度,垂直方向半徑長(zhǎng)度設(shè)置為0.8倍的人臉圖像垂直高度,并且將中心坐標(biāo)設(shè)置為人臉圖像中心,這樣可以通過(guò)橢圓掩碼去除人臉圖像中一些人臉識(shí)別不需要的區(qū)域。OpenCV提供了ellipse()函數(shù)繪制橢圓,并可通過(guò)setTo()函數(shù)獲得掩碼。
人臉檢測(cè)程序和特征提取程序運(yùn)行時(shí)的中間過(guò)程圖像輸出如圖2所示。
接下來(lái),通過(guò)SURF(Speeded Up Robust Features)算法[7]來(lái)提取經(jīng)過(guò)處理后的人臉圖像的特征向量。
在進(jìn)行特征關(guān)鍵點(diǎn)檢測(cè)之前,首先要定義Hessian閾值特征點(diǎn)檢測(cè)算子。該值越大表示其獲得的特征點(diǎn)與周?chē)c(diǎn)關(guān)聯(lián)的范圍越大,但同時(shí)獲得的特征點(diǎn)越少;相反,該值越小表示其獲得的特征點(diǎn)與周?chē)c(diǎn)關(guān)聯(lián)的范圍越小,但同時(shí)獲得的特征點(diǎn)越多。經(jīng)過(guò)測(cè)試,將該閾值設(shè)置為300能夠獲得比較好的結(jié)果。
通過(guò)調(diào)用OpenCV提供的detect()函數(shù)可檢測(cè)出SURF特征關(guān)鍵點(diǎn)。檢測(cè)出SURF特征關(guān)鍵點(diǎn)后,通過(guò)調(diào)用compute()函數(shù)計(jì)算所獲取特征點(diǎn)的特征向量,其結(jié)果保存在Mat類(lèi)型的數(shù)據(jù)中。
最后,將Mat類(lèi)型的數(shù)據(jù)存入XML文件中保存,以供面部特征識(shí)別過(guò)程使用。
3.3 ?人臉特征匹配
將兩個(gè)人臉圖像對(duì)應(yīng)的XML文件中保存的Mat類(lèi)型數(shù)據(jù)讀入,然后通過(guò)OpenCV的match()函數(shù),使用FLANN(Fast Library for Approximate Nearest Neighbors)算法匹配兩張人臉圖像的特征向量,其結(jié)果保存在向量中。
為了提高人臉識(shí)別的準(zhǔn)確性,將匹配結(jié)果中的最小距離對(duì)應(yīng)匹配去除,因?yàn)楫?dāng)兩張匹配人臉并不是很相似時(shí),其匹配的次最小距離與最小距離的差值比相似人臉匹配時(shí)要大很多。計(jì)算出匹配結(jié)果中的次最小距離,以兩倍次最小距離作為基準(zhǔn),篩選出距離小于該基準(zhǔn)的匹配對(duì),作為符合條件的匹配結(jié)果。同時(shí)設(shè)置一個(gè)閾值,在符合條件的匹配結(jié)果中篩選出小于該閾值的匹配對(duì),作為最優(yōu)匹配結(jié)果,經(jīng)過(guò)測(cè)試,將閾值設(shè)置為0.3時(shí)能夠獲得較好結(jié)果。最終,將兩張人臉的相似度定義為最優(yōu)匹配結(jié)果數(shù)量和符合條件的匹配結(jié)果數(shù)量的比值。
4 ?檢索展示模塊
檢索展示模塊主要包括三部分:一是提供給用戶的檢索接口;二是調(diào)用人臉特征匹配程序進(jìn)行人臉檢索;三是將檢索到的人物信息展示給用戶。
檢索展示模塊首先通過(guò)提供給用戶的接口獲取需要檢索的人臉圖像。為了優(yōu)化平臺(tái)檢索效率,本地人臉圖像庫(kù)會(huì)為每一張人臉圖像計(jì)算其MD5碼值并保存在數(shù)據(jù)庫(kù)中。平臺(tái)在獲得檢索人臉后,會(huì)計(jì)算該人臉圖像的MD5碼值,并查詢數(shù)據(jù)庫(kù)中是否有與該值相等的圖像的數(shù)據(jù)項(xiàng),若存在則說(shuō)明服務(wù)器本地人臉庫(kù)存在完全相同的人臉圖像,將該人臉圖像設(shè)置為最佳匹配,相似度為100%。如果沒(méi)有完全匹配的MD5碼,則檢索展示模塊調(diào)用人臉檢測(cè)程序和人臉特征提取程序?qū)D形進(jìn)行處理,提取所檢索的人臉圖像的特征向量,以XML文件形式保存在服務(wù)器端臨時(shí)文件夾。之后,檢索展示模塊從數(shù)據(jù)庫(kù)檢索部分?jǐn)?shù)據(jù),調(diào)用特征匹配程序?qū)υ摬糠秩四槇D像逐一計(jì)算相似度,排序選取其中相似度最高的16張人臉圖像作為相似人臉?lè)答伣o用戶。在將檢索結(jié)果反饋給用戶時(shí),獲取最佳匹配人臉對(duì)應(yīng)的百度百科人物信息反饋給用戶。用戶可查看更多相似人臉,即后臺(tái)檢索更多人臉圖像進(jìn)行匹配,更新最佳匹配人臉并給出新的相似人物信息。如圖3所示為平臺(tái)檢索結(jié)果的展示圖。
5 ?結(jié) ?論
本文將網(wǎng)絡(luò)爬蟲(chóng)模塊、人臉識(shí)別模塊以及檢索展示模塊整合起來(lái),設(shè)計(jì)了一個(gè)完整的基于人臉識(shí)別的人物信息在線檢索平臺(tái),為人臉識(shí)別在語(yǔ)義檢索領(lǐng)域的研究提供了一些想法。
平臺(tái)今后進(jìn)一步優(yōu)化的方向可以考慮在服務(wù)器端采用分布式結(jié)構(gòu),通過(guò)分布式計(jì)算進(jìn)行人臉圖像特征匹配,以獲得更大范圍局部最優(yōu)的最佳匹配人臉,使得反饋的結(jié)果更加準(zhǔn)確,并且速度更快。
參考文獻(xiàn):
[1] 許青青.面向主題的圖像標(biāo)注與檢索 [D].南京:南京理工大學(xué),2018.
[2] 郭強(qiáng),鄒廣天,連菲,等.應(yīng)用Web標(biāo)注技術(shù)的建筑圖像語(yǔ)義采集方法 [J].哈爾濱工業(yè)大學(xué)學(xué)報(bào),2017,49(10):158-163.
[3] 王朝卿,沈小林,李磊.圖像相似度計(jì)算算法分析 [J].現(xiàn)代電子技術(shù),2019,42(9):31-34+38.
[4] 付宇新,王鑫,馮志勇,等.基于語(yǔ)義網(wǎng)的中文百科知識(shí)組織與集成 [J].計(jì)算機(jī)工程與應(yīng)用,2015,51(14):120-126+ 169.
[5] BAGGIO D L,EMAMI S,ESCRIV? D M,et al.深入理解OpenCV:實(shí)用計(jì)算機(jī)視覺(jué)項(xiàng)目解析 [M].劉波,譯.北京:機(jī)械工業(yè)出版社,2014.
[6] 王大偉,陳章玲.基于LBP與卷積神經(jīng)網(wǎng)絡(luò)的人臉識(shí)別 [J].天津理工大學(xué)學(xué)報(bào),2017,33(6):41-45.
[7] 王衛(wèi)兵,白小玲,徐倩.SURF和RANSAC的特征圖像匹配 [J].哈爾濱理工大學(xué)學(xué)報(bào),2018,23(1):117-121.
作者簡(jiǎn)介:劉暉(1978—),男,漢族,湖南常德人,講師,博士在讀,研究方向:計(jì)算機(jī)圖形學(xué)、可視化、計(jì)算機(jī)技術(shù)應(yīng)用。