江西經(jīng)濟管理干部學院 江西省電子商務與產(chǎn)業(yè)升級2011協(xié)同創(chuàng)新中心 付 念
提出了基于LBP的圖像檢索算法,根據(jù)圖像的特征抽取、特征分析、特征匹配的過程進行設計的算法。主要流程是從計算機視覺處理入手,采用Python編程語言,通過使用OpenCV的視覺處理模塊處理圖像特征,通過NumPy矩陣處理框架進行設計相關處理模型,處理提取的特征值,建構特征處理模型,進而設計訓練集來分析和執(zhí)行識別步驟,最后分析數(shù)據(jù)結(jié)果并進行人臉表情識別的工作。
隨著現(xiàn)代化進程的不斷推進,信息技術也隨著不斷發(fā)展??茖W技術帶給了人們生產(chǎn)力提升的同時,也帶來了更多的需求。信息技術的衍生產(chǎn)品不斷進入人們的生活中,由此帶來的就是人們的身份、隱私、財產(chǎn)等不斷地與互聯(lián)網(wǎng)及信息技術連接在一起,這些內(nèi)容都需要得到管理和保障。保障這些數(shù)據(jù)的方法是身份認證,通過不同的身份認證可以確保每個用戶都能行使個人的權益并保護自己的賬戶安全。身份認證的方式多種多樣,從早期的賬戶ID、郵箱、密碼驗證到手機號、短信驗證,再到指紋、人臉識別等新技術。
人臉識別是一種基于圖像識別及檢索的綜合識別技術,是基于內(nèi)容的圖像檢索技術的延伸,通過結(jié)合生物特征采樣技術,能夠有效的檢測和追蹤人臉特征,識別和認證個人信息(蘇煜,山世光,陳熙霖,高文.基于全局和局部特征集成的人臉識別[J].軟件學報,2010,21(8):1849-1862)。早在20世紀60年代,人臉識別技術被提出,但當時限于計算機技術及光學成像技術的落后,無法應用于實際的生活場景中。直到20世紀90年代,通過高性能計算機技術、人工智能、模式匹配、機器學習以及高性能的算法的協(xié)作下,人臉識別技術進行真正可實施的階段。人臉識別技術是通過計算機算法來統(tǒng)一和協(xié)調(diào)各個步驟,通過采集、預處理、特征提取、識別匹配四個步驟分部進行(R Datta,D Joshi,J Li,JZ Wang.Image retrieval:Ideas,influences,and trends of the new age[J].Acm Computing Surveys,2010,40(2,article 5):2007),這四個步驟也是目前主流的人臉識別方案的操作方法。
目前,人臉識別技術運用在信息世界及真實生活的很多地方,例如金融支付系統(tǒng)的人臉識別驗證,支付寶產(chǎn)品的刷臉支付使用的是一個名為Face++的人臉識別的成熟解決方案。除此之外,人臉識別還運用在系統(tǒng)登錄、疑犯身份驗證等多種情景,包括Windows 10的Windows hello技術,公安系統(tǒng)中的人臉識別分析技術等。隨著模式識別技術及人工智能技術的不斷發(fā)展,人臉識別技術還能進入智能仿生、機器人技術等更多新興領域,為人類科技進步及信息技術革命做出更多的貢獻。
人臉識別算法分為面部檢測、建立面部識別對象、面部識別實現(xiàn)三個部分(HT Nguyen,A Caplier.Local Patterns of Gradients for Face Recognition[J].IEEE Transactions on Information Forensics & Security,2015,10(8):1739-1751),其中面部檢測主要內(nèi)容是建立面部檢測級聯(lián)數(shù)據(jù),建立面部識別對象是人臉識別算法的主要工作,包括了面部識別建模和識別算法設計,最后的面部識別實現(xiàn)是對象兩個部分組成創(chuàng)建訓練集、執(zhí)行訓練集兩部分組成。
本文所采用的面部檢測級聯(lián)是基于OpenCV的Haar Cascade,它包含了基礎特征描述類FeatureEvaluator,F(xiàn)eatureEvaluator的主要作用就是獲取面部特征,它包含了read、clone、getFeatureType等功能,通過級聯(lián)分類器CascadeClassifier可以有效地分配不同的面部特征區(qū)域,根據(jù)需求獲取相對于的面部區(qū)域的特征。
cascadePath = “haarcascade_frontalface_default.xml”
faceCascade = cv2.CascadeClassifier(cascadePath)
其中,haarcascade_frontalface_default.xml是OpenCV的Haar Cascade分類器,使用haarcascade_frontalface_default.xml來存儲面部特征,特征數(shù)據(jù)通過Scheme XML方式存儲,
面部檢測算法設計的第二步是建立面部識別對象,面部識別對象是用戶識別和分析面部特征的對象,它與OpenCV的FaceRecognizer.train訓練集功能類似,是面部識別算法廣泛采用的方式(A.R.韋布,K.D.科普西.統(tǒng)計模式識別(第三版)[M].電子工業(yè)出版社,2015-01-01)。OpenCV中主要用于建立面部識別對象的方法有三種:(1)特征臉識別(Eigenface Recognizer)- createEigenFaceRecognizer();(2)費歇爾識別(Fisherface Recognizer)- createFisherFaceRecognizer();(3)局部二元模式直方圖臉部識別(Local Binary Patterns Histograms Face Recognizer)- createLBPHFaceRecognizer()。本文所采用的是局部二元模式直方圖臉部識別方式,調(diào)用方式為:
recognizer = cv2.createLBPHFaceRecognizer()
局部二元模式是在計算機視覺用于紋理匹配的一個重要特征描述方法,早在1990就被提出并運用。局部二元模式簡稱為LBP(曹林.人臉識別與人體動作識別技術及應用[M].電子工業(yè)出版社,2015-08-01),LBP是一種比較算法。LBP可以從任何相鄰的像素開始,然后橫向或在順時針或逆時針的方向進行比較,但是對于所有的像素必須使用同樣的像素,在每個比較中,分別存入8個相鄰像素,比較的結(jié)果都將存入一個8位的二進制數(shù)中。
當完成了LBP的像素值比較計算后,可以進入下一步設計LBP直方圖。LBP直方圖的值域是(0,255),因此LBP圖的大小是1*256,計算步驟為:(1)加載彩色圖像。(2)轉(zhuǎn)換為灰度圖像。(3)計算LBP值4.計算LBP直方圖并一般化。
面部識別實現(xiàn)主要是訓練集(Training set)的實現(xiàn),分為創(chuàng)建訓練集和執(zhí)行訓練集兩個部分(沈理,劉翼光,熊志勇.人臉識別原理及算法:動態(tài)人臉識別系統(tǒng)研究[M].人民郵電出版社,2014-10)。
創(chuàng)建訓練集首先需要定義圖像絕對路徑的函數(shù),命名為get_images_and_labels,該函數(shù)主要功能是實現(xiàn)通過絕對路徑輸入圖像信息。其次需要定義兩個列表,分別是images和labels,分別指代圖像采集的人臉信息以及該人臉對應的標簽。
在確定圖像的絕對路徑的時候去除了“sad”擴展名,Yale大學的Yale faces人臉采集項目在每個圖像都備注了相對應的標簽,這些標簽指代了人臉的表情信息,而本文的主要研究內(nèi)容就是分析人臉特征,通過表情分類篩選相對應的結(jié)果,因此在通過建立訓練集程序進行識別器設計的過程中需要排除掉某個表情類型,這里選取了“sad”表情。由于OpenCV不支持GIF壓縮格式的圖片,因此采用基于PIL的image_pil進行轉(zhuǎn)換,圖像信息統(tǒng)一采用局部二元模型陣列存儲,程序的存儲形式是基于NumPy的二維矩陣,NumPy陣列是一種適應性非常強的圖像存儲形式,能夠被OpenCV識別。
在圖像處理方面,使用Python的os.path.split獲取圖像的標簽信息,使用個位數(shù)來存儲標簽信息。檢測面部數(shù)據(jù)采用的是face-Cascade.detectMultiScale,這是一種基于OpenCV的面部檢測級聯(lián)。faceCascade.detectMultiScale的結(jié)果信息存儲在faces中,對于每種面部信息都會返回一個矩陣陣列的結(jié)果,即(x,y,w,h),其中x和y分別是圖像的左上角的x軸和y軸的像素值,w和h則是檢測圖像矩形的寬度和高度,檢測過程采取的是遍歷的方式,從左上角的第一個像素點開始遍歷,依此遞增寬度和高度,將像素值依此添加到存儲矩陣中,最終得到二元直方圖的分析結(jié)果,并依此追加到images和labels中。
在完成了訓練集的創(chuàng)建后,開始進行圖像識別的最后一個步驟,即準備訓練集目標圖像,并執(zhí)行訓練集。準備訓練集的主要過程就是覆蓋待檢測圖像的路徑,并設計函數(shù)存儲下一步檢測的圖像信息和標簽信息,分別存儲在images和labels中。
完成了訓練集的準備之后,需要執(zhí)行訓練集,該程序的訓練集FaceRecognizer.train有兩個參數(shù),其中標簽按照圖像名稱分別分配至相對應的label中,并通過np.array(labels)存儲在數(shù)組中。
本文選取了Yale大學的Yale faces人臉采集項目,該項目的人臉圖片分別來自15個人,采集的人臉信息總計11種,分別配上標簽centerlight(燈光中心),glasses(眼鏡),happy(開心),leftlight(燈光左邊),noglasses(無眼鏡),normal(平常),rightlight(燈光右邊),sad(悲傷),sleepy(睡著),surprise(驚喜),wink(眨眼)。
在訓練集的設計中,除去了“sad”標簽,目的是在測試過程中根據(jù)識別器進行分析,在測試程序中,使用了一個FaceRecognizer.predict功能,分配了一個新的標簽,該標簽的信息來自subject04.normal,將其命名為“confidence(信心)”,存儲在nbr_predicted中。該變量表示其對“confidence”這個標簽的符合程度,變量值越低,符合程度越高。
完成環(huán)境及程序代碼的部署后,測試開始。運行face_recognizer.py程序,在測試樣本中,subject04.normal和subject04.sad是完全一致的圖像,因此可以作為圖像檢索測試對象,程序遍歷所有圖像,根據(jù)不同的標簽分類顯示并采集圖像信息。采集完畢后,進入分析階段,輪播展示“sad”標簽的圖片,并與“confidence(subject04.normal)”比較,并得出相似值,運行過程及結(jié)果示意圖如圖1所示。
圖1 運行過程及結(jié)果示意圖
通過結(jié)果可以看出,4號圖片即“subject04.sad”識別“confidence”標簽的相似度是0.0,及完全一致。而實際上兩張圖像也是完全一致的內(nèi)容,差異只是文件擴展名,因此可以得出該圖像識別程序是有效地。
人臉識別是目前及未來新技術領域重要的研究方向和突破口,本文提出LBP匹配面部紋理的方式,通過執(zhí)行和創(chuàng)建訓練集的方式來識別人臉特征。隨著圖像識別、模式匹配、人工智能等技術的不斷發(fā)展,人臉檢測技術、安全防護技術、計算機擬合技術、機器學習、深度學習等技術都發(fā)生了巨大的變化,在模式識別的領域也能有更深遠的發(fā)展。