📅  最后修改于: 2023-12-03 14:52:08.635000             🧑  作者: Mango
Haar Cascade 是计算机视觉领域中一种广泛应用于物体检测的算法。Haar Cascade 的运用,让我们可以通过计算机视觉处理从大量数据中迅速、准确地识别出某类特定的事物。
本文我们将介绍如何创建自己的 Haar Cascade,以下是详细步骤:
首先,我们要从不同角度、不同大小、不同位置收集目标物体的图片。图片需要满足以下特点:
为了收集更加丰富的样本,我们应该在不同的环境下、不同的光线条件下收集数据。
在这一步,我们将会使用 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
是你的背景负样本集。
在这步中,我们将训练分类器以识别样本中的特定数据。这一步的重点是对样本数据进行训练。它将生成许多 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 文件所存储的路径。
最后,我们需要将生成的 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 过程,如其他问题,欢迎提出。