python+opencv+dlib+pyqt5人脸识别实践

关于本项目基于python,用到了opencv、dlib等开发包,实现了单张训练样本的人脸识别,有较为友好的UI界面,识别速度经优化后尚可。 实现上思路与这篇博客一致,解决了这篇博客中存在的几个问题:每次识别都需要把每个人的人脸样本的特征向量计算一遍,人脸库小的时候看不出差距,但人脸库很大时就显得非常不方便(实测的时候用的400人的人脸库,提取特征就要耗费1分多钟)。用dli...
摘要由CSDN通过智能技术生成

关于

本项目基于python,用到了opencv、dlib等开发包,实现了单张训练样本的人脸识别,有较为友好的UI界面,识别速度经优化后尚可。

实现上思路与这篇博客一致,解决了这篇博客中存在的几个问题:

  • 每次识别都需要把每个人的人脸样本的特征向量计算一遍,人脸库小的时候看不出差距,但人脸库很大时就显得非常不方便(实测的时候用的400人的人脸库,提取特征就要耗费1分多钟)。
  • 用dlib中的方法进行人脸检测的时候速度很慢。
  • 没有友好的UI界面。

基于以上问题,采取的解决方案如下:

  • 把人脸识别过程分为两阶段:1、提取人脸特征 2、人脸检测+计算欧氏距离;两个阶段分别单独执行,即可加快人脸识别时候的速度。
  • 换人脸检测的方法,用opencv中自带的人脸检测器进行人脸检测。
  • 用pyqt5绘制界面。

准备工作

  • python 3.6.5
  • opencv 3.3.1
  • numpy 1.14.3
  • dlib 19.7.0 (配置方法可见这篇文章
  • pycharm+pyqt5 (配置方法可见这篇文章

工程目录结构

  • E:\
    • candidate_face
      • liuyifei.jpg
      • tangyan.jpg
      • yangmi.jpg
      • yangzi.jpg
      • zhoudongyu.jpg
    • pyproject
      • shape_predictor_68_face_landmarks.dat
      • dlib_face_recognition_resnet_model_v1.dat
      • lbpcascade_frontalface_improved.xml(用于人脸检测,在opencv目录opencv-3.3.1-py36h20b85fd_1\Library\etc\lbpcascades下)
      • FaceRecognition.py
      • main.py
    • test.jpg

人脸识别过程

首先运行FaceRecognition.py,会经历:读取人脸集、人脸检测、提取人脸特征向量、存储人脸特征向量、对单张测试人脸图进行识别、打印识别结果 的过程。
然后运行main.py,会经历:初始化界面、加载各种参数模型、手动选择单张人脸测试图、基于opencv人脸检测器检测人脸、提取该人脸特征向量、计算欧氏距离、找出距离最小的人脸标签、输出人脸识别结果 这么几个过程。

识别结果

这里写图片描述
这里写图片描述

闲话

这个项目目前bug多多,准确率也还有很大提高空间,欢迎各位多多交流,这个项目的更多详情请见这里,如果对你也有所帮助,请轻轻点个star(别太重了,怕疼(⊙o⊙)…)。

源码怎会少

  • FaceRecognition.py
import os,dlib,numpy,cv2

predictor_path = 'shape_predictor_68_face_landmarks.dat'
face_rc_model_path = 'dlib_face_recognition_resnet_model_v1.dat'
face_folder_path = 'E:\candidate_face'
test_img_path = 'E:\\test.jpg'


# 读取人脸集、人脸标签
def read_data(path):
    try:
        pic_name_list = os.listdir(path)
        pic_list = []
        for i in pic_name_list:
            whole_path = os.path.join(path, i)
            img = cv2.imread(whole_path)
            pic_list.append(img)
    except IOError:
        print('read error')
        return False
    else:
        print('read successfully')
        return pic_name_list, pic_list

# 人脸检测器
detector = dlib.get_frontal_face_detector()

# 关键点检测器
feature_point = dlib.shape_predictor(predictor_path)

# 人脸参数模型
feature_model = dlib.face_recognition_model_v1(face_rc_model_path)

# 候选人特征向量列表
descriptors = []

if __name__ == '__main__':
    name_list, pic_list = read_data(face_folder_path)
    num = 1
    for i in pic_list:
        # 人脸检测
        dets = detector(i, 1)

        for k, d in enumerate(dets):
            # 关键点检测
            shape = feature_point(i, d)

            # 提取特征,128维
            face_feature = feature_mode
  • 8
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值