使用Haar分类器进行面部检测

   Haar特征分类器就是一个XML文件,存放在OpenCV安装目录中的\data\ haarcascades目录下

  • OpenCV中的Haar级联检测

  OpenCV 自带了训练器和检测器。如果你想自己训练一个分类器来检测汽车,飞机等的话,可以使用 OpenCV 构建。其中的细节参考这里:Cascade Classifier Training

  现在我们来学习一下如何使用检测器。OpenCV 已经包含了很多已经训练好的分类器,其中包括:面部,眼睛,微笑等。这些 XML 文件保存在/opencv/data/haarcascades/文件夹中。下面我们将使用 OpenCV 创建一个面部和眼部检测器。首先我们要加载需要的 XML 分类器。然后以灰度格式加载输入图像或者是视频。

import sys
import cv2
import cv2.cv as cv
import numpy as np

OPENCV_PATH = r"C:/Program Files/OpenCV2/opencv" 

# Cascade classifier class for object detection.
# Python: cv2.CascadeClassifier(filename) -> CascadeClassifier object
# Parameters: filename – Name of the file from which the classifier is loaded.
face_cascade = cv2.CascadeClassifier(OPENCV_PATH + '/data/haarcascades/haarcascade_frontalface_default.xml')

cap = cv2.VideoCapture("test.avi") # 打开视频文件 

# Returns true if video capturing has been initialized already
if not cap.isOpened():   # 检测视频是否打开成功 
    sys.exit()

rate=cap.get(cv.CV_CAP_PROP_FPS) # 获取帧率 
delay = int(1000 / rate)         # 每一帧之前的延迟与视频的帧率相对应

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Detects objects of different sizes in the input image.
    # The detected objects are returned as a list of rectangles 
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    
    for (x,y,w,h) in faces:
        cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)

    # Display the resulting frame
    cv2.imshow('frame', frame)

    if cv2.waitKey(delay) & 0xFF == ord('q'):
        break

# Closes video file or capturing device.
cap.release()

cv2.destroyAllWindows()

  下面是对动画片超级大坏蛋中的一个视频片段进行人脸检测:

  下面检测照片(1927年第五届索尔维会议)中的多个人脸:

import cv2

OPENCV_PATH = r"C:/Program Files/OpenCV2/opencv" 
face_cascade = cv2.CascadeClassifier(OPENCV_PATH + '/data/haarcascades/haarcascade_frontalface_default.xml')

img = cv2.imread('test.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 2)

for (x,y,w,h) in faces:
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

 

 

参考:

级联分类器

人脸检测 

浅析人脸检测之Haar分类器方法

基于级联分类器的目标检测objdect

目标检测的图像特征提取之(三)Haar特征

posted @ 2017-06-30 17:49  XXX已失联  阅读(12287)  评论(0编辑  收藏  举报