1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 人脸识别:01)快速搭建一个人脸门禁打卡系统 支持戴口罩识别

人脸识别:01)快速搭建一个人脸门禁打卡系统 支持戴口罩识别

时间:2021-05-27 12:20:04

相关推荐

人脸识别:01)快速搭建一个人脸门禁打卡系统 支持戴口罩识别

前言

本系统基于SSD模型dlib库,SSD模型用于人脸检测,dlib用于人脸识别。为了便于在CPU服务器上运行,都用了最小的模型,所有权重文件共34MB。 git地址:/JavisPeng/FaceRecognitionWithMask

人脸检测

人脸检测:找到图片中人脸的位置,并用方框标出

dlib已经提供了完整的人脸识别API,但dlib提供的2个人脸检测模型存在如下2个问题

get_frontal_face_detector

get_frontal_face_detector基于机器学习,速度快但是准确度不高,有时离摄像头较远或戴口罩,会检测不到人脸

detector = dlib.get_frontal_face_detector()

cnn_face_detection_model_v1

get_frontal_face_detector基于cnn网络,准确度高,但无GPU运行速度实在太慢

detector = n_face_detection_model_v1('mmod_human_face_detector.dat')

为了兼顾准确度和速度,本文使用了SSD模型(mini版,仅3.9MB)进行人脸检测。

人脸检测

人脸识别:对给定的人脸和目标人脸数据库进行对比,找到该人脸

dlib使用landmark(人的五官关键点)和resnet网络提前人脸的特征(128维向量),从face_recognition_demo使用landmark对齐人脸并重采样,而resnet网络则用于提取人脸特征。

sp = dlib.shape_predictor('shape_predictor_5_face_landmarks.dat')

目标库构建

经测试,若只采用不戴口罩的图片作为目标库,对戴口罩的人脸虽可以检测,但准确度较低,因此我们把不戴口罩和戴裤子的人员图片都纳入到了目标库中(截图时加了马赛克)

所有目标图片只需放到一个文件夹下,然后调用create_known_faces即可构建目标库人脸特征。

@app.post("/update")def update():face_rec.create_known_faces('data/mask_nomask')return {"result": 'ok'}

性能测试

测试环境:

win10 Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz,3408 Mhz 16G内存

由于项目需要,只识别视频中最靠近摄像头的人脸

目标库10张,对1张640x480的图片进行100次识别,耗时39.96秒(2.5fps?)

目标库1280张,对1张640x480的图片进行100次识别,耗时89秒(1.2fps?)

本文还搭建了一个fastapi服务器,服务器返回参数依次是【用户名称,box的坐标,是否戴了口罩】

有待改进之处

1.对较大目标库,线性人脸相似度比较耗时,可以考虑使用ElasticSearch搭建一个数据库

2.模型部署可使用TVM或Openvino等自带优化的工具进行部署

参考:

ssd训练:/sgrvinod/a-PyTorch-Tutorial-to-Object-Detection

人脸数据库:/AIZOOTech/FaceMaskDetection

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。