• 使用dilb实现人脸检测、识别


    使用dlib实现人脸检测与识别需要先下载以下两个文件:

     以下是检测代码:

    import dlib
    import numpy as np
    import cv2
    detector = dlib.get_frontal_face_detector()  # 加载正脸检测器,使用dlib
    sp = dlib.shape_predictor("dlibModel/shape_predictor_68_face_landmarks.dat")  # 加载人脸关键点检测模型
    facerec = dlib.face_recognition_model_v1("dlibModel/dlib_face_recognition_resnet_model_v1.dat")  # 加载人脸识别模型
    images_file =  "11.jpg"
    
    if __name__ == '__main__':
    
        image = cv2.imread(images_file)
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        rects = detector(gray, 1)  # 返回人脸,(灰度图,采样次数)
        tzs = []
        for (i, rect) in enumerate(rects):
            shape68 = sp(image, rect)  # 返回68个特征点
            face_descriptor = facerec.compute_face_descriptor(image, shape68)  # 计算人脸的128维的向量
            tz = np.array(face_descriptor)  # 人脸特征值
            tzs.append(tz)
            for p in shape68.parts():
                cv2.circle(image, (p.x, p.y), 2, (0, 0, 255), 1)
            cv2.rectangle(image, (rect.left(), rect.top()), (rect.right(), rect.bottom()), (0, 255, 0), 2)
        print(tzs)
    cv2.imshow("Output", image)
    cv2.waitKey(-1)

    原图

    效果图

     打印的特征值:

    [array([-0.14579333,  0.06563152,  0.09314926, -0.17351562, -0.08750948,
           -0.03944254, -0.05778341, -0.16003576,  0.18947695, -0.20229495,
            0.22666875, -0.09615702, -0.15724032, -0.00979816, -0.02177811,
            0.23944741, -0.21378906, -0.12338841, -0.04015261,  0.00419115,
            0.07516268,  0.08075333,  0.01858632,  0.07583004, -0.1436058 ,
           -0.33890599, -0.10919157, -0.05613485, -0.01440384, -0.0421476 ,
           -0.02769968,  0.02456936, -0.19791584, -0.02495837, -0.01396229,
            0.15883508, -0.05608664, -0.16127518,  0.14932884, -0.0153573 ,
           -0.27676189,  0.08176911,  0.04226109,  0.19125782,  0.18729328,
           -0.03498868,  0.0062949 , -0.20621458,  0.1477259 , -0.20221941,
           -0.01363696,  0.06110315, -0.06132922,  0.05342007,  0.01454075,
           -0.15085547,  0.06046266,  0.14739415, -0.21987613, -0.03639037,
            0.08528309, -0.04437468,  0.03675304, -0.10165367,  0.14875233,
            0.156369  , -0.08553442, -0.22346984,  0.11466061, -0.14528711,
           -0.05263588,  0.10216871, -0.15159039, -0.19255549, -0.29263291,
           -0.04936468,  0.33185786,  0.09766599, -0.13290709,  0.03094622,
           -0.01321913, -0.01007816,  0.14334042,  0.12662645,  0.04984599,
            0.00495763, -0.08788066,  0.05117153,  0.25504613, -0.03899687,
           -0.01541797,  0.24360959, -0.00281113,  0.03764223,  0.02046303,
            0.08831443, -0.15270098,  0.07429178, -0.16997421, -0.00883572,
            0.01246334,  0.02862958, -0.01707144,  0.16006561, -0.15909354,
            0.23000078, -0.02357504, -0.0060425 , -0.02578063, -0.03944276,
           -0.05486409,  0.01571657,  0.15119481, -0.14951093,  0.16744466,
            0.17089023,  0.05214873,  0.14098236,  0.10236948,  0.05116107,
           -0.08004355,  0.01013784, -0.29215148,  0.0257933 ,  0.08701295,
           -0.02425266,  0.13502946,  0.02853448])]

    进行识别时,将已有特征值与检测出的特征值两者之间计算欧式距离,设定阈值,大于阈值的不是同一人,小于阈值的为同一人

    dist_ = numpy.linalg.norm(i - d_test)

    numpy提供了linalg.norm方法来计算欧式距离,通常阈值设定在0.35即可

  • 相关阅读:
    WIN10系统如何取消右下角的通知菜单,通知图标
    1.1.6版本Druid连接MSSQLServer 2008 R2报错The query timeout value -1 is not valid. #2210
    第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建
    CentOS 7 Tomcat服务的安装与配置
    centos7中使用yum安装tomcat以及它的启动、停止、重启
    centos7更改为启动桌面或命令行模式
    gradle新建工程,多项目依赖,聚合工程
    Gradle构建多模块项目(转)
    3分钟搞定SpringBoot+Mybatis+druid多数据源和分布式事务
    Spring MVC+Mybatis 多数据源配置
  • 原文地址:https://www.cnblogs.com/answerThe/p/11540521.html
Copyright © 2020-2023  润新知