基于dlib库人脸特征提取【构建自己的人脸识别数据集】

一、安装dlib库

ps.这个步骤不能pip直接安装,需要先下载boosting和cmake搭建环境,再解压安装获得dlib库文件,最后复制关键文件到python安装目录下!
需要下载的文件:在这里插入图片描述
具体安装教程:python3.7添加dlib模块——需要耐心安装

注意:
b2 -a –with-python address-model=64 toolset=msvc runtime-link=static
这一句运行时需要删去-with
b2 -a -python address-model=64 toolset=msvc runtime-link=static

其他步骤根据教程安装即可!

二、基于dlib库人脸特征提取

基于dlib库对人脸特征进行提取,在视频流中抓取人脸特征、并保存为64x64大小的图片文件。
注意的是:因为我们后面会对人脸数据集进行训练识别,因此,这一步非常重要。

  • 光线——曝光和黑暗图片因手动剔除
  • 摄像头的清晰度也比较重要——在哪台笔记本识别,就要在那台笔记本做数据集采集,我用了同学在其他笔记本采取的数据,因为电脑配置,在后面的训练中出现不能识别或错误识别的情况,因此,尽量同一设备——采取数据集和做人脸识别
  • 我们采用的是视频流截图,也可以用爬虫在百度图片上进行爬取
    可以参考我之前的文章:Python网络爬虫(六)关键词搜索百度图片并保存到本地

源码:

import cv2
import dlib
import os
import sys
import random
# 存储位置
output_dir = 'D:/myworkspace/JupyterNotebook/People/person/person1'
size = 64
 
if not os.path.exists(output_dir):
    os.makedirs(output_dir)
# 改变图片的亮度与对比度
 
def relight(img, light=1, bias=0):
    w = img.shape[1]
    h = img.shape[0]
    #image = []
    for i in range(0,w):
        for j in range(0,h):
            for c in range(3):
                tmp = int(img[j,i,c]*light + bias)
                if tmp > 255:
                    tmp = 255
                elif tmp < 0:
                    tmp = 0
                img[j,i,c] = tmp
    return img
 
#使用dlib自带的frontal_face_detector作为我们的特征提取器
detector = dlib.get_frontal_face_detector()
# 打开摄像头 参数为输入流,可以为摄像头或视频文件
camera = cv2.VideoCapture(0)
#camera = cv2.VideoCapture('C:/Users/CUNGU/Videos/Captures/wang.mp4')

index = 1
while True:
    if (index <= 15):#存储15张人脸特征图像
        print('Being processed picture %s' % index)
        # 从摄像头读取照片
        success, img = camera.read()
        # 转为灰度图片
        gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # 使用detector进行人脸检测
        dets = detector(gray_img, 1)
 
        for i, d in enumerate(dets):
            x1 = d.top() if d.top() > 0 else 0
            y1 = d.bottom() if d.bottom() > 0 else 0
            x2 = d.left() if d.left() > 0 else 0
            y2 = d.right() if d.right() > 0 else 0
 
            face = img[x1:y1,x2:y2]
            # 调整图片的对比度与亮度, 对比度与亮度值都取随机数,这样能增加样本的多样性
            face = relight(face, random.uniform(0.5, 1.5), random.randint(-50, 50))
 
            face = cv2.resize(face, (size,size))
 
            cv2.imshow('image', face)
 
            cv2.imwrite(output_dir+'/'+str(index)+'.jpg', face)
 
            index += 1
        key = cv2.waitKey(30) & 0xff
        if key == 27:
            break
    else:
        print('Finished!')
        # 释放摄像头 release camera
        camera.release()
        # 删除建立的窗口 delete all the windows
        cv2.destroyAllWindows()
        break
  • python3.7+anaconda3+JupyterNotebook运行效果:
    在这里插入图片描述在这里插入图片描述
### 回答1: 人脸识别注册是一个常见的应用程序,其主要目的是识别人脸并将其注册到数据中。在这一过程中,可以使用knn算法来实现。KNN是一种监督学习算法,它基于样本之间的相似度进行分类。 在人脸识别注册中,我们首先需要收集一些人脸图像样本,并为每个人分配一个唯一的ID。接下来,我们将会将这些人脸图像与其他未知图像进行比较,以确定它们是否属于特定的个人。 第一步是提取人脸图像中的特征向量。这可以通过使用OpenCV中的人脸识别来实现。特征向量通常是人脸图像的重要特征,例如脸部的尺寸、颜色、形状和纹理。 接下来,我们需要对数据进行归一化处理,以避免特征的尺度不同。这可以通过正则化或标准化来实现。 然后,可以使用KNN算法对特征向量进行分类。KNN算法通过比较未知图像的特征向量与已知图像的特征向量来确定该未知图像属于哪个人。KNN算法基于最近邻规则来分类。它根据在训练集中找到的K个最相似的训练数据来决定未知数据的类别。在计算相似度时,可以使用欧几里得距离或曼哈顿距离等距离度量方法。 最后,我们将新的人脸图像数据存储到数据中,以便下次进行比对。当新的人脸图像被注册时,可以重新训练KNN模型以反映这些新的数据点。 因此,使用KNN算法来实现人脸识别注册可以帮助我们快速准确地识别人脸,并将其添加到数据中。 ### 回答2: 人脸识别是一种广泛应用的人工智能技术,越来越多的领域使用了该技术,例如安防监控、身份验证、支付等。其中,人脸识别的核心任务是对输入的图像进行分析和识别,最终确定图像中的人物身份,这与机器学习中的分类问题类似。 为了实现人脸识别的分类任务,需要使用一种分类算法,而k近邻(K-Nearest Neighbor,KNN)算法是机器学习中的一种常见分类算法。在人脸识别中,KNN算法可以用于模型的训练和预测。 在实现这个算法时,我们需要对数据进行预处理,包括数据集构建特征提取。对于人脸数据集来说,可以使用一些常见的,例如OpenCVDlib,来提供人脸检测、识别等功能,得到人脸的比较准确的坐标和关键点。 得到人脸数据后,我们需要对其进行特征提取,例如人脸图像的灰度化、归一化、直方图均衡化等。这些特征提取方法可以使不同的人脸数据进行比较,并得到它们之间的相似度。 接着,我们需要将这些数据划分为训练集和测试集。KNN算法需要使用训练集中的每个样本与测试集中的样本进行比较,并根据它们的相似程度来进行分类。因此,我们可以使用KNN算法对训练样本进行学习,并确定最优的K值。 最后,我们可以使用KNN算法对新的人脸图像进行分类,并确定该人脸属于哪个类别。人脸识别领域还有很多相关的技术和算法,例如PCA、LDA等,这些算法都可以应用于不同的人脸识别场景。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值