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 文件来检测您想要的任何类型的对象。