传统人脸检测项目实战(Haar级联与手工特征分类器)

本文介绍了两种人脸检测方法:一是使用OpenCV的Haar特征级联检测,二是结合手工特征(如HOG)和分类器进行检测。Haar特征虽然精度有限,但结合积分图可提升计算速度。手工特征提取,特别是HOG,能捕捉图像轮廓,常用于机器学习的特征表示。文章提供了代码示例,展示了如何使用这两种方法进行人脸检测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录

本文使用两种方法来进行人脸检测
1.Haar特征 人脸检测
2.手工特征+分类器 人脸检测




一、Haar特征 人脸检测

Haar特征

Haar是一种用模板来描述图像变化的工具,所得到的结果可以作为图像特征。

根据目标不同,设计了多种不同的模板。

haar
这些特征,实际上就是卷积神经网络的灵感源泉之一。

在实际运算中,haar特征的精度并不高。但结合积分图,可以快速计算图像特征。

具体计算方法是,白色区域的和 减去 黑色区域的和.

本质上,白色区域的值为1,黑色区域的值为0。

haar级联人脸检测

可以使用opencv提供的事先训练好的模型直接进行推理。
这里直接下载opencv库即可

pip install opencv

或者也可以使用镜像下载 提高速度
下载好之后找到

Acondan\Lib\site-packages\cv2\data

文件夹下的训练好的模型,直接调用
在这里插入图片描述
附上代码:

import cv2
import matplotlib.pyplot as plt

face_detector = cv2.CascadeClassifier(r'D:\Acondan\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
img = cv2.imread('./lena.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_detector.detectMultiScale(img,1.1, 4 )
for (x,y, w, h) in faces:
    cv2.rectangle(img, pt1 = (x,y),pt2 = (x+w, y+h), color = (255,0,0),thickness =  3)
    roi_gray = gray[y:y+h,x:x+w]
    roi_color = img[y:y+h, x:x+w]

plt.imshow(img)

运行结果:
在这里插入图片描述
可以看到检测出了人脸。

二、手工特征+分类器

预准备

本文采用

要进行本项目的实战 首先需要安装如下几个包

pip install scikit-learn
pip install matplotlib
pip install numpy

数据集lfw,我们这里直接用scikit-learn库导入

faces = fetch_lfw_people(download_if_missing=true)

机器学习进行人脸预测可以大致分为两个步骤
1.特征提取
2.分类器训练

手工特征提取和分类器训练简介

HOG特征
hog, higtogram of oriented gradient, 是抓取图像轮廓的算法。

具体上,将一张图像切成很多个区域,并从每个区域中提取出方向梯度,作为特征。

其基本步骤包括:

图像预处理: 灰度化、归一化、平滑等
计算梯度: 用sobel计算梯度的赋值和方向
分割图像:将图像切割成大小相同的cell。并构建直方图
块归一化:将每个patch中的图直方图进行归一化,消除光影影响
将所有直方图组合成一个特征向量


分类器的大致训练过程如下

训练过程

grad = GridSearchCV(LinearSVC(dual=False), {'C': [1.0, 2.0, 4.0, 8.0]}, cv=3)

grad.fit(X_train, y_train)

print(grad.best_score_)

print(grad.best_params_)

model = grad.best_estimator_
model.fit(X_train, y_train)
//测试过程

labels = model.predict(patches_hog)

项目实战

导入库,并下载人脸数据集,设置正类

from sklearn.datasets import fetch_lfw_people
import matplotlib.pyplot as plt
import numpy as np
faces = fetch_lfw_people(download_if_missing=False)
positive_patches = faces.images
print(positive_patches.shape)
plt.imshow(positive_patches[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

入门两年的练习生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值