基于OpenCv的人脸识别系统设计与实现
1.1 题目的主要研究内容(宋体四号加粗左对齐)
(1)工作的主要描述:本文设计了基于 OpenCV 库的人脸识别系统,采用Haar人脸特征,详细描述了人脸识别设计实现的方式,并设计所对应阶段的逻辑框架,最后结合逻辑框架运用 Python 语言编写并验证本文设计的人脸识别系统。通过多次训练验证并实现人脸识别及判别功能。
(2)系统流程图:
家乡网页制作模板1.2 题目研究的工作基础或实验条件
(1)硬件环境
    笔记本电脑,处理器:R7 5800H
(2)软件环境
bootstrap响应式布局模板    开发语言:Python
    开发工具:PyCharm2021
1.3 数据集描述
一个程序能识别给定图像或视频中的人脸。实现这一目标的方法之一是用一系列分类好的图像来“训练”数据,并基于这些图像来进行识别。
获取数据:可以通过网上搜索图片或者自己录入(我们选择的是从网上下载某些人的图片来训练数据)
有了数据,需要将这些样本图像加载到人脸识别算法中。所有的人脸识别算法在它们的trai
n()函数中都有两个参数:图像数组和标签数组。这些标签表示进行识别时候某人人脸的ID,因此根据ID可以知道被识别的人是谁。要做的这一点需要生成一个.yml文件。
1.4 人脸特征提取过程描述
特征提取是人脸识别的关键问题之一。本设计中主要采用的是Harr特征提取方法。摄影作品可能包含很多令人愉悦的细节。但是,由于灯光、视角、视距、摄像头抖动以及数字噪声的变化,图像细节变得不稳定。人们在分类时不会受这些物理细节方面差异的影响。提取出图像的细节对产生稳定分类结果和跟踪结果很有用处。这些提取的结果被称为特征,专业的表述为:从图像数据中提取特征。Haar特征是一种用于实现实时人脸跟踪的特征。每一个Haar特征都描述了相邻图像区域的对比模式。python基础代码大全下载
1.5 人脸识别过程描述
人脸识别采用的是LBPH算法,LBPH(Local Binary Pattern Histogram)将检测到的人脸分为小单元,并将其与模型中的对应单元进行比较,对每个区域的匹配值产生一个直方图。由于这种方法的灵活性,LBPH是唯一允许模型样本人脸和检测到的人脸形状、大小上可以
不同的人脸识别算法调整后的区域中调用predit()函数,该函数返回两个元素的数组:第一个元素是所识别个体的标签,第二个是置信度评分。0表示完全匹配。LBPH一个好的识别参考值要低于50,任何高于80的参考值都会被认为是低的置信度评分。
1.6 主要程序代码(要求必须有注释)
(代码使用Times New Roman,五号
训练数据部分代码:
import os
import cv2 as cv
十大高级编程语言
import sys
import numpy as np
from PIL import Image
def getImageAndLabels(path):
    #储存人脸数据
    facesSamples=[]
    #储存姓名数据
    ids=[]
    #储存图片信息
    imagePaths=[os.path.join(path,f) for f in os.listdir(path)]
    #检测人脸
    face_detector = cv.CascadeClassifier(
        'D:/Browser download/opencv/sources/data/haarcascades/haarcascade_l')
    #faces = face_detector.detectMultiScale(gray)
    #遍历列表中的图片
    for imagePath in imagePaths:
        #打开图片,灰度化PIL有九种不同的模式:1,L,P,RGB,RGBA,CMYK,YCbCr,I,F
        PIL_img=Image.open(imagePath).convert('L')
        #将图像转换为数组,以黑白深浅(为的是让计算机看懂)
        img_numpy=np.array(PIL_img,'uint8')
        #获取图片中的人脸特征
        faces = face_detector.detectMultiScale(img_numpy)
        #获取每张图片的id和姓名
        #print(os.path.split(imagePath))
大唐之神级败家子
        id=int(os.path.split(imagePath)[1].split('.')[0])
        #预防无面容照片
        for x,y,w,h in faces:
            facesSamples.append(img_numpy[y:y+h,x:x+w])
            ids.append(id)
    #打印脸部特征和id
    print('id:',id)
    print('fs:',facesSamples)
    return facesSamples,ids
    #print(imagePaths)
    return facesSamples,ids
if __name__ == '__main__':
    #图片路径
    path='./data/jm/'
    #获取图像数组和id标签数组
    faces,ids=getImageAndLabels(path)
    #加载识别器
    recongnizer=cv.face.LBPHFaceRecognizer_create()
    #训练
    ain(faces,np.array(ids))
    #保存文件
recongnizer.write('l')
人脸识别部分代码:
import cv2
import cv2 as cv
import numpy as np
import os
#加载训练数据集文件
recognizer=cv.face.LBPHFaceRecognizer_create()
ad('l')
#准备识别的图片
img=cv.imread('xiaolizi3.jpeg')
gray=cv.cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
face_detector = cv.CascadeClassifier(
        'D:/Browser download/opencv/sources/data/haarcascades/haarcascade_l')
faces = face_detector.detectMultiScale(gray)
for x,y,w,h in faces:
    cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2)
    cv.circle(img, center=(x + w // 2, y + h // 2), radius=w // 2, color=(0, 0, 255), thickness=2)
    id,confidence=recognizer.predict(gray[y:y+h,x:x+w])
    print('标签id:',id,'置信评分:',confidence)
a = id  #类别名称
b = confidence  #置信度
font = cv.FONT_HERSHEY_SIMPLEX  # 定义字体
img = cv2.putText(img, '{} {:.3f}'.format(a,b), (x, y), font, 0.75, (0, 255, 255), 2)
                # 图像,文字内容,坐标(右上角坐标) ,字体,大小,颜,字体厚度
cv.imshow('result',img)
spring boot教程百度网盘cv.waitKey(0)
cv.destroyAllWindows()
1.7 运行结果及总结
(1)运行结果如下:
(2)总结:
本文设计的人脸识别系统采用 Python 语言编写,针对 Windows平台对基于 OpenCV 库中人脸识别的相关技术实现人脸识别的功能。 结果表明,人脸录入功能测试数据效率达到100
%,人脸识别数据检测率为66.7%,误检率控制在1%,每张耗时平均为26.57ms根据参数要求,对设计的系统进行多次调试和分析, 参数达到了所提出的各项指标,达到设计的预期效果,具有灵敏度高、稳定性强等特点。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。