前端如何玩轉人臉識別

_AN_發表於2020-07-16

背景
人臉識別技術在當下已經十分成熟,但主要在移動端和專有裝置應用上較為普及,而在Web端並不多見,本著學習的目的從零實現web端的人臉登入功能。

視訊流:使用navigator.getUserMedia方法在瀏覽器中獲取視訊流+音訊流(通過攝像頭麥克風),將來可以用於獲取任意資料流,比如光碟和感測器。

face_recognition:被稱為世界上最簡單的人臉識別庫(使用確實超簡單)。你可以通過Python引用或者命令列的形式使用它,來管理和識別人臉。該軟體包使用dlib中最先進的人臉識別深度學習演算法,使得識別準確率在《Labled Faces in the world》測試基準下達到了99.38%。它同時提供了一個叫face_recognition的命令列工具,以便你可以用命令列對一個資料夾中的圖片進行識別操作。

總體流程:

  1. 啟動web服務,使用face_recognition將基礎庫圖片進行建模,將建模結果(識別到的人臉在圖片中的位置和人臉特徵)載入到記憶體。
  2. 前端通過h5頁面的getUserMedia方法呼叫攝像頭獲取視訊流。
  3. 通過canvas抓取一幀視訊轉化為圖片(base64),使用http或websocket傳送到後臺。
  4. 後臺接受base64引數並轉化為圖片儲存。
  5. 呼叫face_recognition.locations和face_recognition.face_encodings進行圖片建模。
  6. 呼叫face_recognition.compare_faces將圖片建模結果與基礎庫結果比對。
  7. 根據定義的比對閾值(被稱為容忍度,一般為0.6)返回比對結果,如果閾值小於該值,判斷是該使用者,認定允許登入,返回系統介面。否則返回人臉識別失敗的資訊。

功能模組圖:
Snipaste_2020-07-16_11-34-50.png

功能時序圖:
Snipaste_2020-07-16_11-36-09.png

效率:

經測試,最終實現可以底庫資料為10人時,1s左右實現刷臉登入,識別效果也能接受,在側臉,半臉(鼻子到額頭)測試結果可以通過。

實際應用可行性

在視覺化專案中人臉識別結合傳統的賬號密碼登入,可提升系統安全性和更好的使用者體驗。

限制

瀏覽器呼叫攝像頭只有在https協議、127.0.0.1、localhost下有許可權,實際專案需要支援https。

相容性

Desktop
111.png

Mobile

222.png
注意:

本文只介紹了簡單實現,系統安全性沒有過多考慮,比如在這個簡單系統中,前端的資料獲取流程,非註冊使用者使用註冊使用者的照片也能騙過系統,在照片資料傳輸的過程中,也會有資料洩露的風險。後面將會針對這些情況進行一系列的優化。

程式碼
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,這就看各位心情了。

相關文章