陳林
(宿遷學(xué)院,江蘇宿遷,223800)
在上世紀(jì)六十年代,已經(jīng)開始了人臉識別系統(tǒng)的研發(fā)設(shè)計(jì)工作,自九十年代末開始應(yīng)用該技術(shù)以來,人臉識別系統(tǒng)發(fā)生了巨大變化。一方面,在核心算法方面,從初級的圖像識別,發(fā)展到了以人工智能技術(shù)為基礎(chǔ)的機(jī)器識別。另一方面,在該系統(tǒng)的應(yīng)用過程中,形成了不同技術(shù)主導(dǎo)下的多元化運(yùn)用局面,促進(jìn)了各行業(yè)諸領(lǐng)域的智能化發(fā)展。由于公交車客流狀態(tài)的實(shí)時(shí)監(jiān)測與公共安全、載客數(shù)量、公共資源配置等密切關(guān)聯(lián),因此,在新時(shí)期十分有必要增強(qiáng)人臉識別系統(tǒng)在該領(lǐng)域的運(yùn)用,促進(jìn)公共交通事業(yè)向著智慧交通方向升級,為構(gòu)建更高層次的平安中國提供技術(shù)支持。
在圖像分析技術(shù)中,人臉識別技術(shù)發(fā)展早、應(yīng)用范圍相對較廣。而且,在一些成熟的平臺上可以直接對人臉識別系統(tǒng)進(jìn)行二次開發(fā),提高人臉識別技術(shù)的應(yīng)用效率。以英特爾公司開發(fā)的OpenCV 程序?yàn)槔ㄟ^對C 函數(shù)、C++函數(shù)的運(yùn)用,能夠?qū)崿F(xiàn)在OpenCV 跨平臺計(jì)算機(jī)視覺庫基礎(chǔ)上,對人臉識別系統(tǒng)的二次開發(fā),而且,在語言接口方面,設(shè)置有MATLAB、Ruby、Python 等,增強(qiáng)了該工具的適用性。從系統(tǒng)組成與開發(fā)環(huán)境方面看,需要在Windows 操作系統(tǒng)(本次研究中以Windows 10 為準(zhǔn),其中安裝了OpenCV 2.4.9 軟件工具包、Eclipse,以及Visual Studio 2015 編譯器)下,完成圖像數(shù)據(jù)采集、數(shù)據(jù)處理、人臉識別、通過檢測、上傳客戶端。
從配置方面看:(1)圖像數(shù)據(jù)采集:由相機(jī)攝相頭實(shí)現(xiàn),本次研究中選取Microsoft Lifecam Studio 相機(jī)。(2)圖像數(shù)據(jù)處理:以O(shè)penCV 圖像處理庫為準(zhǔn),結(jié)合與之匹配的函數(shù)完成。(3)人臉識別:基于圖像數(shù)據(jù)的人臉識別,需要先使用OpenCV 庫中的Haar 分類器,再利用分類器對已經(jīng)處理過的圖像數(shù)據(jù)實(shí)時(shí)人臉識別。(4)上傳客戶端:在該環(huán)節(jié),主要是將人臉識別檢測中生成的結(jié)果,以模型(Socket)通道,上傳到與系統(tǒng)連接的PC 端設(shè)備或移動(dòng)設(shè)備中,從而使客戶端可以實(shí)時(shí)的完成圖像顯示等。在系統(tǒng)程序流程設(shè)置的五大步驟中,第一步要求先完成抓取圖像、臉部區(qū)域、圖像預(yù)處理,同時(shí)結(jié)合訓(xùn)練圖像、訓(xùn)練數(shù)據(jù)進(jìn)入到第二步實(shí)現(xiàn)圖像識別。完成后進(jìn)入第三步步驟,實(shí)施檢測計(jì)數(shù)。并配合定時(shí)器的設(shè)置進(jìn)入到第四步協(xié)議傳輸。最后完成向移動(dòng)設(shè)備的圖像數(shù)據(jù)上傳。
圖像采集的載體是攝相頭,具體操作中,可以利用cvCaptureFromCAM()完成圖像數(shù)據(jù)采集。由于圖像由幀數(shù)構(gòu)成,每一幀圖像,均可以通過cvQueryFrame()獲取。圖像采集代碼如下:
在圖像數(shù)據(jù)采集過程中,由于環(huán)境因素、設(shè)備因素、采集對象、采集位置等綜合因素影響,會(huì)產(chǎn)生一定的干擾。例如,在反光條件下、位置相對較偏、采集圖像的尺寸差異與設(shè)計(jì)值差異較大時(shí),采集到的圖像,在人臉識別檢測過程中,會(huì)產(chǎn)生一定的偏差,造成識別不精準(zhǔn)、無識識別、識別失真等情況。因此,為了化解該問題,需要先對圖像進(jìn)行預(yù)處理。具體操作中,主要是先對每一幀圖像進(jìn)行灰度轉(zhuǎn)化,再實(shí)施直方歸一化處理。在灰度圖像的轉(zhuǎn)化過程中,主要是應(yīng)用cvCvtColor()實(shí)現(xiàn),在直方圖歸一化處理過程中,主要按照cvEqualizeHist()實(shí)現(xiàn)。
臉部檢測中需要采用OpenCV 中的Haar 分類器。該分類器屬于一種技術(shù)方案,是對眾多人臉進(jìn)行檢測的同一技術(shù)方案中的新版本。從該技術(shù)方案的發(fā)展看,首先,是由JONES Michael 與VIOLA Paul 兩人共同設(shè)計(jì),先創(chuàng)造了Viola-Jones 檢測器。其次,以第一代檢測器為基礎(chǔ),通過MAYDT Jochen 與 LIENHART Rainer 兩人的努力,借助對角特征的擴(kuò)展,才實(shí)現(xiàn)了對原始技術(shù)方案的優(yōu)化。由于在擴(kuò)展過程中,突出了Haar 的小波特征,因此,該分類器才被命名為Haar 分類器。對Haar 分類器的使用過程中,要求進(jìn)行大量的數(shù)據(jù)訓(xùn)練,并將其存儲于該平臺自帶庫中,具體操作中以xml 文件形式進(jìn)行保存。
檢測方法共由三個(gè)步驟組成:(1)加載變量:借助cvLoad()加載CvHaarClassifierCascade 變量。(2)進(jìn)行檢測:以cvHaarDetectObjects()實(shí)施檢查;同時(shí),要求以分類器(與函數(shù)級聯(lián))為通道,確定目標(biāo)物體區(qū)域并進(jìn)入到該區(qū)域的一序列矩形框。實(shí)際上在該過程中,先要在已經(jīng)獲取的圖像數(shù)據(jù)中確認(rèn)目標(biāo)物體所在的區(qū)域,明確其位置,再通過的返回的方式,進(jìn)入到該區(qū)域。(3)保存變量:需要將臉部檢測獲得的實(shí)際結(jié)果存儲到cvRect 變量之內(nèi)。
人臉識別后,需要與具體的個(gè)體特征進(jìn)行“對號入座”。通過在cvRect 變量之內(nèi)保存臉部檢測結(jié)果,實(shí)際上已經(jīng)確定了目標(biāo)物體所在區(qū)域,此時(shí),僅需要通過對目標(biāo)物的圈出即可實(shí)現(xiàn)對人數(shù)數(shù)據(jù)的獲取。具體操作中:(1)通過cvRound()圈出該目標(biāo)。這樣,通過“循環(huán)累加”,實(shí)際上就可以得到每一幀圖像中確定的人數(shù)數(shù)據(jù)。(2)轉(zhuǎn)換字符數(shù)據(jù)、整型數(shù)據(jù)。(3)將轉(zhuǎn)換獲得的數(shù)據(jù)存入剪貼板??梢越柚鷖trcpy()實(shí)現(xiàn)。此時(shí)存儲的人數(shù)數(shù)據(jù)即為后續(xù)可以進(jìn)行實(shí)時(shí)發(fā)送的數(shù)據(jù)。該流程的代碼見下圖1。
首先,本次研究中使用的網(wǎng)絡(luò)通信協(xié)議屬于Internet 最基本的協(xié)議,以TCP/IP(Transmission Control Protocol/Internet Protocol)為準(zhǔn),翻譯為漢語意思是傳輸控制協(xié)議/因物網(wǎng)互聯(lián)協(xié)議。由于該協(xié)議是一個(gè)整體上的協(xié)議族,所以,在協(xié)議應(yīng)用中以層級結(jié)構(gòu)為主,由最上層到最一層分別為:(1)應(yīng)用層;(2)傳輸層;(3)網(wǎng)絡(luò)層;(4)網(wǎng)絡(luò)接口層。由于下一層為上一層提供網(wǎng)絡(luò)服務(wù),所以,在TCP 協(xié)議的使用中,要通過三次連接才能真正完成連接。具體操作中,要求在完成連接后對其進(jìn)行拆除處理。IP 協(xié)議是網(wǎng)絡(luò)層,通過該協(xié)議可以完成計(jì)算機(jī)之間的網(wǎng)絡(luò)通信連接,所以,在該協(xié)議下實(shí)際上可以實(shí)現(xiàn)各類設(shè)備之間的網(wǎng)絡(luò)互聯(lián)。
其次,在通信模型方面,該系統(tǒng)中主要以作為抽象層的Socket 為準(zhǔn)。它的功能是通過建立連接滿足客戶端與服務(wù)端之間的數(shù)據(jù)發(fā)送與數(shù)據(jù)接收??梢酝ㄟ^C++編程完成。
第三,繼續(xù)以C++為例,服務(wù)端的Socket 對象建立過程中,需要圍繞套接字完成八個(gè)步驟完成:加載庫——?jiǎng)?chuàng)建套接字——綁定——監(jiān)聽模式——客戶請求、接受連接、返回——客戶端通信——返回——關(guān)閉。
第四,與服務(wù)端相比,客戶端的Socket 對象建立步驟相對較少,只需要完成套接字庫的加載與套接字的創(chuàng)建,將連接請求發(fā)送至服務(wù)器。然后,在取得通信后關(guān)閉即可。在本次研究中,安裝的編譯器為Visual Studio 2015,所以,在實(shí)際的客戶端編程中,則按照安卓版本的實(shí)際要求,進(jìn)行了Java語言編程。具體代碼見下圖2。
第五,完成以上系統(tǒng)設(shè)計(jì)開發(fā)之后,將該程序?qū)氲紼clipse adt,JDK1.8.0_121 和 Android 5.1 版本進(jìn)行試運(yùn)行,結(jié)果顯示可以完成手機(jī)通信客戶端的試運(yùn)行。
通過試運(yùn)行分析可以看出,在公交車客流狀態(tài)實(shí)時(shí)監(jiān)測方面,采用基于圖像分析的監(jiān)測方案時(shí),可以選擇能夠進(jìn)行人臉識別系統(tǒng)二次開發(fā)的開發(fā)設(shè)計(jì)方案。一方面,通過對適用性平臺的選擇,有利于降低開發(fā)難度,節(jié)約成本。另一方面,對于該系統(tǒng)的開發(fā)僅需要公交管理部門的一般程序編寫人員即可以完成。所以具有多個(gè)方面的比較優(yōu)勢。但是,在實(shí)際的使用中,仍然需要結(jié)合實(shí)際情況進(jìn)行持續(xù)優(yōu)化,才能保障其應(yīng)用的有效性。
人臉識別系統(tǒng)已經(jīng)廣泛應(yīng)用于公共安全領(lǐng)域,尤其在城市地下軌道交通、地面交通樞紐站中的應(yīng)用相對普遍。現(xiàn)階段,我國正處于智慧城市建設(shè)的新階段,為了保障智慧安全、提高智慧城市公共交通的資源配置效率。一方面,應(yīng)該增強(qiáng)對公交車客流狀態(tài)實(shí)時(shí)監(jiān)測技術(shù)的研究。另一方面,則應(yīng)該利用當(dāng)前已經(jīng)十分成熟的圖像分析技術(shù),合理的選擇人臉識別系統(tǒng)對客流狀態(tài)進(jìn)行數(shù)據(jù)采集、數(shù)據(jù)獲取、數(shù)據(jù)分析,從而為智慧城市的數(shù)據(jù)化管理提供數(shù)據(jù)支持。通過以上初步分析,建議在當(dāng)前階段,選擇技術(shù)成熟度高、投入成本相對較少、系統(tǒng)開發(fā)過程容易實(shí)現(xiàn)平臺,進(jìn)而促進(jìn)人臉識別系統(tǒng)在公交車客流狀態(tài)實(shí)時(shí)監(jiān)測方面的快速應(yīng)用。