前端如何玩轉人臉識別

背景
人臉識別技術在當下已經十分紅熟,但主要在移動端和專有設備應用上較爲普及,而在Web端並很少見,本着學習的目的從零實現web端的人臉登陸功能。前端

視頻流:使用navigator.getUserMedia方法在瀏覽器中獲取視頻流+音頻流(經過攝像頭麥克風),未來能夠用於獲取任意數據流,好比光盤和傳感器。python

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

整體流程:git

  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.pnggithub

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

效率:算法

經測試,最終實現能夠底庫數據爲10人時,1s左右實現刷臉登陸,識別效果也能接受,在側臉,半臉(鼻子到額頭)測試結果能夠經過。canvas

實際應用可行性瀏覽器

在可視化項目中人臉識別結合傳統的帳號密碼登陸,可提高系統安全性和更好的用戶體驗。安全

限制

瀏覽器調用攝像頭只有在https協議、127.0.0.一、localhost下有權限,實際項目須要支持https。

兼容性

Desktop
111.png

Mobile

222.png
注意:

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

代碼
https://github.com/James-Nie/...

說明

安裝 face-recognition

首先說明,個人系統是win10,python版本是python3.7,須要事先下載一下3個包並安裝:

一、vs c++ 2015,必須是2015,不要問爲何

能夠用這個連接:https://www.microsoft.com/zh-...

也能夠用社區版

二、Boost C++ Libraries,能夠用這個連接:

https://dl.bintray.com/boosto...

選擇boost_1_66_0-msvc-14.0-64.exe,安裝到C盤便可

三、cmake

能夠用這個連接:https://cmake.org/download/

選擇cmake-3.15.0-rc4-win64-x64.msi

注意!!!cmake在安裝過程當中切記選擇添加路徑到環境變量中。

四、當上面3個都安裝好以後,能夠直接在命令窗口安裝pip install face-recognition便可,在這過程當中會自動安裝好dlib,固然也能夠先安裝dlib,這就看各位心情了。

相關文章
相關標籤/搜索