介绍
Harr+AdaBoost 可视为目标检测,人脸检测的开山鼻祖
理论介绍
Haar-like 特征
- Haar(哈尔)特征分为三类:边缘特征、线性特征、中心特征和对角线特征
计算特征
- 通过改变特征模板的大小和位置,可在图像子窗口中穷举出大量的特征。上图的特征模板称为“特征原型”; 特征原
型在图像子窗口中扩展(平移伸缩)得到的特征称为“矩形特征”;矩形特征的值称为“特征值”。
积分图
定义
- 积分图是-种能够描述全局信息的矩阵表示方法。积分图的构造方式是:位置(i,j) 处的值i(,j)是原图像(i,j)左上角方向所有像素f(k,I)的和:
计算特征值
(没太看懂,以后补上)
归一化
这里的归一化和深度学习中的对数据进行归一化的处理相一致,来减少特征值的变化范围,使特征值便于计算
- 公式为
- 灰度值和灰度值平方和:
- 计算平均值
- 归一化分母
*
- 进行归一化
-
级联训练分类器
- 要先进过筛选,在用adaBoost训练,属于传统的训练方法
以后有空再了解 - 在深度学习上,yolo和ssd,Faster RCNN等用法更高效
代码实践
import cv2
import numpy as np
import matplotlib.pyplot as plt
haar_front_face_xml='../../opt/conda/envs/env/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml'
# haar_front-face_xml ="home/aistuido/xml_file/haarcascade_frontalface_default_2.xml"
haar_eye_xml = 'home/xml_file/haarcascade_eye.xml'
def StaticDetect(filename):
# create an cascade and load a file of .xml and it can be Haar also can be LBP
face_cascade =cv2.CascadeClassifier(haar_front_face_xml)
img =cv2.imread(filename)
gray_img =cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 进行人脸检测,
faces = face_cascade.detectMultiScale(gray_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)
# cv2.namme
img=cv2.cvtColor(img,cv2.COLOR_RGB2BGR)
print(img.shape)
plt.imshow(img)
plt.show()
if __name__=='__main__':
# filename ="hough_result.png"
list = [1,2,4]
for i in list:
filename=str(i) + '.jpg'
if i==4:
filename=str(i) + '.png'
StaticDetect(filename)
结果
(这篇博客写的比较匆忙,很多的地方还需要改正)