系列文章目录
本文使用两种方法来进行人脸检测
1.Haar特征 人脸检测
2.手工特征+分类器 人脸检测
一、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[