CentOS下-Python-人脸识别-DLib的使用(二)

简介: 在上一章节已经将Dlib环境的安装进行了阐述, 环境准备好了, 接下来我们就可以直接进入人脸识别的领域了

CentOS下-Python-人脸识别-DLib的使用

1. 人脸识别的流程原理

#  人脸识别的原理
本质上是获取人脸图像的特征点位(向量), 将多张图像直接的特征点位进行欧式距离计算, 设定阈值范围, 小于这个范围认同是一个人,否则不是 


# Dlib 人脸识别的思路梳理:
    1. 准备人脸识别的训练数据和特征检测数据
    2. 分别获取已有图片和被检测图片的人脸特征向量
    3. 计算它们之间的欧式距离
    4. 判断阈值
    
    准备已有图片 和 被检测图片的素材

1.准备工作

需要提前准备人脸5特征点检测器数据和 人脸识别模型数据, 具体数据见底部链接

shape_predictor_5_face_landmarks.dat
shape_predictor_68_face_landmarks.dat
dlib_face_recognition_resnet_model_v1.dat

2. 识别类创建

import os
import cv2
import numpy
import dlib


class FaceRecogination(object):
    def __init__(self):
        # 1. 创建 Dlib 的正向人脸检测器
        self.detector = dlib.get_frontal_face_detector()

        # 2. 创建 Dlib 的人脸5特征点检测器
        self.predictor = dlib.shape_predictor("api/utils/data_dlib/shape_predictor_5_face_landmarks.dat")

        # 3. 导入 Dlib 预先学习的人脸识别模型
        self.face_rec = dlib.face_recognition_model_v1("api/utils/data_dlib/dlib_face_recognition_resnet_model_v1.dat")

    # 根据 参数(图片路径) 返回单张人脸图像的128D特征
    def get_face_128d_features(self, image_path):
        """
        根据上传的图片 识别单张人脸 的 128D特征
        :param image_path:  图片路径
        :return:  "-0.0123421 0.087358 ... 0.087349 0.045566"
        """

        # 1.采用 opencv 读取图片中的数据
        img_read = cv2.imdecode(numpy.fromfile(image_path, dtype=numpy.uint8), -1)

        # 2.由于 opencv 读取图片色值默认为 bgr 顺序,这里采用 opencv 的 cvtColor 把图片改为rgb顺序图
        img_gray = cv2.cvtColor(img_read, cv2.COLOR_BGR2RGB)

        # 3.采用 Dlib 的正向人脸检测器 预先检测人脸情况并存入 faces 列表
        faces_list = self.detector(img_gray, 1)

        # 4. 根据 faces_list的长度判断 是否是人脸, 是1个, 还是多个
        if len(faces_list) == 0:
            # 检测不到人脸 删除图片
            os.remove(image_path)
            return 0

        if len(faces_list) > 1:
            # 检测人脸数大于2 删除图片
            os.remove(image_path)
            return 1

        if len(faces_list) == 1:
            # 如果人脸数为 1
            # 5. 采用 Dlib 的人脸5特征点检测器
            shape = self.predictor(img_gray, faces_list[0])

            # 6.生成单张人脸图像的128D特征
            face_128d_f = self.face_rec.compute_face_descriptor(img_gray, shape)

            return face_128d_f

3. 计算 特征点位之间的欧式距离

    def compare_euclidean_distance(self, save_photo_features, not_detected_features):
        """
        计算欧式距离
        :param save_photo_features:  已有图片的特征向量
        :param not_detected_features:  未检测的图片特征向量
        :return: bool  True 通过, False 未通过
        """
        distance = np.linalg.norm(save_photo_features-not_detected_features)
        standard = 0.6  # 阈值范围在LFW数据集的设置是0.6 精准度99.38%, 建议亚洲设定低一些
        return distance <= standard

4. 测试

4.1 准备测试图片

tou.jpg

4.2 分别计算3张图片的特征向量--再把后2张的特征向量和第一张计算欧氏距离

    face_rec_obj = FaceRecogination()
    tou_128D = face_rec_obj.get_face_128d_features('./tou.jpg')
    print(list(tou_128D))

    tou2_128D = face_rec_obj.get_face_128d_features('./tou2.jpg')
    print(list(tou2_128D))

    tou3_128D = face_rec_obj.get_face_128d_features('./tou3.jpg')
    print(list(tou3_128D))

    print(face_rec_obj.compare_euclidean_distance(np.array(list(tou_128D)), np.array(list(tou2_128D))))
    # True 识别通过
    
    print(face_rec_obj.compare_euclidean_distance(np.array(list(tou_128D)), np.array(list(tou3_128D))))
    # False 识别不通过
数据下载地址

链接:https://pan.baidu.com/s/1a1fWBLpFMkMtceiqP-_u6Q?pwd=btg4
提取码:btg4

相关文章
|
4月前
|
Linux 网络安全 Python
linux centos上安装python3.11.x详细完整教程
这篇文章提供了在CentOS系统上安装Python 3.11.x版本的详细步骤,包括下载、解压、安装依赖、编译配置、解决常见错误以及版本验证。
1815 1
linux centos上安装python3.11.x详细完整教程
|
3月前
|
机器学习/深度学习 API 计算机视觉
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
48 2
|
3月前
|
机器学习/深度学习 存储 算法
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
62 1
|
5月前
|
Linux 开发工具 C语言
centos7编译安装python3
centos7编译安装python3
|
4月前
|
Linux Python
Linux之centos安装clinkhouse以及python如何连接
Linux之centos安装clinkhouse以及python如何连接
|
6月前
|
网络协议 Linux Python
Python脚本配置Centos静态ip地址
这是一个Python脚本,用于自动化配置CentOS系统的静态IP地址。脚本创建或修改文件,填写接口名(如ens33)、IP地址、子网掩码、网关和DNS。运行时需替换变量值并使用`sudo`以管理员权限执行。完成配置后,它会重启网络服务。注意,用户应根据实际网络环境调整参数。
163 4
Python脚本配置Centos静态ip地址
|
5月前
|
机器学习/深度学习 人工智能 监控
利用Python和OpenCV实现实时人脸识别系统
【8月更文挑战第31天】本文将引导您了解如何使用Python结合OpenCV库构建一个简易的实时人脸识别系统。通过分步讲解和示例代码,我们将探索如何从摄像头捕获视频流、进行人脸检测以及识别特定个体。本教程旨在为初学者提供一条明晰的学习路径,帮助他们快速入门并实践人脸识别技术。
|
5月前
|
Linux Python
Centos7安装Python虚拟环境之virtualenv
Centos7安装Python虚拟环境之virtualenv
|
6月前
|
机器学习/深度学习 监控 算法框架/工具
使用Python实现深度学习模型:人脸识别与人脸表情分析
【7月更文挑战第18天】 使用Python实现深度学习模型:人脸识别与人脸表情分析
264 2
|
6月前
|
机器学习/深度学习 数据采集 算法
Python实现PCA降维和KNN人脸识别模型(PCA和KNeighborsClassifier算法)项目实战
Python实现PCA降维和KNN人脸识别模型(PCA和KNeighborsClassifier算法)项目实战