📜  Python|用于对象检测的 Haar 级联

📅  最后修改于: 2022-05-13 01:54:47.024000             🧑  作者: Mango

Python|用于对象检测的 Haar 级联

对象检测是一种与计算机视觉、图像处理和深度学习相关的计算机技术,用于检测图像和视频中的对象实例。我们将在本文中使用称为 haar cascades 的东西进行对象检测。

什么是 Haar 级联?

Haar Cascade 分类器是一种有效的目标检测方法。这种方法是由 Paul Viola 和 Michael Jones 在他们的论文 Rapid Object Detection using a Boosted Cascade of Simple Features 中提出的。Haar Cascade 是一种基于机器学习的方法,其中使用大量正负图像来训练分类器。

  • 正面图像——这些图像包含我们希望分类器识别的图像。
  • 负图像 -其他所有图像,不包含我们想要检测的对象。

要求:

  • 确保你的电脑上安装了Python、Matplotlib 和 OpenCV(所有最新版本)。
  • 可以从 OpenCV Github 存储库下载 haar 级联文件。

执行

Python3
# Importing all required packages
import cv2
import numpy as np
import matplotlib.pyplot as plt % matplotlib inline
 
 
# Read in the cascade classifiers for face and eyes
face_cascade = cv2.CascadeClassifier('../DATA / haarcascades / haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('../DATA / haarcascades / haarcascade_eye.xml')
 
 
 
# create a function to detect face
def adjusted_detect_face(img):
     
    face_img = img.copy()
     
    face_rect = face_cascade.detectMultiScale(face_img,
                                              scaleFactor = 1.2,
                                              minNeighbors = 5)
     
    for (x, y, w, h) in face_rect:
        cv2.rectangle(face_img, (x, y),
                      (x + w, y + h), (255, 255, 255), 10)\
         
    return face_img
 
 
# create a function to detect eyes
def detect_eyes(img):
     
    eye_img = img.copy()   
    eye_rect = eye_cascade.detectMultiScale(eye_img,
                                            scaleFactor = 1.2,
                                            minNeighbors = 5)   
    for (x, y, w, h) in eye_rect:
        cv2.rectangle(eye_img, (x, y),
                      (x + w, y + h), (255, 255, 255), 10)       
    return eye_img
 
# Reading in the image and creating copies
img = cv2.imread('../sachin.jpg')
img_copy1 = img.copy()
img_copy2 = img.copy()
img_copy3 = img.copy()
 
# Detecting the face
face = adjusted_detect_face(img_copy)
plt.imshow(face)
# Saving the image
cv2.imwrite('face.jpg', face)


Python3
eyes = detect_eyes(img_copy2)
plt.imshow(eyes)
cv2.imwrite('face_eyes.jpg', eyes)


Python3
eyes_face = adjusted_detect_face(img_copy3)
eyes_face = detect_eyes(eyes_face)
plt.imshow(eyes_face)
cv2.imwrite('face+eyes.jpg', eyes_face)



代码:检测眼睛

Python3

eyes = detect_eyes(img_copy2)
plt.imshow(eyes)
cv2.imwrite('face_eyes.jpg', eyes)


代码:检测面部和眼睛

Python3

eyes_face = adjusted_detect_face(img_copy3)
eyes_face = detect_eyes(eyes_face)
plt.imshow(eyes_face)
cv2.imwrite('face+eyes.jpg', eyes_face)


Haar Cascades 可用于检测任何类型的对象,只要您有相应的 XML 文件。您甚至可以从头开始创建自己的 XML 文件来检测您想要的任何类型的对象。