背景
人臉識別技術在當下已經十分成熟,但主要在移動端和專有裝置應用上較為普及,而在Web端並不多見,本著學習的目的從零實現web端的人臉登入功能。
視訊流:使用navigator.getUserMedia方法在瀏覽器中獲取視訊流+音訊流(通過攝像頭麥克風),將來可以用於獲取任意資料流,比如光碟和感測器。
face_recognition:被稱為世界上最簡單的人臉識別庫(使用確實超簡單)。你可以通過Python引用或者命令列的形式使用它,來管理和識別人臉。該軟體包使用dlib中最先進的人臉識別深度學習演算法,使得識別準確率在《Labled Faces in the world》測試基準下達到了99.38%。它同時提供了一個叫face_recognition的命令列工具,以便你可以用命令列對一個資料夾中的圖片進行識別操作。
總體流程:
- 啟動web服務,使用face_recognition將基礎庫圖片進行建模,將建模結果(識別到的人臉在圖片中的位置和人臉特徵)載入到記憶體。
- 前端通過h5頁面的getUserMedia方法呼叫攝像頭獲取視訊流。
- 通過canvas抓取一幀視訊轉化為圖片(base64),使用http或websocket傳送到後臺。
- 後臺接受base64引數並轉化為圖片儲存。
- 呼叫face_recognition.locations和face_recognition.face_encodings進行圖片建模。
- 呼叫face_recognition.compare_faces將圖片建模結果與基礎庫結果比對。
- 根據定義的比對閾值(被稱為容忍度,一般為0.6)返回比對結果,如果閾值小於該值,判斷是該使用者,認定允許登入,返回系統介面。否則返回人臉識別失敗的資訊。
功能模組圖:
功能時序圖:
效率:
經測試,最終實現可以底庫資料為10人時,1s左右實現刷臉登入,識別效果也能接受,在側臉,半臉(鼻子到額頭)測試結果可以通過。
實際應用可行性
在視覺化專案中人臉識別結合傳統的賬號密碼登入,可提升系統安全性和更好的使用者體驗。
限制:
瀏覽器呼叫攝像頭只有在https協議、127.0.0.1、localhost下有許可權,實際專案需要支援https。
相容性
Desktop
Mobile
注意:
本文只介紹了簡單實現,系統安全性沒有過多考慮,比如在這個簡單系統中,前端的資料獲取流程,非註冊使用者使用註冊使用者的照片也能騙過系統,在照片資料傳輸的過程中,也會有資料洩露的風險。後面將會針對這些情況進行一系列的優化。
程式碼
https://github.com/James-Nie/...
說明
安裝 face-recognition
首先說明,我的系統是win10,python版本是python3.7,需要事先下載一下3個包並安裝:
1、vs c++ 2015,必須是2015,不要問為什麼
可以用這個連結:https://www.microsoft.com/zh-...
也可以用社群版
2、Boost C++ Libraries,可以用這個連結:
https://dl.bintray.com/boosto...
選擇boost_1_66_0-msvc-14.0-64.exe,安裝到C盤即可
3、cmake
可以用這個連結:https://cmake.org/download/
選擇cmake-3.15.0-rc4-win64-x64.msi
注意!!!cmake在安裝過程中切記選擇新增路徑到環境變數中。
4、當上面3個都安裝好之後,可以直接在命令視窗安裝pip install face-recognition即可,在這過程中會自動安裝好dlib,當然也可以先安裝dlib,這就看各位心情了。