本文共 1504 字,大约阅读时间需要 5 分钟。
1,人脸检测简介
人脸检测的模型主要有两类,一类是知识模型,根据眼睛、嘴、鼻子的相对位置或面部不同部位的颜色深度差异来检测人脸,另一类是统计模型,把海量的人脸数据转换成二维像素矩阵,从统计的观点出发构建人脸模式空间判断人脸是否存在。2,特征数据
最常用到的三种特征分别为Haar特征、LBP特征及HOG特征,三种特征描述了三种不同的局部信息: (1) Haar描述的是图像在局部范围内像素值明暗变换信息; (2)LBP描述的是图像在局部范围内对应的纹理信息; (3)HOG描述的则是图像在局部范围内对应的形状边缘梯度信息。 其中,OpenCV使用的Haar特征分类器属于第二种模型,训练人脸检测的特征分类器是个非常耗时费力的工作,需要收集大量的正负样本,不过值得庆幸的是OpenCV已经为我们完成了这项工作。关于Haar的具体原理和算法请大家自行百度,简单点说Haar特征分类器是xml文件,记录了面部正面、侧面、左右眼、鼻子、笑脸、上半身等多个Haar特征数据,通过对输入图片进行级联筛选查找人脸 3.人脸检测的实现 在搜索“github opencv”,在“opencv/data/haarcascades”目录下可以看到各种各样的特征分类器(xml文件),从文件名上可以轻易区分出分类器的用途,如“haarcascadesfrontalface_default.xml”是脸部正面特征分类器。 源代码示例:import cv2 as cvimport numpy as npdef face_detect_demo(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#转化为灰度图 face_detector = cv.CascadeClassifier("F:/images/haarcascade_frontalface_alt_tree.xml") #利用级联检测器加载特征数据 faces = face_detector.detectMultiScale(gray, 1.02, 5) for x, y, w, h in faces: cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2) cv.imshow("result", image) #cv.cv.waitKey(10) src = cv.imread("F:/images/lena.png")cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)"""cv.namedWindow("result", cv.WINDOW_AUTOSIZE)capture = cv.VideoCapture(0)cv.namedWindow("result", cv.WINDOW_AUTOSIZE)while(True): ret, frame = capture.read() frame = cv.flip(frame, 1) face_detect_demo(frame) c = cv.waitKey(10) if c == 27: # ESC break#在视频中定位人脸"""cv.imshow("input image", src)face_detect_demo(src)cv.waitKey(0)cv.destroyAllWindows()
运行结果:
转载地址:http://nahwi.baihongyu.com/