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