前端如何玩转人脸识别

背景
人脸识别技术在当下已经十分红熟,但主要在移动端和专有设备应用上较为普及,而在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,这就看各位心情了。

相关文章
相关标签/搜索