范淇元,覃羨烘,朱培杰
1.華南理工大學(xué)廣州學(xué)院機械工程學(xué)院,廣東廣州510800 2.廣東理工學(xué)院工業(yè)自動化系,廣東肇慶526100
通過研究分析基于EmguCV的人臉識別技術(shù),將人臉識別技術(shù)應(yīng)用于智能服務(wù)機器人,利用Visual Studio2015平臺開發(fā)出一套智能服務(wù)機器人的人臉識別系統(tǒng),修改程序簡化了代碼,并添加語音互動系統(tǒng),提高了人與機器人之間的互動深度和人機交互能力,解決了機器人根據(jù)不同人群和對象進(jìn)行人臉識別,不能對對應(yīng)的服務(wù)項目智能選擇的難題,實現(xiàn)服務(wù)型機器人的全面智能化轉(zhuǎn)型。
整套智能服務(wù)機器人人臉識別系統(tǒng)的設(shè)計是在服務(wù)型機器人的基本運動系統(tǒng)中增加云端處理、語音交互、視覺模塊來實現(xiàn)人臉檢測與識別,并對人物做出相對應(yīng)的服務(wù)類型。人臉識別系統(tǒng)組成如圖1所示。
圖1 系統(tǒng)組成
智能服務(wù)機器人在視覺模塊可視區(qū)域檢測到人物存在時,自動進(jìn)行人臉檢測。對于未記錄過的人臉信息,可通過語音模塊進(jìn)行圖像信息錄入,并將信息自動保存到云端服務(wù)器。在之后檢測到相同人臉信息時,機器人將針對人物的信息與身份自動匹配并進(jìn)行相關(guān)類型服務(wù)。
該設(shè)計對智能服務(wù)機器人的攝像頭即圖像采集硬件并沒有特定需求,本系統(tǒng)可以應(yīng)用在任意一種具備攝像頭并具有WinForm平臺的設(shè)備中。人臉識別攝像頭模塊是智能型圖像采集模塊,該模塊具有很強的光線處理能力,能夠在強光、逆光、弱光環(huán)境中拍攝清晰的圖像,并且搭載不同的人臉識別算法[1?2],實現(xiàn)不同光線條件下的精準(zhǔn)人臉識別和圖像采集,可與第三方軟件及應(yīng)用管理系統(tǒng)緊密結(jié)合使用,廣泛嵌入VTM、ATM、自動發(fā)卡機等自助設(shè)備,實現(xiàn)人臉身份認(rèn)證。本設(shè)計并沒有采用類似的高級硬件,而是致力于調(diào)用普通的攝像頭,通過EmguCV直接實現(xiàn)后臺的人臉檢測與識別。
人臉識別技術(shù)是一種通過對人體臉部的特征信息進(jìn)行對比識別的技術(shù),即通過攝像設(shè)備采集視頻流或人臉圖像,自動檢測和跟蹤,進(jìn)而對檢測圖像進(jìn)行后臺處理與比對識別的一系列相關(guān)技術(shù)。人臉識別在實際工作中會受到光照、臉部表情和姿勢等因素影響,因此在交互過程中對圖像的識別算法進(jìn)行多條件優(yōu)化,能大大提高系統(tǒng)的交互性能[3?5]?;贓mguCV的人臉識別系統(tǒng)主要有以下幾個部分。
1.2.1 圖像采集和處理
圖像處理技術(shù)包括圖像壓縮,增強和復(fù)原,匹配、敘述和識別3個部分。系統(tǒng)有康耐視系統(tǒng)、圖智能系統(tǒng)等,是目前正在逐漸興起的技術(shù),包括預(yù)處理、分割、特征抽取和識別4個模塊,針對要完成某一特定的任務(wù),使用特定的圖像處理方法達(dá)到目標(biāo)效果。數(shù)字圖像處理內(nèi)容如圖2所示。
圖2 數(shù)字圖像處理原理
由于檢驗的光線、角度等因素對人臉檢測和人臉識別的影響,需要凸顯和細(xì)化圖像的細(xì)節(jié),降低圖像的噪點,所以在整個識別過程當(dāng)中,通常采用圖形去噪、灰度變換和均衡化處理等方式來實現(xiàn)。其中,圖形去噪采用簡易的低通濾波,灰度變換指通過灰度變換將原直方圖兩端的灰度值分別拉向最小值(0)和最大值(255),使圖像占有的灰度等級充滿(0~255)的整個區(qū)域,從而增加圖像層次,達(dá)到圖像細(xì)節(jié)增強的目的。均衡化處理是指用于增強局部的對比度而不影響整體的對比度,直方圖均衡化通過有效地擴展常用的亮度來實現(xiàn)這種功能。灰度變換代碼如下:
Image
gray_image.SmoothBilatral(3,3,3)://采用雙邊濾波降噪
gray_image._EqualizeHist()://采用直方圖均衡化
1.2.2 人臉檢測
人臉檢測主要采用Adaboost的方法。Adaboost是Boosting分類融合算法的一種,它通過對一些弱的分類器的組合來形成一個強的分類器,從而提高分類算法性能[6?9]。本設(shè)計采用Haar分類器,建立Boost篩選式級聯(lián)分類器,而且是一個監(jiān)督分類器。先對圖像進(jìn)行直方圖均衡化到同樣大小,然后標(biāo)記是否包含被檢測物體,人臉通過使用樣本的Haar特征對其進(jìn)行分類器訓(xùn)練得到級聯(lián)Haar分類器。通過單元測試對XML文件進(jìn)行識別判斷,此方法的實現(xiàn)準(zhǔn)確率很高,能夠完成識別功能。人臉檢測XML文件生成代碼如下所示:
String xml_path=Application.StartupPath+“/haarcascade_frontalface_alt.xml”://人 臉 檢 測XML文件
CascadeClassifier Face=new CascadeClassifier(faceFileName).
使用EmguCV中的CascadeClassifier類Haar分類器,實現(xiàn)人臉檢測功能,檢測實現(xiàn)功能準(zhǔn)確率約為98%,對于每一張采集的人臉圖片素材都進(jìn)行了訓(xùn)練,識別數(shù)據(jù)與準(zhǔn)確率很高,能夠?qū)崿F(xiàn)識別功能,具體的工作流程如圖3所示。
圖3 Haar分類器工作流程
1.2.3 人臉識別
人臉識別采用基于線性子空間方法,主要方法有以主成分分析(pricipal component analysis,PCA)和線性判別式分析(linear discriminant analysis,LDA)以及局部二值模式(local binary patterns,LBP)算法。
設(shè)計采用LBP算法。LBP是指在像素3×3鄰域內(nèi)的,以鄰域中心像素為閾值,將相鄰的8個像素的灰度值與其進(jìn)行比較,如果周圍像素值大于中心像素值,則該像素點的位置被標(biāo)記為1,否則為0。這樣,3×3鄰域內(nèi)的8個點經(jīng)比較可產(chǎn)生8位二進(jìn)制數(shù)(通常轉(zhuǎn)換為十進(jìn)制數(shù)即LBP碼,共256種),即得到該鄰域中心像素點的LBP值,并用這個值來反映該區(qū)域的紋理信息,如圖4所示。
圖4 LBP特征提取
用公式來定義:
每個像素都會根據(jù)鄰域信息得到一個LBP值,以圖像形式顯示LBP對光照有較強的魯棒性,如圖5所示。
圖5 光照下LBP算法的魯棒性測試
在LBP的應(yīng)用中,如紋理分析、人臉分析等,LBP圖譜一般都不作為特征向量用于分類識別,而是采用LBP特征譜的統(tǒng)計直方圖作為特征向量用于分類識別。
1.2.4 人臉訓(xùn)練及人臉特征提取
通過對每張人臉圖像進(jìn)行編碼并且將人臉的相關(guān)信息和編號保存起來,模仿機器學(xué)習(xí)過程。當(dāng)加載訓(xùn)練模板之后,識別器會主動將人臉信息和人臉圖像通過編號逐一關(guān)聯(lián)。檢測到的人臉通過識別算法,對訓(xùn)練過的人臉圖像中的各個特征點進(jìn)行評估后,從訓(xùn)練庫中選取匹配率最高的人臉圖像并輸出該圖像對應(yīng)的人臉信息,且此匹配率均達(dá)到95%以上。
1)保存人臉圖像
在.Net4.0框架下,微軟提供了一個System.Drawing.dll的程序集文件,通過使用當(dāng)中的Image類 的Save(Stream stream,ImageFormat format) 方法,輸入保存路徑以及保存的圖片格式,便可實現(xiàn)圖像的保存。其中,format為保存的格式。一般可以選擇JPEG、ICON、GIF、PNG、TIFF、WMF以及BMP圖標(biāo)圖像。在這里我們選擇ImageFormat.JPEG,將BMP圖像以JPEG的圖像格式保存(見圖6)。
圖6 保存后的JPEG人臉圖像
2)生成XML文件
首先使用System.IO命名空間下的FileStream類的OpenWrite方法,創(chuàng)建IO數(shù)據(jù)流,然后再對XML文件進(jìn)行相關(guān)的操作。生成XML文件需要用到XmlWriter的WriteStartDocument、WriteStartElement、WriteElementString、WriteEndElement以及WriteEnd-Document這5個方法。至于對XML文件的修改操作則需要使用XmlDocument類中的Save方法以及XmlElement類中的CreateElement方法創(chuàng)建各個根元素和使用AppendChild方法添加根節(jié)點。操作完成后必須使用Close方法關(guān)閉IO數(shù)據(jù)流。訓(xùn)練后XML文件內(nèi)容如下:
-
基于EmguCV的人臉識別系統(tǒng)如圖7所示,檢測與錄入狀態(tài)如圖8、9所示。
圖7 人臉識別檢測狀態(tài)
圖8 人臉識別錄入狀態(tài)
圖9 系統(tǒng)實測人臉JPEG圖像
EmguCV是.NET平臺下對OpenCV(Open Source Computer Vision Library)圖像處理庫的封裝,也就是C#版OpenCV視覺開發(fā)包。除此之外,OpenCV還支持在C#、VB、VC++等編譯語言下使用開發(fā)[10?12]。本設(shè)計主要選用C#作為編寫程序語言,調(diào)用EmguCV里的函數(shù)來完成對數(shù)字圖像的處理以及實現(xiàn)人臉識別。
項目調(diào)用EnguCV庫函數(shù)作為主要檢測函數(shù),運行軟件,程序自動進(jìn)入人臉檢測環(huán)節(jié),對無信息的人臉執(zhí)行提示功能,僅需添加一次信息,軟件會自動多次添加人臉數(shù)據(jù),再次檢測訓(xùn)練時,檢測出人臉信息,調(diào)用合成語音函數(shù)發(fā)出語音歡迎功能,程序支持多人臉同時檢測,并有語音讀出信息功能。函數(shù)訓(xùn)練功能代碼如下所示:
if(trainingImages.ToArray().Length!=0)
{
//TermCriteria for face recognition with numbers of trained images like max Iteration MCvTermCriteria termCrit=new MCvTermCriteria(ContTrain,0.001);
//Eigen face recognizer EigenObjectRecognizer recognizer=new EigenObjectRecognizer(
trainingImages.ToArray(),
labels.ToArray(),
5000,
Ref termCrit);
}
Name=recognizer.Recognize(result);
foundPeople[name]=f.rect;
項目調(diào)用SpeechSynthesizer類,提供對已安裝的語音合成引擎的功能的訪問,實現(xiàn)語音合成播報功能。創(chuàng)建新的SpeechSynthesizer對象時,將使用默認(rèn)系統(tǒng)語音。配置SpeechSynthesizer時使用其中安裝的語音合成(文本到語音),使用Select-Voice或SelectVoiceByHints方法。語音獲取安裝,使用GetInstalledVoices和VoiceInfo類方法的信息[13?15]。
每次釋放對SpeechSynthesizer的最后一個引用前,均應(yīng)調(diào)用Dispose。否則,在垃圾回收器調(diào)用SpeechSynthesizer對象的Finalize方法之前,該對象所使用的資源將不會被釋放,項目語音代碼如下所示:
語音播報
Private void SpeedSound(){
if(string.IsNu110rEmpty(label4.Text))
{
Return;
}
SpeechSynthesizer sp=new SpeechSynthesizer();
if(names==)
{
Thread.Sleep(2500);
if(foundPeople.Count==1)
sp.SpeakAsync(label4.Text+“你好”);
if(foundPeople.Count>1)
sp.SpeakAsync(label4.Text+“你們好”);
}
names==null;
th.Abort();
本設(shè)計基于原有WinFrom平臺,對原有的服務(wù)機器人(圖10)的內(nèi)置系統(tǒng)進(jìn)行了改造優(yōu)化。服務(wù)機器人的原有系統(tǒng)是基于C#語言編寫,即與EmguCV的使用語言相同,因此將本人臉識別系統(tǒng)直接并入開機程序中,做到機器人開機自動啟動識別程序,服務(wù)機器人在與不同用戶交流時,實時智能識別人物對象身份,自動做出交流互動的主題,并針對不同用戶介紹不同的產(chǎn)品,人機對話準(zhǔn)確率達(dá)到了98%,大大提高了智能化水平。
圖10 智能服務(wù)機器人
程序自動調(diào)用遷入設(shè)備的攝像裝置,進(jìn)行圖像處理、灰度轉(zhuǎn)換、降噪、均衡化處理等。通過對LBP人臉識別算法的反復(fù)實驗,發(fā)現(xiàn)光照越不均勻,識別器的識別速度越有所下降,但仍具有較高的穩(wěn)定性和識別率,最終實現(xiàn)多人實時的人臉識別功能,并在智能服務(wù)機器人中應(yīng)用。
對于傳統(tǒng)機器人與人臉識別系統(tǒng)的整合設(shè)計,需要多方面考慮。人臉識別對用戶圖像的精準(zhǔn)依賴性強,需要機器本身自帶較好的攝影攝像頭,且關(guān)于人臉識別的計算與訓(xùn)練并不會與所有計算流程或傳感反饋同步執(zhí)行,而是以異步形式運行,如圖11所示。機器人對于人臉識別訓(xùn)練后,就會對人物開始服務(wù)向?qū)?,并針對性做出對?yīng)的業(yè)務(wù)場景服務(wù)。類似歡迎動作,在檢測到人物時會有對應(yīng)的歡迎動作并播報語音功能,這一系列都是異步處理。且為避免機器人對人的傷害,機器本身都做了傳感檢測,并將檢測級別設(shè)為高級,當(dāng)檢測到有人或物品靠近并越過設(shè)定的安全距離時,將主動關(guān)閉其他正在執(zhí)行的線程作業(yè)。
圖11 人臉識別系統(tǒng)
系統(tǒng)進(jìn)行訓(xùn)練測試后所得的數(shù)據(jù)(系統(tǒng)識別率),與常規(guī)人臉識別算法所測試的相關(guān)數(shù)據(jù)進(jìn)行比較,如表1所示。由表中數(shù)據(jù)可得LBP算法對比其他常規(guī)算法而言穩(wěn)定性較強,且對環(huán)境的變化與多人(本實驗的測試人數(shù)為50人)人臉識別的情況下均能做到很好的支持。
表1 LBP算法與常規(guī)算法的系統(tǒng)識別率 %
在基于EmguCV的人臉識別方法,包含人臉檢測與人臉識別進(jìn)行了分析研究,通過對LBP人臉識別算法的反復(fù)實驗,修改編程設(shè)計,同時運用Haar特征對圖像進(jìn)行人臉檢測處理,設(shè)計出基于EmguCV的智能服務(wù)機器人人臉識別系統(tǒng)。在本研究中,得出以下結(jié)論:
1)對圖像進(jìn)行灰度轉(zhuǎn)換、降噪和圖像的均衡化處理,提高了人臉識別能力;
2)簡化代碼,提高了容錯率;添加語音互動系統(tǒng),提高人機交互能力;
3)對機器設(shè)置高級別傳感檢測,保證了安全距離。
機器人能夠直接通過設(shè)備調(diào)用進(jìn)行人臉檢測,能夠在多個環(huán)境下應(yīng)用,對生物特征鑒定技術(shù)有一定幫助,對大量同類問題的解決有著相互啟發(fā)和相互推動的現(xiàn)實意義。