基于opencv的人脸识别

article/2025/10/26 12:40:19

目录

一、OpenCV的简介

1、应用场景

二、人脸识别

1、人脸识别简介

2、人脸识别系统基本组成

三、人脸识别流程

四、主要代码注释

1、人脸采集函数

2、人脸训练函数

3、人脸识别函数(注取消语音播报识别会流畅多)

五、功能实现

六、演示视频

七、资源


 

一、OpenCV的简介

OpenCV是一个跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令。

1、应用场景

人机互动、物体识别、图像分割、人脸识别、动作识别、运动跟踪、机器人等。

二、人脸识别

1、人脸识别简介

人脸识别是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像头或摄像机采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部的一系列相关技术,通常也叫做人像识别,面部识别。

2、人脸识别系统基本组成

三、人脸识别流程

四、主要代码注释

注:环境配置(人脸分类器用的是haarcascade_frontalface_default.xml)

# opencv 的安装
pip install opencv-python
# pillow的安装,注:pillow为图像处理包。
pip install pillow 
# contrib的安装,用于训练自己的人脸模型的一个OpenCV扩展包
pip instal opencv-contrib-python
# pyttsx3 文字转语音库使用
pip install pyttsx3

 

 

 如果你下载软件库缓慢可以在后面加上下列路径,可以加快下载速度。

 pip install opencv-python  (-i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com)

1、人脸采集函数

#导入模块
import cv2 as cv
#打开摄像头
cap = cv.VideoCapture(0)
#采集的照片的数目
num = 1
#录入人员的姓名
face_id = input('录入人员姓名:\n')
#录入人员的标签,每个人的标签不能相同
face_idnum = input('录入人员编号:\n')
print('\n 正在打开摄像头。。。。。。。')
while (cap.isOpened()):#捕获摄像头图像ret_flag,vshow = cap.read()#显示捕获的照片cv.imshow("capture_test",vshow)#图像刷新的频率,图像才能正常显示出来,返回1ms内按键按下的ASII码。k = cv.waitKey(1)&0xff#设置按键保存照片if k == ord('s'):#保存图片(保存路径以及文件命名方式)cv.imencode(".jpg",vshow)[1].tofile("imgdata/"+str(face_idnum)+"."+str(face_id)+'.'+str(num)+".jpg")print("成功保存第"+str(num)+'张照片'+".jpg")print("***********************")num += 1elif k == ord(' '):break
#关闭摄像
cap.release()
#释放图像显示窗
cv.destroyAllWindows()

2、人脸训练函数

import os
import cv2 as cv
from PIL import Image
import numpy as npdef getImageAndlabels(path):#人脸数据数据facesSamples = []#人标签ids = []#读取所有的照片的名称(os.listdir读取根目录下文件的名称返回一个列表,os.path.join将根目录和文件名称组合形成完整的文件路径)imagePaths = [os.path.join(path,f) for  f in os.listdir(path)]#调用人脸分类器(注意自己文件保存的路径,英文名)face_detect = cv.CascadeClassifier('D:/python 3.10.1/OpenCV/haarcascade_frontalface_default.xml')#循环读取照片人脸数据for imagePath in imagePaths:#用灰度的方式打开照片PIL_img = Image.open(imagePath).convert('L')#将照片转换为计算机能识别的数组OpenCV(BGR--0-255)img_numpy = np.array(PIL_img,'uint8')#提取图像中人脸的特征值faces = face_detect.detectMultiScale(img_numpy)#将文件名按“.”进行分割id = int(os.path.split(imagePath)[1].split('.')[0])#防止无人脸图像for x,y,w,h in faces:ids.append(id)facesSamples.append(img_numpy[y:y+h,x:x+w])return facesSamples,idsif __name__ == '__main__':#人脸图片存放的文件夹path = 'imgdata'faces, ids = getImageAndlabels(path)#调用LBPH算法对人脸数据进行处理recognizer = cv.face.LBPHFaceRecognizer_create()#训练数据recognizer.train(faces, np.array(ids))#将训练的系统保存在特定文件夹recognizer.write('trainer/trainer.yml')

3、人脸识别函数(注取消语音播报识别会流畅多)

import os
import cv2
from PIL import Image, ImageDraw, ImageFont
import numpy as np
import pyttsx3
engine = pyttsx3.init()
#加载训练数据集文件
recogizer=cv2.face.LBPHFaceRecognizer_create()
#读取训练好的系统文件
recogizer.read('trainer/trainer.yml')
#存储人脸库中人员的名字
names=[]
#对应的标签
idn = []
#准备识别的图片
def face_detect_demo(img):#转换为灰度gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#调用下载好的人脸分类器face_detector = cv2.CascadeClassifier('D:/python 3.10.1/OpenCV/haarcascade_frontalface_default.xml')#读取图像中人脸的特征值(返回值为人脸的相关坐标和长宽)face=face_detector.detectMultiScale(gray,1.1,5,0,(100,100),(800,800))for x,y,w,h in face:#把人脸框起来cv2.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)# 人脸识别ids, confidence = recogizer.predict(gray[y:y + h, x:x + w])if confidence > 60:img = cv2AddChineseText(img, "外来人员"+str(int(confidence)), (x+10, y+10), (0, 255, 0), 30)engine.say('陌生人员靠近!')engine.runAndWait()#putText(img, 'unkonw', (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)else:img = cv2AddChineseText(img, str(names[idn.index(ids)])+str(int(confidence)), (x+10, y-25), (0, 255, 0), 30)#putText(img,str(names[ids-1]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)engine.say(str(names[idn.index(ids)]) + '同学,你好!')engine.runAndWait()cv2.imshow('result',img)
def cv2AddChineseText(img, text, position, textColor=(0, 255, 0), textSize=30):if (isinstance(img, np.ndarray)):  # 判断是否OpenCV图片类型img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))# 创建一个可以在给定图像上绘图的对象draw = ImageDraw.Draw(img)# 字体的格式fontStyle = ImageFont.truetype("simsun.ttc", textSize, encoding="utf-8")# 绘制文本draw.text(position, text, textColor, font=fontStyle)# 转换回OpenCV格式return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
def name():path = './imgdata/'imagePaths=[os.path.join(path,f) for f in os.listdir(path)]for imagePath in imagePaths:name = str(os.path.split(imagePath)[1].split('.',3)[1])id = int(os.path.split(imagePath)[1].split('.',3)[0])names.append(name)idn.append(id)
cap=cv2.VideoCapture(0)
name()
while True:flag,frame=cap.read()if not flag:breakface_detect_demo(frame)if ord(' ') == cv2.waitKey(10):break
cv2.destroyAllWindows()
cap.release()

五、功能实现

1、可以录入多人人脸,并且有效识别。

2、可以同时识别多人。

3、人脸库中人员的照片也是识别外来人员。

六、演示视频

可以把完整的人脸录入-数据训练-人脸识别流程演示,加上多人识别进行对比,本人与本人照片对比识别。

七、资源

具体代码和ppt地址:基于OpenCV的人脸识别项目.7z-网络安全文档类资源-CSDN下载


http://chatgpt.dhexx.cn/article/ypQJnmwj.shtml

相关文章

最简单体验opencv人脸识别

所需软件:PyCharm 所需硬件:一台电脑 如果没有安装PyCharm,csdn上面搜一下安装教程就行,很简单的。 打开PyCharm,如果没有装opencv,则点击最下面的terminal,在终端下输入pip install opencn-p…

基于opencv的人脸识别(适合初学者)

简单易懂的人脸识别,学不会直接跪倒! 一、人脸识别步骤 二、直接上代码 (1)录入人脸.py import cv2face_name cjw # 该人脸的名字# 加载OpenCV人脸检测分类器 face_cascade cv2.CascadeClassifier("D:/BaiduNetdiskDow…

手把手教你opencv做人脸识别(附源码+文档)

文章目录 一、环境二、使用Haar级联进行人脸检测三、Haar级联结合摄像头四、使用SSD的人脸检测五、 SSD结合摄像头人脸检测六、结语 一、环境 pip install opencv-pythonpython3.9 pycharm2020 人狠话不多,直接上代码,注释在代码里面,不说废…

SIFT算法实现图片匹配

SIFT (Scale-Invariant Feature Transform)是David Lowe 在1999发明的一种算法。它在世界范围内,作为图像对齐和对象识别的参考方法。此方法的鲁棒性能够检测场景的不同比例、角度和照明的因素。silx 中可用的实现使用 OpenCL,这意味着它可以在图形处理单…

SIFT

SIFT features Scale Invariant Feature Transform (SIFT) is an approach for detecting and extracting local feature descriptors that are reasonably invariant to change in illumination, image noise, rotation, scaling, and small changes in viewpoint. SIFT是一…

对SIFT算法的理解,尤其是尺度不变性

SIFT算法四大块 1,尺度空间的建立,最难理解的部分,这一步是为了找到极值点的潜在位置 2,极值点精确定位,通过曲线拟合找到极值点的确切位置 3,分配主方向,为特征点赋予一个方向标志&#xff…

第九章三续:SIFT算法的应用--目标识别之Bag-of-words模型

SIFT算法的应用 -目标识别之用Bag-of-words模型表示一幅图像 作者:wawayu,July。编程艺术室出品。 出处:http://blog.csdn.net/v_JULY_v 。 引言 本blog之前已经写了四篇关于SIFT的文章,请参考九、图像特征提取与匹配…

SIFT算法简介

1、 STFT(Scale Invariant Feature Transform)简介 1.1 SIFT特征检测的步骤1.2 SIFT算法的特点1.3 SIFT算法可以解决的问题 2 、尺度空间 2.1 多分辨率金字塔2.2 高斯金字塔构建示例2.3 高斯尺度空间(使用不同的参数) 3、DoG空间极…

经典算法研究系列:九、图像特征提取与匹配之SIFT算法

经典算法研究系列:九、SIFT算法研究 作者:July、二零一一年二月十五日。 推荐阅读:David G. Lowe, "Distinctive image features from scale-invariant keypoints," International Journal of Computer Vision, 60, 2 (2004), pp. 91-110---…

SIFT算法原理详解

通过《图像局部不变性特征与描述》学习SIFT,遇到各种Issue,总结了这篇博客和另外九篇博客。感谢关注,希望可以互相学习,不断提升。转载请注明链接:https://www.cnblogs.com/Alliswell-WP/p/SIFT.html 如果想深入研究SI…

SIFT算法详解与代码解析

Sift算法详解及代码解析 学了SIFT也有1个半月了,真的是坎坷不断,也因为我可能接触图像邻域时间不长,有很多相关知识要学习,直至今日,才把SIFT大致弄明白。但还有些细节值得去深究,我先把我个人对SIFT算法的…

图像处理——SIFT算法

[SIFT算法原文(Distinctive Image Features from Scale-Invariant Keypoints) SIFT算法(Scale-invariant feature transform),即尺度不变特征变换,由David Lowe提出,是一种基于局部兴趣点的算法,因此不仅对…

特征点匹配——SIFT算法详解

之前在学习三维重建的过程中,了解过SIFT算法,现在老师要求详细的了解SIFT算法,看看能不能对它进行改进,于是又详细的看了一遍SIFT算法。记录一下。 一、SIFT算法综述 SIFT(Scale Invariant Feature Transform&#x…

SIFT算法之python实现

0. 算法原理细节可参考: https://blog.csdn.net/abcjennifer/article/details/7639681https://blog.csdn.net/zddblog/article/details/7521424?depth_1-utm_sourcedistribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_sourcedistribute.pc_re…

Python实现SIFT算法,附详细公式推导和代码

SIFT特征点提取算法 1、算法简介 尺度不变特征转换即SIFT (Scale-invariant feature transform)是一种计算机视觉的算法。它用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由 David …

图像特征匹配方法——SIFT算法原理及实现

传统图像处理中图像特征匹配有三个基本步骤:特征提取、特征描述和特征匹配。特征提取就是从图像中提取出关键点(或特征点、角点)等。特征描述就是用一组数学向量对特征点进行描述,其主要保证不同的向量和不同的特征点之间是一种对…

SIFT算法原理介绍

本文转自:https://blog.csdn.net/qq_37374643/article/details/88606351 SIFT算法 SIFT即尺度不变特征变换,是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。 一、SIFT算…

SIFT算法的个人理解

SIFT算法的个人理解——理论篇 1. 前言 本人目前共使用过两个版本的sift算法: (1)Matlab中的sift算法,可以从http://www.cs.ubc.ca/~lowe/keypoints/下载Lowe团队写的sift演示代码; (2)opencv中的sift…

SIFT算法原理解析

首先找到图像中的一些“稳定点”,这些点是一些十分突出的点不会因光照条件的改变而消失,比如角点、边缘点、暗区域的亮点以及亮区域的点,既然两幅图像中有相同的景物,那么使用某种方法分别提取各自的稳定点,这些点之间…

SIFT算法步骤梳理

简介:SIFT算法是检测和描述局部特征的一种方法,具有尺度不变性,对于光线,噪声等的容忍度相当高。即便少数几个物体也可以产生大量SIFT特征。 SIFT算法实质上是在不同尺度空间上查找关键点,并计算出关键点的方向。 算…