最近更新: 2015-07-06

臉部辨識系統經驗談

Master Card 宣告加入臉部辨識認證。文中特別提了兩件事。一、它只是儲存了一個算法,而不是儲存了用戶的面容圖片;二、要做眨一眨眼的動作,避免歹徒利用卡主的照片騙過系統。

就我參與的國內生物辨識系統專案來看,大部份生物辨識系統都不會儲存原始照片。以臉部辨識為例,是從大頭照中分出特徵區域,再將特徵內容化為曲線函數儲存(就是算式),一般也不只一組。這些曲線函數組一般稱為 template 。比對時也一樣,拍照後將特徵轉為曲線函數,再比對曲線函數的差異性。

臉部辨識找臉的方式也和特徵區域有關。首先就是找出三個略呈等距倒三角形的深色點,三點一組就可以認定這有一張臉;上面兩端點是眼睛,下面尖端是嘴巴。分出特徵區域後,再針對區域取曲線函數。而所有臉部辨識系統的重點區域都在眼睛形狀,而不是整張臉。這就是為什麼「反臉部辨識」系統都要在眼睛部份作手腳。例如 AVG 的「反辨識裝置」就在眼鏡鏡框四周加裝紅外線光源,干擾臉部辨識演算法分析眼睛形狀曲線。改變拍照環境的光線也可以干擾臉部辨識。再如 Google 一開始推臉部辨識解鎖時,被人發現在光線微弱的環境下常常破功。原因在於此時不易找出深色點,或者眼睛周圍的曲線不明顯。針對光線問題,有些臉部辨識系統的硬體會採用紅外線攝影鏡頭。但碰到像 AVG 那麼故意的也沒用。

話說日本 NTT 推出過「虹膜辨識手機」,我個人有些懷疑是誇飾。因為正規的虹膜辨識,鏡頭至少要貼在眼睛五公分內。但它的宣傳影片看來沒這麼近,而且一般的手機前鏡頭不能對焦這麼近的距離。但若說是臉部辨識的特化版 - 省掉找臉動作,直接分析單隻眼睛的曲線函數 - 那就說得通。

由於辨識系統取出的特徵區域只有眼睛和嘴巴,所以將這些曲線函數繪成曲線圖,也得不到原始人物的完整臉部輪廓。感覺上就像是用漫畫手法畫出一張人臉後,再把眼、嘴以外的部份擦掉。故可保障個人肖像的隱密性。

再說眨眼動作防止照片詐騙這一招。剛好我參與專案選用的辨識引擎也有這一套機制,他們稱為活體辨識 (liveness check)。啟用活體辨識時,需要提供一組連續照片(至少10張以上)給辨識引擎,辨識引擎就可以分析這些連續照片的曲線值差異,判定照片來源是拍攝自真人還是靜態照片。而為了提高差異度,最好在拍攝過程中,指示目標搖搖頭、眨眨眼。反過來說,如果被拍照者一直盯著鏡頭看的話,很容易被判定為「非活體」目標。

因為要取連續多張照片,並給使用者作出搖頭眨眼的反應時間,啟用活體辨識時會需要比較長的拍攝時間。就我的經驗來說,此時從拍攝到取好特徵至少要三秒才準確。喔,因為時間太久了,所以我參與的那套專案最後並沒有啟用這一項功能。

提到時間,補充一些辨識速度的資訊。 WebCam (或手機鏡頭) 取 640x480 解析度就可以辨識,不過可靠度比較低。一般取 1280x720 左右的解析度會是處理速度和可靠度的平衡點。在這個尺寸下,用 Intel Atom CPU 就可以做到單張照片 0.02 秒判斷有沒有臉, 0.3 秒完成單一人員的特徵取樣的比對工作。當然這 0.3 秒是一對一的比對速度。如果要做一對百萬人的比對,就要用叢集作業了。

最後一提,現行主要的生物辨識技術中,臉部辨識準確性最低,指紋較高,掌紋再高,虹膜最高。但虹膜的操作性也比較麻煩,還要將鏡頭貼近眼睛。

相關文章
樂多舊網址: http://blog.roodo.com/rocksaying/archives/44786114.html