王龍軍,夏嘉杰,許靖唯
(成都工業(yè)學(xué)院,四川 成都 611730)
隨著大數(shù)據(jù)和云計(jì)算的快速發(fā)展和日漸成熟,人臉識(shí)別技術(shù)也開(kāi)始應(yīng)用到現(xiàn)實(shí)生活中,支付寶的刷臉支付、火車(chē)站刷臉進(jìn)站、小區(qū)刷臉門(mén)禁系統(tǒng)等應(yīng)用越來(lái)越多,人臉識(shí)別技術(shù)成為目前當(dāng)仁不讓的熱門(mén)技術(shù),高校圖書(shū)館向智能圖書(shū)館發(fā)展的趨勢(shì)也越來(lái)越明顯,人臉識(shí)別技術(shù)應(yīng)用到智能圖書(shū)館也是當(dāng)前的一個(gè)趨勢(shì),人臉識(shí)別技術(shù)和圖書(shū)館門(mén)禁系統(tǒng)結(jié)合可以實(shí)現(xiàn)刷臉進(jìn)館,人臉識(shí)別技術(shù)和自助借還系統(tǒng)結(jié)合可以實(shí)現(xiàn)刷臉借書(shū),人臉識(shí)別技術(shù)和座位預(yù)約系統(tǒng)結(jié)合可以實(shí)現(xiàn)刷臉預(yù)約座位等,總之人臉識(shí)別技術(shù)必將推動(dòng)智能圖書(shū)館向更高的方向發(fā)展。
OpenCV[1-2]是開(kāi)發(fā)計(jì)算機(jī)視覺(jué)應(yīng)用最廣泛的基于BSD開(kāi)源許可的開(kāi)發(fā)框架,OpenCV使用C/C++語(yǔ)言進(jìn)行編寫(xiě),OpenCV具有多種編程語(yǔ)言的接口,比如C++、Java、Python以及MATLAB接口,OpenCV支持在Linux、Windows、Android、iOS和Mac OS操作系統(tǒng)上進(jìn)行視覺(jué)應(yīng)用開(kāi)發(fā),并且OpenCV允許在學(xué)術(shù)研究和商業(yè)應(yīng)用開(kāi)發(fā)中免費(fèi)使用。OpenCV的主要目標(biāo)是實(shí)現(xiàn)圖像處理和計(jì)算機(jī)視覺(jué)方面的很多通用算法,幫助開(kāi)發(fā)人員更方便快捷地設(shè)計(jì)更復(fù)雜的計(jì)算機(jī)視覺(jué)相關(guān)應(yīng)用程序,它已經(jīng)成為計(jì)算機(jī)視覺(jué)領(lǐng)域最有力的研究工具。
Android是一種基于Linux內(nèi)核的開(kāi)源移動(dòng)操作系統(tǒng),主要用于移動(dòng)設(shè)備,比如手機(jī)、平板電腦、電視等,Android原本由Andy Ruby創(chuàng)立,后來(lái)被Google收購(gòu)。Google希望與各方共同建立一個(gè)標(biāo)準(zhǔn)化、開(kāi)放式的移動(dòng)電話軟件平臺(tái),從而在移動(dòng)產(chǎn)業(yè)內(nèi)形成一個(gè)開(kāi)放式的操作平臺(tái)[3]。該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,是一個(gè)為移動(dòng)終端打造的真正開(kāi)放和完整的智能手機(jī)系統(tǒng)。
Kotlin是JetBrains在2011年推出的一門(mén)全新的編程語(yǔ)言,這門(mén)語(yǔ)言最早被設(shè)計(jì)成運(yùn)行在JVM(Java虛擬機(jī))上——使用Kotlin編寫(xiě)的程序會(huì)被編譯成字節(jié)碼文件,該字節(jié)碼文件可直接在JVM上運(yùn)行(用Java命令運(yùn)行)[4]。Kotlin與Java語(yǔ)言保持100%兼容,Kotlin的優(yōu)勢(shì)在于擁有Java的完整生態(tài),也就是說(shuō)能完全自由地使用各類(lèi)Java API框架庫(kù)和Java各種非常成熟的技術(shù),比如JDBC、Servlet、Spring、Hibernate、SpringMVC等,而Kotlin更進(jìn)一步的是它具有現(xiàn)代流行語(yǔ)言的高級(jí)特性,比如語(yǔ)法糖、函數(shù)式編程、多范式等,并且Kotlin代碼在代碼書(shū)寫(xiě)上更加簡(jiǎn)單,代碼效率更高。
人臉識(shí)別,也叫做人像識(shí)別、面部識(shí)別,是基于人的臉部特征信息進(jìn)行身份識(shí)別的一種生物識(shí)別技術(shù),它使用攝像機(jī)或攝像頭采集含有人臉的圖像或視頻流,并自動(dòng)在圖像中檢測(cè)和跟蹤人臉,進(jìn)而對(duì)檢測(cè)到的人臉進(jìn)行臉部的一系列相關(guān)技術(shù)。人臉識(shí)別的目的是將檢測(cè)出來(lái)的人臉與現(xiàn)有人臉數(shù)據(jù)庫(kù)中人臉樣本進(jìn)行識(shí)別和確認(rèn),人臉識(shí)別主要分為人臉檢測(cè)[5]、特征提取和人臉識(shí)別三個(gè)過(guò)程。
人臉檢測(cè)是人臉識(shí)別的基礎(chǔ)和條件,在人臉識(shí)別中扮演十分重要的角色,是人臉識(shí)別系統(tǒng)中一個(gè)關(guān)鍵內(nèi)容。人臉識(shí)別應(yīng)用在進(jìn)行人機(jī)交互、表情識(shí)別、視頻監(jiān)控等領(lǐng)域的前提是人臉檢測(cè),由于受到人臉的位置、大小、背景、清晰度、光照、姿態(tài)等因素的影響,人臉檢測(cè)的好壞直接決定了人臉識(shí)別系統(tǒng)的質(zhì)量,人臉檢測(cè)在實(shí)際中主要用于人臉識(shí)別的預(yù)處理,即在圖像中準(zhǔn)確標(biāo)定出人臉的位置和大小。人臉圖像中包含的模式特征十分豐富,如直方圖特征、顏色特征、模板特征、結(jié)構(gòu)特征及Haar特征等。人臉檢測(cè)就是把這其中有用的信息挑出來(lái),并利用這些特征實(shí)現(xiàn)人臉檢測(cè)。
2.1.1 Harr-like算法分析。Haar-like特征是計(jì)算機(jī)視覺(jué)領(lǐng)域一種常用的特征描述算子,它最早是由Papageorigiou等人用于人臉描述,Haar-like是一種簡(jiǎn)單且高效的圖像特征,其基于矩形區(qū)域相似的強(qiáng)度差異性Haar小波。目前常用的Haar特征分為三類(lèi):邊緣特征、線性特征和對(duì)角特征,組合成特征模板。特征模板內(nèi)有白色和黑色兩種矩形,并定義該模板的特征值為白色矩形像素和減去黑色矩形像素和。Haar特征值反映了圖像的灰度變化情況,即由矩形特征來(lái)描述臉部的一些特征,比如嘴巴比其附近的顏色深一些、鼻梁兩側(cè)比鼻梁顏色深一些、眼睛要比臉頰顏色深一些等,然而矩形特征只對(duì)如邊緣、線段等一些簡(jiǎn)單的圖形結(jié)構(gòu)較敏感,并且只能描述水平、垂直、對(duì)角等特定走向的結(jié)構(gòu)。
2.1.2 Adaboost算法分析。 AdaBoost算法是一種迭代算法,該方法根據(jù)弱學(xué)習(xí)的結(jié)果反饋適應(yīng)地調(diào)整假設(shè)的錯(cuò)誤率,其算法原理是通過(guò)調(diào)整樣本權(quán)重和弱分類(lèi)器權(quán)值,從訓(xùn)練出的弱分類(lèi)器中篩選出權(quán)值系數(shù)最小的弱分類(lèi)器組合成一個(gè)最終強(qiáng)分類(lèi)器,具體來(lái)說(shuō)就是在每一輪中加入一個(gè)新的弱分類(lèi)器,直到達(dá)到某個(gè)預(yù)定的足夠小的錯(cuò)誤率。每一個(gè)訓(xùn)練樣本都被賦予一個(gè)權(quán)重,表明它被某個(gè)分類(lèi)器選入訓(xùn)練集的概率。如果某個(gè)樣本點(diǎn)已經(jīng)被準(zhǔn)確地分類(lèi),那么在構(gòu)造下一個(gè)訓(xùn)練集中,它被選中的概率就被降低;相反,如果某個(gè)樣本點(diǎn)沒(méi)有被準(zhǔn)確地分類(lèi),那么它的權(quán)重就得到提高。
Adaboost算法在樣本訓(xùn)練集使用過(guò)程中,對(duì)其中的關(guān)鍵分類(lèi)特征集進(jìn)行多次挑選,逐步訓(xùn)練分量弱分類(lèi)器,用適當(dāng)?shù)拈撝颠x擇最佳弱分類(lèi)器,最后將每次迭代訓(xùn)練選出的最佳弱分類(lèi)器構(gòu)建為強(qiáng)分類(lèi)器。其中,級(jí)聯(lián)分類(lèi)器的設(shè)計(jì)模式為在盡量保證感興趣圖像輸出率的同時(shí),減少非感興趣圖像的輸出率,隨著迭代次數(shù)不斷增加,所有的非感興趣圖像樣本都不能通過(guò),而感興趣樣本始終保持盡可能通過(guò)為止。
AdaBoost算法的人臉檢測(cè)算法包含的主要工作:①通過(guò)積分圖快速求得Haar特征;②利用AdaBoost算法從大量的特征中選擇出判別能力較強(qiáng)的少數(shù)特征用于人臉檢測(cè)分類(lèi);③提出一個(gè)級(jí)聯(lián)結(jié)構(gòu)模型,將若干個(gè)弱分類(lèi)器集成一個(gè)強(qiáng)分類(lèi)器,其能夠快速排除非人臉區(qū)域,提高算法的檢測(cè)速度。
圖1 基于Adaboost算法與Harr-like的人臉檢測(cè)流程
2.2.1 基于Adaboost算法與Harr-like的人臉檢測(cè)原理。 在智能圖書(shū)館中引入Android平臺(tái)的人臉檢測(cè)系統(tǒng),該系統(tǒng)主要實(shí)現(xiàn)了掃描人臉圖像,然后進(jìn)行識(shí)別,這樣就可以對(duì)圖書(shū)館讀者身份進(jìn)行鑒別。具體過(guò)程是首先判斷輸入圖像中是否存在人臉,并將背景和非人臉區(qū)域同需要的人臉區(qū)域區(qū)分出來(lái),筆者研究的人臉檢測(cè)是通過(guò)Adaboost算法結(jié)合Harr-like矩形特性進(jìn)行面部區(qū)域檢測(cè),Harr-like特征提取是基于優(yōu)化PCA的人臉識(shí)別算法,在保持人臉識(shí)別率不變的前提下,提高了人臉識(shí)別速度?;贏daboost算法與Harr-like的人臉檢測(cè)流程如圖1所示。
2.2.2 基于Android與Kotlin的人臉檢測(cè)在智能圖書(shū)館系統(tǒng)的應(yīng)用。本系統(tǒng)在CentOS 7.2平臺(tái)上開(kāi)發(fā),軟件開(kāi)發(fā)包為OpenCV Android SDK、Android SDK和Android NDK,使用SQLite作為數(shù)據(jù)庫(kù)用來(lái)保存人臉數(shù)據(jù)和信息,IDE工具為Android Studio 3.6.1,測(cè)試工具為紅米10x手機(jī)。具體過(guò)程:首先通過(guò)Android拍攝若干張人臉正面圖像,將人臉圖像存儲(chǔ)在SQLite數(shù)據(jù)庫(kù)中作為比對(duì)記錄樣本,這是前期準(zhǔn)備工作,在智能圖書(shū)館系統(tǒng)需要對(duì)讀者身份確認(rèn)時(shí),此時(shí)需要再次拍攝某個(gè)讀者的人臉正面圖像,然后提取該圖像的Harr-like特征,計(jì)算人臉圖像的特征值,調(diào)用分類(lèi)器對(duì)人臉的特征進(jìn)行分類(lèi),分類(lèi)器會(huì)判斷該區(qū)域是否存在人臉,這個(gè)分類(lèi)器是通過(guò)Adaboost算法實(shí)現(xiàn),Adaboost算法是通過(guò)C++語(yǔ)言實(shí)現(xiàn)的,對(duì)該算法進(jìn)行編譯得到動(dòng)態(tài)鏈接庫(kù),接著Kotlin利用JNI調(diào)用C++實(shí)現(xiàn)的人臉圖片檢測(cè)服務(wù),最后利用Kotlin對(duì)SQLite人臉數(shù)據(jù)庫(kù)中圖像進(jìn)行比較找出識(shí)別者的信息,若識(shí)別成功,則顯示識(shí)別者的個(gè)人信息,若識(shí)別不到,則會(huì)提示添加人臉信息到數(shù)據(jù)庫(kù),以便下次進(jìn)行識(shí)別,這樣就可以在Android平臺(tái)上實(shí)現(xiàn)一個(gè)高效快速的人臉檢測(cè)系統(tǒng)。
在智能圖書(shū)館中引入Android平臺(tái)的人臉檢測(cè)系統(tǒng),該系統(tǒng)通過(guò)Adaboost算法結(jié)合Harr-like矩形特性進(jìn)行面部區(qū)域檢測(cè),實(shí)現(xiàn)了人臉識(shí)別,利用Kotlin對(duì)SQLite人臉數(shù)據(jù)庫(kù)中圖像進(jìn)行比較找出識(shí)別者的信息這樣就可以對(duì)圖書(shū)館讀者身份進(jìn)行鑒別,該系統(tǒng)能夠大大提高圖書(shū)館的智能化程度,也使得圖書(shū)館的管理更加快捷、安全、簡(jiǎn)單。