opencv(人脸检测和识别)

article/2025/10/26 6:34:21

Opencv的人脸检测函数,定义了具体可跟踪对象类型的数据文件。

Haar级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配。

两个图像的相似程度可以通过它们对应特征的欧式距离来度量。距离可能以空间坐标或颜色坐标来定义。类Haar特征是一种用于实现实时人脸跟踪的特征。每个类Haar特征都描述了相邻图像区域的对比模式。例如,边,顶点和细线都能生成具有判断性的特征。

Haar级联级具有尺度不变性,换句话说,它在尺度变化上具有鲁棒性。但是,opencv的Haar级联不具有旋转不变性。

在opencv源代码的副本中会有一个文件夹data/haarcascades,该文件夹包括了所有opencv的人脸检测的xml文件,这些文件可用于检测静止图像,视频和摄像头所得到图像中的人脸。

在开始写代码之前,先要下载opencv源代码包:
这里写图片描述
静态图像中的人脸检测:

import cv2 as cvfilename = 'D:/timg.jpg'face_cascade = cv.CascadeClassifier('D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
//注意用绝对路径就不会报错
img = cv.imread(filename)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:img = cv.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)cv.namedWindow('Vikings Detected')
cv.imshow('Vikings Detected', img)
cv.waitKey(0)
图片检测人脸只是开胃菜,真正让我感兴趣的是视频或摄像头下的人脸识别,废话少说:

当然第一步是先学会视频中人脸检测,代码如下:

import numpy as np
import cv2face_cascade = cv2.CascadeClassifier('D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
while True:ret,img = cap.read()gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = face_cascade.detectMultiScale(gray, 1.3, 5)for (x,y,w,h) in faces:cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)cv2.imshow('img',img)       if cv2.waitKey(1) &0xFF == ord('q'):break
cap.release()
cv2.destroyAllWindows()

效果就自己尝试吧。

接下来开始人脸识别了:

1.生成人脸识别数据,代码如下:

import cv2
import osdef generate(dirname):face_cascade = cv2.CascadeClassifier('D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')eye_cascade = cv2.CascadeClassifier('D:/opencv/sources/data/haarcascades/haarcascade_eye.xml')//带眼镜的时候可以用下面这个//eye_cascade = cv2.CascadeClassifier('D:/opencv/sources/data/haarcascades/haarcascade_eye_tree_eyeglasses.xml')//创建目录if(not os.path.isdir(dirname)):os.makedirs(dirname) //打开摄像头进行人脸图像采集camera = cv2.VideoCapture(0)count = 0while (True):ret, frame = camera.read()gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)faces = face_cascade.detectMultiScale(gray, 1.3, 5)for (x,y,w,h) in faces:img = cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)//重设置图像尺寸 200*200f = cv2.resize(gray[y:y+h, x:x+w], (200, 200))cv2.imwrite(dirname+'/%s.pgm' % str(count), f)print(count)count += 1cv2.imshow("camera", frame)if cv2.waitKey(100) & 0xff == ord("q"):break//下面是你想要多少张图片就停止elif count > 20:breakcamera.release()cv2.destroyAllWindows()if __name__ == "__main__":generate("D:/data/lijiale") //你生成的图片放在的电脑中的地方

这是我运行上面代码的结果:

2.有了人脸数据后,接下来的是基于Eigenfaces的人脸识别,代码如下:

import cv2,os,sys
import numpy as npdef read_images(path, sz = None):c = 0X, y = [], []for dirname, dirnames, filenames in os.walk(path):for subdirname in dirnames:subject_path = os.path.join(dirname, subdirname)for filename in os.listdir(subject_path):try:if not filename.endswith('.pgm'):continuefilepath = os.path.join(subject_path, filename)im = cv2.imread(filepath, cv2.IMREAD_GRAYSCALE)if sz is not None:im = cv2.resize(im,(200,200))X.append(np.asarray(im, dtype=np.uint8))y.append(c)except:print("Unexpected error:",sys.exc_info()[0])c = c + 1return [X, y]def face_rec(img_path):names = ['lijiale'][X,y] = read_images(img_path)y = np.asarray(y, dtype=np.int32)model = cv2.face.EigenFaceRecognizer_create()model.train(np.asarray(X), np.asarray(y))camera = cv2.VideoCapture(0)face_cascade = cv2.CascadeClassifier(r'D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')while (True):read, img = camera.read()faces = face_cascade.detectMultiScale(img, 1.3, 5)for (x, y, w, h) in faces:img = cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)roi = gray[x: x+w, y: y+h]try:roi = cv2.resize(roi, (200, 200), interpolation=cv2.INTER_LINEAR)params = model.predict(roi)print("Label: %s, Confidence: %.2f" % (params[0], params[1]))cv2.putText(img, names[params[0]], (x, y - 20), cv2.FONT_HERSHEY_SIMPLEX, 1, 255, 2)except:continuecv2.imshow("camera", img)if cv2.waitKey(1000 // 12) & 0xff == ord('q'):breakcv2.destroyAllWindows()if __name__ == "__main__":face_rec(r'D:/data/')  //人脸数据路径img_path

运行上面代码的效果:

遗憾的是我没有尝试收集多人的人脸数据,然后实现多人识别的效果(这个现在没有很空闲,等有时间再来尝试吧,预留个位置以后敲写完整),而且上面只是基于Eigenfaces的人脸识别,当然以后也会尝试下面剩下的两种方法。
opencv3 有三种人脸识别的方法,它们分别基于三种不同的算法:Eigenfaces, Fisherfaces,Local Binary Patter Histogram ( LBPH ) 。这三种方法都有类似的过程,即都是使用了分好类的训练数据集(人脸数据库,每一个人都有很多样本)来进行训练,对图像或视频中检测到的人脸进行分析,并从两方面来确定:是否识别到目标;目标真正被识别到的置信度的度量,也称为置信度评分。
关于Eigenfaces, Fisherfaces,Local Binary, Patter Histogram ( LBPH ) 详解可以自己查阅
最后要补充的一个地方是我在学习过程中有些在有了人脸数据以后要生成csv文件,代码也在这里给出来:

import sys
import os.path# This is a tiny script to help you creating a CSV file from a face
# database with a similar hierarchie:
#
#  philipp@mango:~/facerec/data/at$ tree
#  .
#  |-- README
#  |-- s1
#  |   |-- 1.pgm
#  |   |-- ...
#  |   |-- 10.pgm
#  |-- s2
#  |   |-- 1.pgm
#  |   |-- ...
#  |   |-- 10.pgm
#  ...
#  |-- s40
#  |   |-- 1.pgm
#  |   |-- ...
#  |   |-- 10.pgm
#if __name__ == "__main__":#if len(sys.argv) != 2:#    print "usage: create_csv <base_path>"#    sys.exit(1)#BASE_PATH=sys.argv[1]BASE_PATH="D:/data/lijiale"SEPARATOR=";"fh = open("D:/data/lijiale/at.txt",'w')label = 0for dirname, dirnames, filenames in os.walk(BASE_PATH):for subdirname in dirnames:subject_path = os.path.join(dirname, subdirname)for filename in os.listdir(subject_path):abs_path = "%s/%s" % (subject_path, filename)print ("%s%s%d" % (abs_path, SEPARATOR, label))fh.write(abs_path)fh.write(SEPARATOR)fh.write(str(label))fh.write("\n")      label = label + 1fh.close()

这个代码是opencv源码包里面自带的,你需要的是改下路径。
感谢你们的支持,如需转载请标注作者。


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

相关文章

OpenCV:人脸检测

OpenCV是一个开源、跨平台的计算机视觉库&#xff0c;可以用于各种图像和视频处理操作。 所以接下来会分享一些关于OpenCV有趣的小案例&#xff0c;毕竟要让学习变得有趣。 本次就来了解一下&#xff0c;如何通过OpenCV对人脸进行检测。 其中OpenCV有C和Python两种&#xff0…

基于opencv实现人脸识别案例

一、基础 我们使用机器学习的方法完成人脸检测&#xff0c;首先需要大量的正样本图像&#xff08;面部图像&#xff09;和负样本图像&#xff08;不含面部的图像&#xff09;来训练分类器。我们需要从其中提取特征。下图中的 Haar 特征会被使用&#xff0c;就像我们的卷积核&a…

基于opencv人脸识别

基于opencv平台实现人脸识别。mac os建议使用pycharm ce 编译器使用Xcode 第一步建立代码运行的环境 打开pycharm ce 终端或者mac 终端 输入pip install opencv- python 、pip install opencv-contrib- python &#xff0c;pip install pillow &#xff08;注意要观察自己电脑p…

(学习笔记二)——基于opencv人脸检测原理及实现

最近搞了几天的人脸检测&#xff0c;终于把大体框架和原理搞清楚了&#xff0c;现在写出来供大家学习之用&#xff0c;如有不对之处&#xff0c;还请大家指正。也希望大家在学习opencv的过程中能将学习过程及重点记录下来&#xff0c;以博客的形式分析&#xff0c;毕竟opencv的…

Python OpenCV 人脸识别

简单运用Python OpenCV对图片进行人脸识别&#xff0c; 我们先看效果及代码&#xff1a; import cv2img1 cv2.imread(6.jpeg) gray cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) face_detector cv2.CascadeClassifier("haarcascade_frontalface_default.xml") faces …

OpenCV-Python:简单实现人脸识别

安装 pip install numpy pip install opencv-python pip install opencv-contrib-pythonOpenCV主要模块 core 核心功能模块。该模块主要包含 OpenCV库的基础结构以及基本操作&#xff0c;例如OpenCV基础数据结构、绘图函数、数组操作相关函数、动态数据结构等calib3d&#xff…

[计算机毕业设计]opencv的人脸面部识别

前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过…

OpenCV人脸检测及识别(深度学习)

简介 最近做了一个人脸检测以及识别的程序&#xff0c;很多的文章都有比较详细的叙述&#xff0c;可以自行查找。但是个人觉得大部分文章都太细致了以至于初学者无法快速领会主干&#xff08;不是否认质量&#xff09;&#xff0c;是侧重点问题。所以结合我遇到了一些问题&…

使用OpenCV简单实现人脸识别

简介 OpenCV是一个非常强大的计算机视觉库&#xff0c;现有的一系列特征检测和特征匹配算法&#xff0c;有很大一部分都已经在OpenCV的库中得以实现&#xff0c;故此我们只需调用OpenCV库中函数即可简单实现人脸识别。 开发环境 版本&#xff1a;Python 3.6 编辑器&#xff…

OpenCv 之(图片人脸识别)和 (摄像头读入)

##先来张人脸识别效果图&#xff1a; ##1、概述 人脸识别&#xff0c;是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流&#xff0c;并自动在图像中检测和跟踪人脸&#xff0c;进而对检测到的人脸进行脸部的一系列相关技术…

(项目笔记)opencv人脸识别

Haar级联&#xff1a; Haar特征&#xff1a;边缘特征&#xff0c;线性特征&#xff0c;中心环绕特征&#xff0c;对角线特征 这些特征组合为特征模板&#xff0c;特征模板里有白色和黑色矩形&#xff0c;模板特征即为白色矩形像素和减去黑色矩形像素和。 Haar 特征的提取简…

【opencv】基于opencv实现人脸识别,原理代码部分

上一部分我们解决了环境问题&#xff0c;这一部分我们可以开始上代码&#xff0c;环境没有配好的可以参照上一篇博客&#xff1a;环境搭建解决&#xff1a; 下面先说一下原理&#xff1a; 一.原理部分 本文基于opencv来实现人脸识别&#xff0c;大致实现流程可以描述为&#…

基于opencv的人脸识别和检测

人脸识别作为一个热门项目&#xff0c;目前有多种方法实现&#xff0c;利用python和opencv来实现&#xff0c;是一个比较简单的项目。 1.环境配置 windows平台 python版本&#xff1a;3.8.6 pycharm版本&#xff1a;2019.1.2 Opencv版本&#xff1a;4.5.3 安装了python后…

C++ OpenCV【人脸识别人眼识别】

此文章仅对人脸位置进行检测&#xff0c;使用haar级联的方法[OpenCV自带] #include <iostream> #include <opencv2/opencv.hpp> #include <vector> #include <cstdio> using namespace std; using namespace cv;//定义7种颜色&#xff0c;用于标记人脸…

通过opencv实现简单的人脸识别

文章目录 通过opencv实现简单的人脸识别1.环境配置2.收集数据集3.人脸数据的处理4.通过神经网络训练模型5.进行人脸识别6.总结 通过opencv实现简单的人脸识别 ​ 网上有很多通过opencv实现的简单人脸识别&#xff0c;本文于其他文章差别不大&#xff0c;仅为作者复现代码后的一…

基于OpenCv的人脸识别(Python完整代码)

实验环境&#xff1a;python 3.6 opencv-python 3.4.14.51 建议使用 anaconda配置相同环境 背景 人脸识别步骤 图1&#xff1a;人脸识别流程图 人脸采集 采集人脸图片的方法多种多样&#xff0c;可以直接从网上下载数据集&#xff0c;可以从视频中提取图片&#xff0c;还可以…

使用opencv实现简单的人脸识别

一、opencv模块的使用 1、简介 opencv-python是一个python绑定库&#xff0c;旨在解决计算机视觉问题。使用opencv模块&#xff0c;可以实现一些对图片和视频的操作。 2、安装 安装opencv之前需要先安装numpy, matplotlib。然后使用pip安装opencv库即可。 3、导入 使用im…

opencv实现人脸识别(c++实现)

1 说明 本文章基于opencv VS2015 实现人脸检测 2 效果 可以直接打开摄像头对人脸进行识别&#xff0c;这些标识框也会跟随你的人脸移动。隐私问题&#xff0c;我这里对图片进行了识别。 3 相关类及函数介绍 opencv中文文档 3.1 cv::VideoCapture 官方文档说明 功能 &am…

11 OpenCV图像识别之人脸识别

文章目录 1 Eigenfaces1.1 建模流程1.2 示例代码 2 Fisherfaces2.1 建模流程2.2 示例代码 3 Local Binary Histogram3.1 建模流程3.2 示例代码 OpenCV 提供了三种人脸识别方法&#xff1a; Eigenfaces Eigenfaces是一种基于PCA&#xff08;Principal Component Analysis&#…

OpenCV人脸识别

OpenCV人脸识别与口罩检测 下载文件 人脸检测 人脸检测的检测方法主要有两类:基于知识(根据眼睛,眉毛,嘴巴,鼻子等器官特征及相互几何位置关系来检测)和基于统计(将人脸看作一个二维像素矩阵,通过大量人脸图像样本构造人脸模式空间,由相似度量判断人脸是否存在). 基于知识的…