运营 网站,无障碍网站建设标准,网站建设内部问卷,做外贸站推广目录
一、环境
二、分类器原理
2.1、概述
2.2、工作原理
三、人脸检测代码 一、环境
本文使用环境为#xff1a;
Windows10Python 3.9.17opencv-python 4.8.0.74
二、分类器原理
CascadeClassifier是OpenCV#xff08;开源计算机视觉库#xff09;中的一个强大的类…目录
一、环境
二、分类器原理
2.1、概述
2.2、工作原理
三、人脸检测代码 一、环境
本文使用环境为
Windows10Python 3.9.17opencv-python 4.8.0.74
二、分类器原理
CascadeClassifier是OpenCV开源计算机视觉库中的一个强大的类用于实现级联分类器。这是一种机器学习技术广泛应用于面部检测、物体识别等计算机视觉任务。以下是对CascadeClassifier的深入解析。
2.1、概述
在计算机视觉中目标检测是一个重要的任务其目标是在图像或视频中找出感兴趣的对象。对于人脸检测我们需要从图像中找出并定位所有的人脸。为了完成这个任务我们需要一个强大的分类器。然而构建一个强大且高效的分类器是一个挑战因为我们需要处理大量的数据并且需要在各种条件下不同的光照、姿态、表情等都能准确地检测出人脸。
这就是CascadeClassifier发挥作用的地方。CascadeClassifier是一个级联分类器它结合了多个“弱”分类器来创建一个强大的分类器。每个弱分类器都基于Haar特征或LBP局部二值模式特征。这些特征都是图像中的简单模式可以用来描述图像的结构。通过结合这些弱分类器我们可以得到一个能在各种条件下都能准确检测出人脸的强分类器。
2.2、工作原理
CascadeClassifier的工作原理可以分为两个阶段训练和检测。
训练阶段在这个阶段我们需要提供大量的正样本包含目标的图像和负样本不包含目标的图像。然后CascadeClassifier使用AdaBoost算法来训练分类器。AdaBoost算法通过迭代地增加错误分类的样本的权重来优化分类器的性能。这个过程会产生一系列的弱分类器每个弱分类器都对一部分样本有很好的分类效果。然后这些弱分类器被组合成一个强分类器。检测阶段在检测阶段CascadeClassifier使用滑动窗口的方法来扫描图像。对于每个窗口分类器都会计算一个分数表示该窗口包含目标的可能性。然后这个分数与一个阈值进行比较如果分数高于阈值那么这个窗口就被认为包含目标。这个过程会在不同的尺度和位置上重复进行以便检测出不同大小和位置的目标。
三、人脸检测代码
代码需要一张图片两个xml文件文件我给出来了
链接https://pan.baidu.com/s/1cvPvhhuYD_KXHVVaG9dEng?pwd1234 提取码1234
以下代码中先读取一张图片然后读取两个xml文件模型文件。接着在原图上检测人脸再将人脸区域图片用于检测眼睛。
from __future__ import print_function
import cv2 as cv
import argparse# 可视化
def detectAndDisplay(frame):# 彩色图转灰度图frame_gray cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 使用直方图均衡化算法处理灰度图防止图像太亮或者太暗frame_gray cv.equalizeHist(frame_gray)# 人脸检测faces face_cascade.detectMultiScale(frame_gray)for (x,y,w,h) in faces:center (x w//2, y h//2)# 将人脸用椭圆标注出来frame cv.ellipse(frame, center, (w//2, h//2), 0, 0, 360, (255, 0, 255), 4)# 取出人脸roi小图faceROI frame_gray[y:yh,x:xw]# 在人脸roi小图上识别眼睛eyes eyes_cascade.detectMultiScale(faceROI)for (x2,y2,w2,h2) in eyes:eye_center (x x2 w2//2, y y2 h2//2) # 眼睛中心radius int(round((w2 h2)*0.25)) # 圆半径frame cv.circle(frame, eye_center, radius, (255, 0, 0 ), 4) # 使用圆将眼睛圈出来cv.imshow(Capture - Face detection, frame)parser argparse.ArgumentParser(descriptionCode for Cascade Classifier tutorial.)
# 人脸模型路径
parser.add_argument(--face_cascade, helpPath to face cascade., defaultdata/haarcascades/haarcascade_frontalface_alt.xml)
# 眼睛模型路径
parser.add_argument(--eyes_cascade, helpPath to eyes cascade., defaultdata/haarcascades/haarcascade_eye_tree_eyeglasses.xml)
parser.add_argument(--image, helpimage path, typestr, defaultdata/6.jpg)
args parser.parse_args()face_cascade_name args.face_cascade
eyes_cascade_name args.eyes_cascade
# 创建一个级联分类器对象人脸
face_cascade cv.CascadeClassifier()
# 创建一个级联分类器对象眼睛
eyes_cascade cv.CascadeClassifier()#加载级联分类器参数文件人脸
if not face_cascade.load(cv.samples.findFile(face_cascade_name)):print(--(!)Error loading face cascade)exit(0)
#加载级联分类器参数文件眼睛
if not eyes_cascade.load(cv.samples.findFile(eyes_cascade_name)):print(--(!)Error loading eyes cascade)exit(0)img_path args.image
#头读取图像
frame cv.imread(img_path)
detectAndDisplay(frame)
cv.waitKey(0)