劉暉 龔知資



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