■ 文/國家安全防范報警系統(tǒng)產(chǎn)品質(zhì)量檢驗檢測中心(北京) 張旭東 陳燦燦
關(guān)鍵字:指靜脈識別 算法性能測試
相較于其他生物特征識別,手指靜脈識別具有以下優(yōu)勢:1)非接觸式采集。一是手指靜脈圖像不容易受手指表面條件影響,二是非接觸式采集對用戶來說更為方便、衛(wèi)生;2)活體識別。手指靜脈圖像只能采集到活體的指紋;3)高安全性。手指靜脈是人體的內(nèi)部特征,因此難以被盜竊、復(fù)制;4)采集設(shè)備體積小、便于攜帶。 與掌靜脈和手背靜脈采集設(shè)備相比,手指靜脈的采集設(shè)備體積較小,便于攜帶。指靜脈識別不斷深入應(yīng)用到醫(yī)保、社保、司法監(jiān)獄、軍隊、金融、教育等更多身份識別領(lǐng)域。生物特征識別企業(yè)紛紛推出各自的指靜脈識別算法和產(chǎn)品,但眾多算法缺少統(tǒng)一的測試平臺對其算法性能進(jìn)行橫向測評比較,客戶很難組織大規(guī)模的算法評測。本文主要是通過指靜脈測試樣本庫和算法測試平臺對指靜脈算法進(jìn)行識別性能測試,為各廠商及用戶提供測試服務(wù),為指靜脈識別算法選型提供參考。
指靜脈算法識別性能測試包括錯誤接受率(FAR)、錯誤拒絕率(FRR)、等錯誤率(EER)和指靜脈識別響應(yīng)時間(T)等共4 項技術(shù)指標(biāo),以及ROC 或DET 曲線。本文根據(jù)GB /T 35676-2017《公共安全 指靜脈識別應(yīng)用算法識別性能評測方法》中規(guī)定的接口方式和性能參數(shù),對算法進(jìn)行測試。該標(biāo)準(zhǔn)有兩個核心函數(shù),其中一個是提取特征函數(shù),輸入指靜脈圖像,返回該圖像的特征。另一個是特征比對函數(shù),輸入兩個特征,返回這兩個特征的比對相似度值。
對指靜脈識別算法而言,主要是對兩個采集對象的兩張指靜脈圖片、兩個指靜脈特征或一個指靜脈圖像和一個指靜脈特征進(jìn)行比對,核心是兩個特征進(jìn)行比對后返回兩個特征的比對相似度值。
指靜脈圖像比對分為兩種情況,即同指比對和異指比對。當(dāng)收到同一手指采集的兩張圖片特征時即為同指比對,如果返回相似度值較大,被認(rèn)為是正確的同指比對判斷;如果返回相似度值較低,則可能被判定為是一次錯誤的同指比對。這一方法需要測試樣本庫中具有同一手指的多次采集數(shù)據(jù),才能保證足夠多的同指比對次數(shù),對算法同指比對性能進(jìn)行測試。當(dāng)收到兩個不同手指圖像提取的特征時即為異指比對,如果返回的相似度夠大,被認(rèn)為是錯誤的異指比對判斷,如果返回很低的相似度值,則可能認(rèn)為是一次正確的異指比對判斷,這需要測試樣本庫中,有足夠多的不同手指樣本進(jìn)行采集,才能保證足夠多的異指比對次數(shù),對算法異指比對性能進(jìn)行測試。
通過足夠大的測試樣本庫,對同指和異指進(jìn)行比對測試,記錄每次比對算法返回的相似度值。如果想得到比對結(jié)果到底是接受還是拒絕,需要一個門限值作為標(biāo)尺。對于同指比對,相似度值大于門限值時,認(rèn)為是一次正確比對,相似度值小于門限值時,認(rèn)為一次錯誤比對。對于異指比對,相似度值大于門限值時,認(rèn)為是一次錯誤比對,相似度值小于門限值時,認(rèn)為是一次正確比對。統(tǒng)計不同門限值下的同指比對和異指比錯誤次數(shù),把錯誤次數(shù)分別除以同指和異指比對總次數(shù),就得到錯誤拒絕率和錯誤接受率,將門限值作為橫坐標(biāo),錯誤拒絕率和錯誤接受率作為縱坐標(biāo)就得到兩條曲線即FAR(錯誤接受率)和FRR(錯誤拒絕率)。正常情況下兩條曲線會有一個交點,這個交點就是錯誤接受率和錯誤拒絕率同時最低的錯誤率(EER 等錯誤率),記錄此時的門限值。具體參見圖1、圖2 和圖3。
圖1 FAR/FRR 曲線
圖2 ROC 曲線
圖3 DET 曲線
測試過程中能夠記錄每次特征提取和特征比對所用時間,最后計算出指靜脈識別響應(yīng)時間,即平均特征提取時間和平均特征比對時間之和。
對于面對多家算法廠商的測試,需要保證測試內(nèi)容的一致性,例如選取哪些測試樣本,需要哪些測試樣本進(jìn)行比對,包含特征提取任務(wù)和特征比對任務(wù)。為保證公平公正,不同廠商需使用完全一致的特征提取任務(wù)和特征比對任務(wù),這就要求能夠把特征提取任務(wù)和特征比對任務(wù)保存起來,確保一致。
通過數(shù)據(jù)庫對測試樣本進(jìn)行分類和管理。同時,通過對文件名的解析保存文件多個維度信息,如一枚圖像信息包括:文件保存路徑、人員編號、指位代碼、采集序號、特征文件保存路徑等。此外,可以將生成特征文件保存路徑預(yù)先設(shè)定好后保存在數(shù)據(jù)庫中,特征提取時調(diào)用此數(shù)據(jù)庫保存到對應(yīng)位置,為特征比對做好準(zhǔn)備。
根據(jù)圖像列表可生成特征比對任務(wù),同指比對相對較少可全部保留,異指比對次數(shù)比同指比對次數(shù)多。通過設(shè)置滑動窗口范圍,在不影響最終結(jié)果的前提下控制異指比對總次數(shù),使得異指比對次數(shù)與同指比對次數(shù)相當(dāng),提高測試效率。
特征提取和特征比對是不斷重復(fù)的工作,目前的樣本庫測試,需要比對5 萬次特征提取和50 萬次特征比對,一般算法需要兩天時間完成??紤]采用多線程進(jìn)行特征提取和特征比對,提高測試效率,要注意線程間協(xié)同,避免競爭或漏掉測試任務(wù)的情況。
通過專業(yè)的matplotlib 庫繪制FAR/FRR、ROC、DET曲線,直觀展示算法識別性能。
出于快速開發(fā)、支持多線程、圖形化界面、輕松繪制數(shù)據(jù)圖表的考慮,本文采用Python 作為開發(fā)語言,選取支持大量并發(fā)訪問的NoSQL 數(shù)據(jù)庫MongoDB 作為后臺數(shù)據(jù)庫,采用WxPython 開發(fā)圖形化界面,采用ctypes從Python 語言調(diào)用Windows DLL 動態(tài)鏈接庫,采用PyPubSub 實現(xiàn)WxPython 線程間通信進(jìn)行多線程特征提取和比對,采用matplotlib 繪制FAR/FRR 曲線、ROC 曲線和DET 曲線,下面分別詳細(xì)介紹實現(xiàn)方式。
一般情況下,Python 程序是命令行程序,不帶圖形化界面,如果需要圖形化界面則要使用專門的庫,并用特定方式編寫代碼。本文選取WxPython作為界面開發(fā)工具,以此實現(xiàn)圖形化界面。
WxPython 是一個專門為Python 編程語言設(shè)計的跨平臺GUI 工具包,由C++ 語言編寫,允許 Python 程序員簡單輕松地創(chuàng)建健壯的、功能強大的圖形用戶界面程序。WxPython 也是開源的,任何人均可免費使用,并且可以查看和修改源代碼。此外,WxPython 是跨平臺的,相同的程序無需修改即可在多個平臺運行。當(dāng)前支持的平臺包括Microsoft Windows、Mac OS X 和 mac OS,以及 Linux 或其他具有 GTK2 或 GTK3 庫的類 Unix 系統(tǒng)。由于編程語言是Python,所以WxPython 程序簡單、易編寫、易理解。
WxPython 是由事件驅(qū)動的,所以界面設(shè)計和后臺功能實現(xiàn)是分開的,通過專用工具wxFormBuilder設(shè)計界面,設(shè)計好每個按鈕的函數(shù)名,用Python 實現(xiàn)函數(shù)的具體功能則可以實現(xiàn)圖形化界面。具體參見圖4。
圖4 WxPython 界面設(shè)計
圖5 為定義按鈕的響應(yīng)函數(shù),后面分別給出函數(shù)的具體接口定義、代碼片段,但不用在界面代碼中具體實現(xiàn)響應(yīng)函數(shù)。
圖5 事件驅(qū)動
為了加快測試進(jìn)程可進(jìn)行多線程設(shè)計,在特征提取時,特征比對和結(jié)果計算的緩解采用多線程運行,前臺顯示線程進(jìn)度和正在處理的消息。
WxPython 中通過PySubpub 進(jìn)行線程間通信,實現(xiàn)前臺界面顯示后臺線程進(jìn)度、收發(fā)消息等功能。通過消息訂閱的方式,后臺線程發(fā)送特定消息,前臺通過分發(fā)消息到相應(yīng)處理函數(shù),處理函數(shù)解析消息具體內(nèi)容,顯示到訂閱消息的控件上。具體參見圖6。
圖6 消息訂閱
如圖7 所示,處理函數(shù)收到消息后,顯示到前臺控件上。多線程提取特征則如圖8 所示。
圖7 處理函數(shù)將信息顯示到前臺控件
圖8 多線程提取特征
本文實現(xiàn)算法測試平臺參考GA /T 35676 -2017《公共安全 指靜脈識別應(yīng)用 算法識別性能評測方法》附件A中規(guī)定的接口函數(shù)要求,需要受測廠家根據(jù)這個標(biāo)準(zhǔn)提供動態(tài)鏈接庫,測試平臺使用Python 語言調(diào)用有c 或c++編寫生成的動態(tài)鏈接庫,需要用到ctypes 庫,圖9 為具體調(diào)用方法。
圖9 通過ctypes 調(diào)用Windows 動態(tài)鏈接庫
在Python中使用數(shù)據(jù)科學(xué)的常用繪圖工具matplotlib繪制數(shù)據(jù)圖表,通過0-1 之間平均分布的1000 個值作為預(yù)設(shè)相似度閾值,計算錯誤拒絕率和錯誤接受率。通過這些數(shù)據(jù)分別繪制FAR/FRR、ROC 和DET 曲線,并計算相等錯誤率和對應(yīng)的相似度閾值,圖10 為最終測試結(jié)果圖。
圖10 根據(jù)計算結(jié)果生成測試結(jié)果
本文通過對指靜脈識別算法性能指標(biāo)測試指標(biāo)和測試方法進(jìn)行研究,提出了一種可行的實現(xiàn)方案;測試平臺在提高測試效率上體現(xiàn)在兩個方面,一是比對次數(shù)可控,通過調(diào)節(jié)參數(shù)控制異指比對次數(shù)調(diào)節(jié)測試時間,二是采用多線程進(jìn)行特征提取和特征比對,切實縮短測試時間,提高測試效率;測試結(jié)果方面能夠繪制三種曲線、計算出相等錯誤率,直觀展示算法性能;測試平臺調(diào)試完成后,項目組將繼續(xù)完善測試樣本庫,形成對算法廠商具有一定挑戰(zhàn)性的測試庫,提高測試權(quán)威性。