📜  如何创建自己的 haar 级联 (1)

📅  最后修改于: 2023-12-03 14:52:08.635000             🧑  作者: Mango

如何创建自己的 Haar Cascade

Haar Cascade 是计算机视觉领域中一种广泛应用于物体检测的算法。Haar Cascade 的运用,让我们可以通过计算机视觉处理从大量数据中迅速、准确地识别出某类特定的事物。

本文我们将介绍如何创建自己的 Haar Cascade,以下是详细步骤:

  1. 收集训练样本

首先,我们要从不同角度、不同大小、不同位置收集目标物体的图片。图片需要满足以下特点:

  • 相同的尺寸
  • 相同的灰度
  • 相同的方向

为了收集更加丰富的样本,我们应该在不同的环境下、不同的光线条件下收集数据。

  1. 准备样本

在这一步,我们将会使用 opencv_createsamples 来创建正样本的训练集。通过把训练样本随机切割成不同的大小,可以增加训练样本的数量。

示例命令:

opencv_createsamples -img positive_images/***.jpg -bg negative_images/background.txt -info positive_images/info/info.lst -pngoutput positive_images

其中 positive_images 是你的正面样本集所在的文件夹名,negative_images/background.txt 是你的背景负样本集。

  1. 训练分类器

在这步中,我们将训练分类器以识别样本中的特定数据。这一步的重点是对样本数据进行训练。它将生成许多 xml 文件,用于创建级联分类器。

示例命令:

opencv_traincascade -data classifier -vec positive_images/info/info.vec -bg negative_images/background.txt -numStages 20 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 1000 -numNeg 600 -w 80 -h 40 -mode ALL -precalcValBufSize 1024 -precalcIdxBufSize 1024

其中 my_pos_samples/info/info.vec 是刚刚第二步中生成的样本数据,classifier 代表你的 classifier 文件所存储的路径。

  1. 创建分类器

最后,我们需要将生成的 xml 文件运行于一个级联分类器之上。这将会生成 cascade.xml 的文件,可以在检测时使用。

示例命令:

import cv2

face_cascade = cv2.CascadeClassifier("cascade.xml")

img = cv2.imread("test.jpg")

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1)

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

cv2.imshow("img", img)
cv2.waitKey()

在以上模型检测代码的 cv2.CascadeClassifier 中,传入的是我们生成的级联分类器 cascade.xml

现在,我们已经掌握了如何创建自己的 Haar Cascade 过程,如其他问题,欢迎提出。