光學指紋當前隨着成本的降低,各大廠商都在低中高端旗艦用上了光學指紋。有別於傳統的電容指紋,光學指紋在解鎖性能上目前都進行了優化,性能接近電容指紋。算法
二者原理都是對指紋的紋路脊谷進行信號採集,經過記錄不一樣信號,實現指紋的錄入比對。安全
電容式指紋模塊是利用指紋與導電的皮下電解液造成電場,手指紋路的高低起伏會致使兩者之間的壓差出現不一樣的變化,所以可實現準確的指紋數據掃描。這種指紋識別方式比較通用,對環境要求比較弱,只要有指紋就能錄入識別,更重要的是這種指紋識別的元器件對空間佔用比較小。性能優化
光學指紋識別則是經過光線反射,利用一個短焦鏡頭,在可透光的OLED屏幕下方獲取到指紋的圖像,從而記錄和識別指紋信息。從原理上來看,光學指紋不管是指紋模組的設計,屏結構、指紋的軟件交互設計、整機功耗控制、整機結構上相較於電容指紋,條件都變的相對苛刻,對項目開發的挑戰也是大大增長。函數
錄入性能
用戶手指按壓->LCD高亮->指紋採圖->指紋錄入->存儲模板->上報錄入成功學習
解鎖優化
用戶指紋按壓->LCD高亮->指紋採圖->指紋識別->更新模板->上報解鎖成功設計
當前這種方式是各大廠商一套通用的邏輯,細節部分各大廠商均有不一樣程度的差別,可是大都是圍繞着這幾個點進行的性能優化。開發
因爲光學指紋的屏下的特性,致使了指紋方面對一些場景下的指紋識別體驗很是很差,具體常見的有如下幾類(如下指紋樣張來源於互聯網,不涉及任何用戶安全及三方保密協議,均爲原圖加噪聲圖擬合而成)模板
徹底不高亮
高亮不徹底
脫靶:
錄入
解鎖
貼軟膜指紋:
貼硬膜指紋:
脫皮指紋:
衣物誤觸:
異物指紋:
沾水指紋:
掌紋誤觸:
幹手指髒污
強光漏光
若是根據用戶羣體來分,新用戶像從電容轉到屏下指紋的絕大多數會出現按壓面積不全的狀況,由於電容指紋輕觸一下就解鎖開了,可是光學指紋須要等待LCD的高亮和器件曝光,若是輕觸,指紋採圖就是圖5的這種圖像,因此這類型用戶就會出現這種解鎖慢或者解鎖不靈敏的反饋。針對這種狀況,當前解決的方案基本都是經過用戶界面引導來讓用戶適應。
一些光學指紋的老用戶絕大多數的不靈敏場景主要有如下幾種,洗手、起牀、強光,手指脫皮,幹手指(主要是年齡稍微大些的用戶,出現的一些指紋糙化的紋理)、貼膜,對應於咱們上面的貼圖你們能夠看到,這類型的指紋紋路都出現了不一樣程度的紋理破壞或者糊化,致使有些指紋的特徵和錄入相差過大,最終識別失敗,特別是貼的硬膜,對指紋紋路破壞極其強大,因此建議你們都用出產手機自帶的膜,這樣指紋必定程度能保證比較好的解鎖體驗。
另外還有一類用戶,應該大多數都碰到過,某個指紋解鎖很靈敏,可是某個指紋解鎖不靈敏,主要緣由除了第二點裏面敘述到的以外,最大的一個緣由是脫靶,脫靶的意思,就是識別的指紋和錄入的指紋相差過大。主要有兩種狀況,第一種,錄入的時候手指狀態很好(不好),可是由於季節的變化手指和以前的狀態差異很大,比方說脫皮,裂紋。第二種,錄入的時候錄入的面積很侷限,只有指紋的一小部分,可是解鎖的時候,解鎖的指紋區域和錄入的區域不匹配,致使最後解鎖不開,對應上面的貼圖,主要就是脫靶部分,從這個脫靶的圖看,錄入的圖和解鎖的圖紋路方向都不一致。一般解決這種問題,有兩種方式,第一種是刪除重錄,這種對用戶不太友好。另一種是,要多使用錄入的指紋,由於咱們有模板學習的功能,在識別成功後,若是模板達到必定的條件,咱們會把當前的指紋模板學習進去,以此來擴大錄入的模板。
對於上述的差手指,目前Gabor濾波,可以必定程度上進行圖像的特徵加強對指紋圖像進行優化。
Gabor是一個用於邊緣提取的線性濾波器,其頻率和方向表達與人類視覺系統相似,可以提供良好的方向選擇和尺度選擇特性,比較適合紋理分析。
其中:
Gabor參數介紹
λ:正弦函數波長
θ:Gabor核函數的方向
ψ:相位偏移
σ:高斯函數的標準差
γ:空間的寬高比
這幾個參數後面咱們在代碼中會先固定寫好,看下實際的效果。
Gabor濾波流程
開發語言:Python
開源庫 :Opencv, Matplotlib, Numpy
從圖像看,針對局部沾水和髒污致使的紋理不清晰,通過Gabor預處理後,能夠必定程度上進行紋理加強。
目前來看,幾種指紋識別各有優點,經典的電容式指紋解鎖速度快、識別率高、成本低、安全性較高,但比較影響全面屏手機的外觀。屏幕光學指紋的解鎖速度、精度都還有所欠缺,不過更具備科技感,也有發展性。指紋組這邊,會秉承用戶至上的理念,吸納各類不一樣方案的指紋種類來增長指紋的總體可選性,知足市場上來自不一樣人羣的需求。在指紋的算法上,也會持續紮根,加大本模塊的核心競爭力。