Python-Dlib人脸识别

Python-Dlib人脸识别

  前言:基于dlib实现人脸识别功能。Anaconda是基于Windows和Linux -X86系统,Miniforge是基于ARM

一、环境

  windows/linux+python(Anaconda/Miniforge)+cmake+dlib

二、安装过程

  1、windows

  1)基于Anaconda安装Python

  2)python导入dlib模块

  2、Linux

  1)基于Miniforge安装Pytho  

  2)python导入dlib/numpy模块

三、代码 

  1 # -*- coding: utf-8 -*-
  2 # @Time : 2020/9/10 10:16
  3 # @Author : ZhaoYang
  4 # @FileName: face_demo.py
  5 # @Email : zhaoyang@ifreegroup.com
  6 # @Software: PyCharm
  7 
  8 """
  9 从图片中获取人脸并进行人脸识别检测
 10 """
 11 
 12 import glob                # 文件操作模块
 13 import os                # 操作系统功能接口函数
 14 import dlib                # 人脸识别库
 15 import numpy as np        # 数据处理库
 16 
 17 
 18 # 声明descriptors,用于存放已知图片对应的人脸特征向量
 19 descriptors = []
 20 
 21 # 声明names,用于存放于人脸特征向量对应的名字。
 22 names = ["HuGe", "SongJia", "StefanieSun", "ZhaoYang"]
 23 
 24 # 正向人脸检测器将图像
 25 detector = dlib.get_frontal_face_detector()
 26 
 27 # Dlib 人脸特征点识别模型
 28 predictor = dlib.shape_predictor(r"G:\face_test\shape_predictor_68_face_landmarks.dat")
 29 
 30 # Dlib 人脸识别模型
 31 face_rec = dlib.face_recognition_model_v1(r"G:\face_test\dlib_face_recognition_resnet_model_v1.dat")
 32 
 33 
 34 # 遍历image_file_path目录下所有.jpg文件
 35 def logging_data(image_file_data_path: str):
 36     for image in glob.glob(os.path.join(image_file_data_path, "*.jpg")):
 37         img = dlib.load_rgb_image(image)
 38         # 1.人脸检测
 39         dets = detector(img, 1)
 40 
 41         for k, d in enumerate(dets):
 42             # 2.关键点检测
 43             shape = predictor(img, d)
 44             # 3.计算特征值向量(人脸描述符)
 45             descriptor = face_rec.compute_face_descriptor(img, shape)
 46             # 转换numpy数组
 47             v = np.array(descriptor)
 48             descriptors.append(v)
 49 
 50 
 51 # 单张人脸识别检测(图片路径)
 52 def face_alone(file_path: str):
 53     print("单张人脸识别检测================================================================================================")
 54     face_name = face_common(file_path)
 55     print(face_name)
 56     return face_name
 57 
 58 
 59 # 图片集人脸识别检测(图片集路径)
 60 def face_all(image_file_path):
 61     print("图片集人脸识别检测==============================================================================================")
 62     face_list = []
 63     for f in glob.glob(os.path.join(image_file_path, "*.jpg")):
 64         face_name = face_common(f)
 65         face_list.append(face_name)
 66     print(face_list)
 67     return face_list
 68 
 69 
 70 # 公共人脸识别检测接口
 71 def face_common(file_path: str):
 72     img = dlib.load_rgb_image(file_path)
 73     # 使用 detector 检测器来检测图像中的人脸
 74     dets = detector(img, 1)
 75     for k, d in enumerate(dets):
 76         # 获取人脸特征点
 77         shape = predictor(img, d)
 78         # 计算特征值向量
 79         face_descriptor = face_rec.compute_face_descriptor(img, shape)
 80         # 将当前待判断的图片特征向量转化为 current
 81         current = np.array(face_descriptor)
 82         # 计算欧式距离,识别人脸
 83         # 设置阈值
 84         tolerance = 0.4
 85         # 设置该图片名字初值为:Unknow
 86         current_name = "Unknow name"
 87         # 遍历已存放的图片特征值descriptor[]
 88         for i in range(len(descriptors)):
 89             # 计算欧式距离
 90             distance = np.linalg.norm(descriptors[i] - current)
 91             # 对欧式距离进行判断
 92             if distance < tolerance:
 93                 current_name = names[i]
 94                 return current_name
 95                 break
 96 
 97 
 98 # 测试
 99 logging_data(r"G:\face_test\04-test")
100 face_alone(r"G:\face_test\05-test\3.jpg")
101 face_all(r"G:\face_test\05-test")
View Code

 四、下载地址

  注意:模块版本与Python版本的差异

  1、dlib 

  链接:https://pan.baidu.com/s/16yE56YgakaA2QuNeVPg1TA
  提取码:2cuy

  官网:http://dlib.net/files/

  2、numpy  

  链接:https://pan.baidu.com/s/1kYoCP_vP-5DeNB3T_ynjpw
  提取码:zekd

  官网:https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

  3、cmake

  链接:https://pan.baidu.com/s/1P9Ic8byYhHOs1hkYtvNocQ
  提取码:l26v

  官网:

  4、人脸特征点识别模型 

  链接:https://pan.baidu.com/s/1G5CZBuumTfkftCmuKyj-GQ
  提取码:kaiu

  5、人脸识别模型

  链接:https://pan.baidu.com/s/1ol6qqDL1FIUXa1z_ruTwZg
  提取码:9xbe

五、参考连接

posted @ 2020-09-10 15:32  趙楊  阅读(506)  评论(0编辑  收藏  举报