馮瑛
(延安市人民醫(yī)院,陜西 延安 716000)
醫(yī)院圖書館管理關(guān)系到醫(yī)護人員借閱的便捷性,也是醫(yī)院技術(shù)水平提高的象征性標志之一[1]?,F(xiàn)有技術(shù)中,出入醫(yī)院圖書館的人員大多采用電腦登記和刷卡方式進行管理,這種方式管理落后。
隨著人工智能和人臉識別技術(shù)的逐步發(fā)展和應(yīng)用,在醫(yī)院圖書館中,出現(xiàn)了相關(guān)技術(shù)研究[2]。文獻[3]公開了一種將人臉識別和門禁系統(tǒng)相結(jié)合的方法,這種方法雖然能夠在一定程度上解決醫(yī)院圖書館的安全性問題,但是人臉識別系統(tǒng)還是存在高錯誤率。文獻[4]公開了一種打破傳統(tǒng)的新型Adaboost算法,將這個算法運用到人臉識別中。這種方法雖然能夠在一定程度上增加人臉識別的準確率,但是在人多情況下識別需要消耗大量的時間[5]。針對上述技術(shù)問題的不足,本文采用一種新型的圖書館人臉識別方法。
本文應(yīng)用了一種時空緩存數(shù)據(jù)庫的管理方法,該方法將時空數(shù)據(jù)模型和新型Adaboost算法恰當?shù)厝诤显谝黄?,能夠?qū)崿F(xiàn)進出圖書館人臉信息的動態(tài)索引和查詢,進而解決現(xiàn)有技術(shù)中人臉識別技術(shù)的識別準確率差和速度慢的問題[6],其中時空數(shù)據(jù)模型在實際應(yīng)用中有多種形式,例如時空耦合模型、連續(xù)快照模型、基態(tài)修準模型、立體時空模型和時空對象模型等。模型以時空數(shù)據(jù)庫為基礎(chǔ),對采集到的醫(yī)院圖書館人臉數(shù)據(jù)信息進行綜合管理。本文方案的總體架構(gòu)如圖1所示。
圖1 總體架構(gòu)示意圖
在本文研究的技術(shù)方案中,將整體的結(jié)構(gòu)圖劃分為多個不同模塊,這些模塊分別為基礎(chǔ)設(shè)施層、功能層、算法層和緩存服務(wù)層4個模塊,通過這4個模塊,能夠?qū)崿F(xiàn)圖書館入館人員的信息監(jiān)測、信息捕捉、特征算法和人臉對比等處理,最終實現(xiàn)人臉識別應(yīng)用。下面分別進行說明。
(1) 基礎(chǔ)設(shè)施層?;A(chǔ)設(shè)施層主要是醫(yī)院圖書館的門禁系統(tǒng)的操作設(shè)施,其中包括入館監(jiān)測、出館監(jiān)測、閘機控制和網(wǎng)關(guān)中心。入館監(jiān)測和出館監(jiān)測均通過智能攝像頭智能掃描采集人臉圖像數(shù)據(jù)信息。閘機控制在接收到人臉識別正確的數(shù)據(jù)信息后自動開啟,紅外線掃描人員通過后自動關(guān)閉等待下一個信息。網(wǎng)關(guān)中心主要是保證網(wǎng)絡(luò)的通信正常和安全,若出現(xiàn)緊急狀況則放棄閘機通道開啟緊急安全通道,人員進行人臉識別記錄后直接穿過即可。
(2) 功能層。功能層為基礎(chǔ)設(shè)施層提供相關(guān)的技術(shù)支持,該層主要是對人臉數(shù)據(jù)的收集和預(yù)處理。當人員人臉對上智能攝像頭時,采用靜態(tài)圖像分析人臉的不同位置、不同角度和不同表情收集數(shù)據(jù)信息進行保存。人臉切片是對于人臉的小范圍進行識別掃描,這樣能將人臉特征識別得更為細微精確。通過小區(qū)域的人臉膚色特征,首先選擇顏色空間,然后根據(jù)亮度的分級和色度值分類,接著建立膚色特征模型,最后將人臉圖像數(shù)據(jù)信息進行簡單的預(yù)處理。
(3) 算法層。算法層是根據(jù)功能層提供的數(shù)據(jù)信息進行分析計算,將結(jié)果反饋至基礎(chǔ)設(shè)施層。算法層包含的內(nèi)容有特征模型、關(guān)鍵點提取和人臉對比。關(guān)鍵點提取是把特征模型的圖像信息進行數(shù)字化,得到這個特征的人臉編號序列。人臉對比是利用緩存服務(wù)層搜索不同的人臉編號序列,并對比不同人臉的特征模型,從中來判斷該人臉圖像數(shù)據(jù)信息是否需要進行緩存。
(4) 緩存服務(wù)層。緩存服務(wù)層是為算法層提供很好的訪問性能。該層是利用Redis集群構(gòu)建時空緩存數(shù)據(jù)庫,用來存儲人臉圖像的數(shù)據(jù)信息,為算法層進行人臉對比提供便利。
在實際工作中,圖書館人員進出比較復(fù)雜,采集到的圖片信息蘊含了多種具有多維度和時間維度的數(shù)據(jù)量,基于這些數(shù)據(jù)量,常規(guī)技術(shù)的索引和查詢方式在動態(tài)識別人臉方面顯得尤為困難。因此,為了提高圖書館人臉識別水平,動態(tài)檢索和查詢就非常必要。本文還通過Redis集群分布式緩存構(gòu)架實現(xiàn)圖書館的時空緩存數(shù)據(jù)庫數(shù)據(jù)存儲,這種方法能夠解決圖像識別困難和識別時間長的問題。
本文采用改進型Adaboost算法,分類模型架構(gòu)如圖2所示。
圖2 Adaboost算法模型應(yīng)用示意圖
Adaboost算法模型的應(yīng)用過程說明如下:
(1) 假設(shè)將進出圖書館的人臉特征集合記作為{(x1,y1),(x2,y2),…,(xn,yn)}。在該數(shù)據(jù)集合中,將x記作為一種類型的人臉特征,用字母y表示經(jīng)過分類器分類后的人臉特征標識,為了區(qū)分對待,將人臉特征可以記為0和1。在y=0的情況下,該特征表示為非人臉數(shù)據(jù)樣本,在y=1的情況下,表示該特征為分類屬性范圍內(nèi)的人臉樣本。n為分類特征中人臉特征類型的數(shù)量[7]。
(2) 然后對分類后的人臉特征進行賦值、計算,其中賦值的數(shù)據(jù)集合記作為:
D={D0,1,D0,2,…,D0,n}
(1)
(3) 然后再歸一化處理分類器輸出的人臉特征樣本權(quán)值,輸出的樣本數(shù)據(jù)集合為:
pz={pz,1,pz,2,…,pz,n}
(2)
式中:pz為人臉特征樣本權(quán)值;pz,n為第n特征集合的人臉特征樣本權(quán)值。
(3)
式中:πz,n為分類器的屬性。
(4) 經(jīng)過權(quán)值歸一化處理后,弱分類器可以轉(zhuǎn)換為以下形式:
lz:{x1,x2,…,xn}→{0,1}
(4)
式中:xn為不同的弱分類器。每個不同的分類錯誤率可以通過式(5)來表示。
(5)
式中:ξz為分類錯誤率;Pz,j為第j特征集合的人臉特征樣本權(quán)值;hz(xi)為分類器;yi為第i個數(shù)據(jù)集。
(5) 在歷經(jīng)弱分類器經(jīng)過Z次分類后,弱分類器可以轉(zhuǎn)換成強分類器L(x),可以通過式(6)表示。
(6)
經(jīng)過上述公式討論后,再進行圖書館人臉識別時,可以針對不同類型的用戶進行人臉識別,大大提高了人臉識別程度。針對非人臉特征樣本的圖像識別如圖3所示。
圖3 非人臉特征樣本處理示意圖
在進行非人臉特征樣本進行識別時,首先需要設(shè)置分類閾值,如果抽取的樣本數(shù)據(jù)信息的權(quán)值處于設(shè)定的閾值范圍內(nèi),可以再進一步增加樣本的權(quán)值。當抽取的樣本數(shù)據(jù)信息的權(quán)值沒有在設(shè)定的閾值范圍內(nèi)時,則將權(quán)值進行減小處理。由于選擇的弱分類器不同,輸出的權(quán)值也不同。通過調(diào)整不同分類器的權(quán)值,可以提高樣本訓練的正確率。而強分類器是將多種強分類器串聯(lián)在一起,每個強分類器都由多種弱分類器組合而成,這樣通過多層次地對人臉特征進行篩選,提高了人臉精度。
在上述步驟中,尤其是在提取膚色區(qū)域時,需要構(gòu)建膚色模型。這是由于膚色模型不同,需要構(gòu)建不同的數(shù)學建模,以進一步描述膚色在不同色彩空間之間的分布情況,通過這種方式,能夠識別出圖像中那些部分屬于膚色[8]。再進行閾值計算,通過閾值的不同,能夠構(gòu)建起膚色模型和非膚色模型,通過這種方式以將膚色區(qū)域和非膚色區(qū)域區(qū)分開來。
2.2.1 Redis和Redis集群
Redis集群和Memcached集群在結(jié)構(gòu)上比較類似,都是NoSQL中的一種,屬于內(nèi)存比較高、運行比較快的高性能key-value(k-v)數(shù)據(jù)庫。這種方式與Memcached所表現(xiàn)不同的是,Redis集群能夠支持string、list、set、zset(sorted set)和hash類型數(shù)據(jù)類型,上述的這些數(shù)據(jù)類型大部分都能夠支撐push/pop、add/remove交集、并集和差集等多種、多項操作,與memcached集群表現(xiàn)形式比較類型。在工作過程中,為了保證數(shù)據(jù)集合的應(yīng)用效率,大部分數(shù)據(jù)被緩存在內(nèi)存中[9]。有待區(qū)分的是redis集群,該集群能夠周期性地把更新后的數(shù)據(jù)信息讀入磁盤,或者將修改后的操作信息存儲到記錄文件中,進而使得master-slave能夠?qū)崿F(xiàn)(主從)同步工作。在應(yīng)用redis集群之后,能夠?qū)emcached集群這類key/value存儲信息的不足給充分地利用起來。該數(shù)據(jù)庫信息提供了多種應(yīng)用信息,比如Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby和Erlang等客戶端。
2.2.2 Redis-Cluster 集群構(gòu)建時空緩存數(shù)據(jù)庫
在對Redis進行初始分布時,通常應(yīng)用分片的方式進行,在具體應(yīng)用時,應(yīng)用客戶端和Proxy分片的方式進行,在應(yīng)用客戶端時,在水平方面的擴展程度比較不易,硬件資源內(nèi)耗比較大,需要的硬件環(huán)境也比較高。需要在Redis3.0集群的情況下提出Cluster集群模式,模式示意圖如圖4所示。
圖4 Redis-Cluster集群架構(gòu)示意圖
通過圖4可以看出,當應(yīng)用Redis-Cluster集群時,通常是無中心結(jié)構(gòu)的。圖4中的每個應(yīng)用網(wǎng)絡(luò)節(jié)點都能夠?qū)?shù)據(jù)和整個集群狀態(tài)存儲起來,其中節(jié)點之間實現(xiàn)了互聯(lián)互通,不同的Redis節(jié)點之間互聯(lián)(PING-PONG機制)過程中實現(xiàn)信息交互。集群架構(gòu)中還使用二進制協(xié)議進行數(shù)據(jù)優(yōu)化,以進一步優(yōu)化網(wǎng)絡(luò)的傳輸速度和帶寬。網(wǎng)絡(luò)節(jié)點的fail能夠借助于集群中節(jié)點(通常超過一半)才能實現(xiàn)正常工作。
在客戶端,通過將應(yīng)用的硬件設(shè)備與Redis節(jié)點實現(xiàn)直接連接,該過程無需中間Proxy層即可完成。因此,在客戶端應(yīng)用的用戶不必連接集群內(nèi)的所有節(jié)點,任意一個連接節(jié)點即可滿足需求。在應(yīng)用過程中,還需要根據(jù)人臉識別系統(tǒng),對 Redis集群的應(yīng)用方法進行設(shè)置或者配置。
(1) 節(jié)點的配置或者創(chuàng)建。對三個不同的主節(jié)點進行創(chuàng)建,假設(shè)其不同的節(jié)點分別為 A、B、C,并且A、B、C三種不同的節(jié)點可以分別為一臺機器上的三個端口,也可以為三臺不同的服務(wù)器的三個節(jié)點。
(2) 空間分片??臻g分片能夠?qū)崿F(xiàn)節(jié)點數(shù)據(jù)的快速應(yīng)用,在具體工作時,能夠采用哈希槽 (hash slot)對16 384個slot進行分類,如果應(yīng)用了3個不同的節(jié)點,則這三個節(jié)點能夠?qū)崿F(xiàn)不同的應(yīng)用功能,比如在slot 區(qū)間范圍內(nèi):在節(jié)點A,能夠覆蓋0~5 460范圍內(nèi)的數(shù)據(jù)信息;在節(jié)點B,能夠覆蓋5 461~10 922范圍內(nèi)的數(shù)據(jù)信息;在節(jié)點C,能夠覆蓋10 923~16 383范圍內(nèi)的數(shù)據(jù)信息。在具體應(yīng)用過程中,假設(shè)對一個數(shù)據(jù)信息數(shù)據(jù)進行存儲,可以根據(jù)Redis-Cluster哈希算法進行計算,計算式有:
CRC16(‘key’)384 = 6 782
在這種情況下,能夠?qū)ey 的數(shù)值存儲在B中。通過這種方式,當對(A,B,C)內(nèi)任一節(jié)點進行“key”信息獲取時,能夠?qū)?nèi)部節(jié)點跳轉(zhuǎn)到B節(jié)點,以進一步獲取相關(guān)數(shù)據(jù)信息。
(3) 節(jié)點時間調(diào)度。如果在應(yīng)用過程中,需要對某個節(jié)點進行增加或者刪除,集群量不會減少,集群過程也不會停止。根據(jù)該原理,在大量人員入館和離館過程中,將全部的緩存節(jié)點緩存起來,能夠大大提高進入館人員的人臉識別度。
為了能夠證實Redis集群構(gòu)建時空緩存數(shù)據(jù)庫能夠提高人臉識別技術(shù)的計算速度、增強過的Adaboost算法能夠提高人臉識別準確率,下面將分別進行仿真試驗。
首先要構(gòu)建Redis 集群,來檢驗人臉識別系統(tǒng)加入時空緩存數(shù)據(jù)庫能有效地提升識別計算速度。本文采用CentOS6.8(x64)操作系統(tǒng)、4.0.1版本的Redis和2.4.6版本的ruby腳本,Intel(R) Xeon(R) CPU E5-2640 v2、2.00 GHz主頻、千兆網(wǎng)卡、8核16G內(nèi)存、512 GB硬盤的硬件環(huán)境[10]。創(chuàng)建三個服務(wù)器主節(jié)點,分別復(fù)制備份出2個虛擬節(jié)點,一共9個節(jié)點搭建Redis集群作為分布式緩存。為了檢驗各種類別測試人臉特征的識別效果,試驗調(diào)取了100張人臉圖像,從不同年齡段、不同性別、不同膚色和不同人臉角度分別測試每張圖像的識別效果。采用時空緩存數(shù)據(jù)庫和Redis集群的識別時間,與傳統(tǒng)人臉識別方法識別的時間進行對比,結(jié)果如表1所示。
表1 人臉識別耗時對比 ms
如表1所示,有關(guān)人臉識別的四個數(shù)據(jù)類型,采用100張人臉圖像,基于時空緩存數(shù)據(jù)庫和Redis集群的識別方法與傳統(tǒng)識別方法相比,耗時全部都要短。為了對比更加清晰,本文將以柱狀圖形式展現(xiàn),對比示意圖如圖5所示。
圖5 人臉識別耗時對比圖
如圖5所示,用時空緩存數(shù)據(jù)庫和Redis集群使人臉識別的執(zhí)行速度得到有效提升,比傳統(tǒng)識別方法快了大約10%。因此得出結(jié)論:對于醫(yī)院圖書館人臉識別系統(tǒng)來說,構(gòu)建時空緩存數(shù)據(jù)庫的效果還是很明顯的。
與傳統(tǒng)的Adaboost算法不同,本文采用的新型Adaboost算法在漏檢率方面大大降低,下面來進行仿真試驗。采用Pentium(R)CPU、8核16G內(nèi)存,電腦的硬盤容量為256G的硬件環(huán)境,軟件的操作系統(tǒng)Windows XP, JDK1.5,通過MATLAB軟件系統(tǒng)進行仿真。分別對單人臉的正面、單人臉側(cè)面和多人臉正面圖像進行識別,數(shù)量均為 100張人臉圖像,統(tǒng)計成功識別的次數(shù),結(jié)果如表2所示。
表2 人臉識別成功次數(shù)對比 次
通過上述數(shù)據(jù),在單人正臉方面,由于人臉識別比較容易,傳統(tǒng)Adaboost算法和改進過的Adaboost算法均能全部成功識別,沒有表現(xiàn)出差距。在單人側(cè)臉和多人正臉方面,存在識別的關(guān)鍵點減少等因素影響,有時會無法完全識別人臉圖像特征,識別率為95%和92%。根據(jù)膚色特征可以大大減少上述因素的影響,利用新型的Adaboost算法識別率均提高到99%。仿真試驗結(jié)果表明:新型Adaboost算法可以提高準確度。
本文基于時空緩存數(shù)據(jù)庫設(shè)計了新穎的人臉識別系統(tǒng),利用Redis集群在空間上增減節(jié)點的同時,在時間上對不同的節(jié)點設(shè)置不同的停止服務(wù)時間,達到時間和空間上的緩存優(yōu)化,可快速且高效地進行人臉識別。類似人臉識別這樣的智能技術(shù)與傳統(tǒng)圖書館服務(wù)的結(jié)合,也必將為智慧圖書館的建設(shè)帶來更廣闊的發(fā)展空間。