使用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特征


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM