介绍
OpenCV 是一个开源的计算机视觉库,它提供了许多用于图像处理和计算机视觉的功能。其中,Haar-cascade 检测是一种流行的技术,通常用于目标检测,如人脸、眼睛、手部等。这种方法基于机器学习,使用一系列的矩形特征(Haar 特征)来检测图像中的特定对象。
Haar-cascade 检测的工作原理
-
Haar 特征:是一种简单的矩形特征,用于描述图像中的局部亮度差异。这些特征对于捕捉边缘、线条和纹理等图像结构非常有效。
-
积分图:为了快速计算Haar特征,OpenCV 使用积分图。积分图允许我们在常数时间内计算任何矩形区域的像素和。
-
Cascade 分类器:一个单独的Haar特征可能不足以准确检测目标,因此,通常使用多个特征的组合。Cascade分类器是一个多级的分类器,每一级都包含多个Haar特征。通过逐级过滤,cascade分类器可以有效地减少非目标区域的误检,同时保持对目标区域的高检测率。
-
训练:创建Haar-cascade分类器需要大量的正样本(包含目标的图像)和负样本(不包含目标的图像)。通过机器学习算法(如Adaboost),可以从这些样本中学习并生成一个有效的分类器。
OpenCV中的Haar人脸检测
在OpenCV中,Haar人脸检测功能通过CascadeClassifier
类实现。首先,需要加载预训练的Haar特征分类器XML文件,然后使用detectMultiScale
方法进行人脸检测。
1 import cv2 2 import numpy as np 3 4 5 def image_read_from_chinese_path(image_file_name): 6 image_numpy_data = cv2.imdecode(np.fromfile(image_file_name, dtype=np.uint8), 7 -1) # np.fromfile 读取图像文件,将其转换为 NumPy 数组 8 return image_numpy_data 9 10 11 # 级联分类器路径(训练器文件) 12 face_cascade = cv2.CascadeClassifier( 13 r'C:\Users\19225\PycharmProjects\test\src\user\static\haarcascade_frontalcatface.xml') # 人脸检测的 Haar 级联分类器XML 文件路径 14 eye_cascade = cv2.CascadeClassifier( 15 r'C:\Users\19225\PycharmProjects\test\src\user\static\haarcascade_eye_tree_eyeglasses.xml') 16 17 # 读取图像 18 img = image_read_from_chinese_path(r'C:\Users\19225\PycharmProjects\test\src\user\static\R.jpg') 19 20 if img is None: 21 print("Image not loaded correctly.") 22 else: 23 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转为灰度图 24 25 # 使用人脸检测器 face_cascade,在灰度图像中检测人脸 26 # scaleFactor:每次图像尺寸减少的比例,越小越快,检测效果越好 27 # minNeighbors:最少需要检测到多少个邻居,才能确定是人脸,值越大,检测精度越高 28 # minSize:检测到的对象的最小尺寸,单位为像素 29 faces = face_cascade.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=3, minSize=(30, 30), 30 flags=cv2.CASCADE_SCALE_IMAGE) 31 32 for (x, y, w, h) in faces: 33 img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2) 34 35 roi_gray = gray[y: y + h, x: x + w] 36 roi_color = img[y: y + h, x: x + w] 37 38 # 检测眼睛 39 eyes = eye_cascade.detectMultiScale(roi_gray, scaleFactor=1.1, minNeighbors=5, minSize=(15, 15)) 40 41 # 进行非极大值抑制 42 eyes = np.array(eyes) 43 if len(eyes) > 0: 44 boxes = [] 45 for (ex, ey, ew, eh) in eyes: 46 boxes.append((ex, ey, ew, eh)) 47 48 # 自定义合并重叠的框 49 boxes = np.array(boxes) 50 indices = cv2.dnn.NMSBoxes(boxes.tolist(), [1] * len(boxes), score_threshold=0.5, nms_threshold=0.4) 51 52 for i in indices: 53 i = i[0] # 如果是二维数组取第一个元素 54 ex, ey, ew, eh = boxes[i] 55 56 # 防止绘制重复的眼睛 57 cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 0, 255), 2) 58 print(f'Detected {len(eyes)} eyes in face') 59 print(f'Detected {len(faces)} faces') 60 61 label = f'OpenCV Haar Detected {str(len(faces))} faces' 62 cv2.putText(img, label, (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 1) 63 64 cv2.imshow('img', img) 65 cv2.waitKey(0) 66 cv2.destroyAllWindows()
总结
其实OpenCV中已经包含了许多预先训练好的Haar Cascades分类器,例如用于面部检测的haarcascade_frontalface_default.xml
,以及用于眼睛检测的haarcascade_eye.xml
。这些分类器可以用于快速识别图像或视频中的人脸和眼睛。
使用Haar Cascades进行对象检测的基本流程包括:
加载Haar Cascades分类器XML文件。
读取图像并将其转换为灰度图像,因为Haar Cascades主要在灰度图像上工作。
使用detectMultiScale函数在图像中检测对象。
根据检测结果在原始图像上绘制矩形框或其他标记。
Haar Cascades模型在训练过程中使用了大量的正负样本图像,并经过一系列的训练和验证,以达到较好的检测效果。每个模型都针对特定的目标或特征进行了训练,并具有其自己的应用场景。选择适当的模型取决于你的具体应用需求。
如果你需要进行特定的对象检测任务,例如检测猫脸、车牌或微笑等,OpenCV同样提供了相应的Haar Cascades模型。这些模型可能需要根据特定场景进行调整和优化,以提高检测的准确性和鲁棒性[1]。
总的来说,Haar Cascades是一个非常强大且灵活的工具,适用于各种实时对象检测任务,尤其是在计算机视觉和机器学习领域。
————————————————
原文链接:https://blog.csdn.net/yanceyxin/article/details/139726324
各种.xml文件说明
在OpenCV安装目录中,具体位置如下:opencv\build\etc\haarcascades(我是抠了其他作者下载在网盘里的xml文件,没下载opencv)
文件说明
1 haarcascade_eye.xml 2 3 是一个用于眼睛检测的Haar特征分类器模型,它是OpenCV库中用于目标检测任务的预训练级联分类器之一。这个XML文件包含了用于检测图像或视频中眼睛的模型参数。通过使用这个XML文件,可以快速实现人眼的自动检测功能。(我觉得检测不准确) 4 5 ------------------------------------------------------------------- 6 haarcascade_eye_tree_eyeglasses.xml 7 8 是OpenCV中用于眼睛检测的Haar Cascades分类器,特别适用于同时检测眼睛和眼镜。这个XML文件包含了训练好的模型参数,能够识别图像中的眼睛,即使眼睛上戴着眼镜也不会影响检测效果。 9 10 ------------------------------------------------------------------ 11 haarcascade_frontalcatface.xml 12 13 是 OpenCV 中用于猫脸检测的 Haar Cascades 分类器。这个 XML 文件包含了训练好的模型参数,专门用于识别图像中猫的面部特征。如果你正在开发一个应用程序,需要识别和处理猫的图像,这个分类器可以非常有用。 14 15 ----------------------------------------------------------------- 16 17 haarcascade_frontalcatface_extended.xml 18 19 是 OpenCV 中用于猫脸检测的扩展版 Haar Cascades 分类器。与基本的 haarcascade_frontalcatface.xml 相比,这个扩展模型可能经过了更多的训练,以提高在不同条件下猫脸检测的准确性和鲁棒性。它专门用于识别图像中猫的面部特征,尤其适用于更复杂或更具挑战性的场景。 20 21 ———————————————— 22 haarcascade_frontalface_alt.xml 23 24 是 OpenCV 中用于人脸检测的 Haar Cascades 分类器之一。它是一个预训练的模型,专门设计来识别图像中的人脸。与 OpenCV 中的默认人脸检测模型 haarcascade_frontalface_default.xml 相比,haarcascade_frontalface_alt.xml 通常在检测率上有所提升,但可能会牺牲一些误检率。 25 26 ———————————————— 27 haarcascade_frontalface_alt.xml 28 29 是 OpenCV 中用于人脸检测的 Haar Cascades 分类器之一。它是一个预训练的模型,专门设计来识别图像中的人脸。与 OpenCV 中的默认人脸检测模型 haarcascade_frontalface_default.xml 相比,haarcascade_frontalface_alt.xml 通常在检测率上有所提升,但可能会牺牲一些误检率。 30 31 ———————————————— 32 haarcascade_frontalface_alt_tree.xml 33 34 是 OpenCV 中用于人脸检测的另一种 Haar Cascades 分类器。这个分类器模型采用了基于树的分类器结构,它通过组合多个级联分类器来提高检测的准确性,特别是在复杂场景下。然而,这种基于树的方法可能会增加计算时间,因为它需要评估多个分类器。 35 36 --------------------------------------------------------------------------- 37 haarcascade_frontalface_alt2.xml 38 39 这个分类器是 haarcascade_frontalface_alt.xml 的改进版本,旨在保持较高的检测率的同时,尽可能减少误检测。它可能在平衡检测率和误检率方面提供了更好的性能。 40 41 -------------------------------------------------------------------------- 42 haarcascade_frontalface_default.xml 43 44 是一个用于OpenCV库的XML文件,它包含了一个预先训练好的Haar特征分类器,用于人脸检测。这个分类器可以识别图像中的人脸,是计算机视觉领域中常用的工具之一。如果你需要使用这个文件进行人脸检测,通常你需要将它加载到OpenCV程序中,然后使用它来处理图像数据。 45 46 47 ------------------------------------------------------------- 48 haarcascade_fullbody.xml 49 50 包含了一个预先训练好的Haar特征分类器,专门用于全身人体检测。这个分类器可以识别图像或视频中的整个人体,是计算机视觉领域中用于人体分析的常用工具之一。 51 52 ------------------------------------------ 53 haarcascade_lefteye_2splits.xml 54 55 是OpenCV中用于目标检测任务的级联分类器模型文件之一,专门用于检测图像或视频中的左眼 。这个XML文件包含了一个预先训练好的Haar特征分类器,可以识别和定位左眼的位置。 56 57 ------------------------------------------- 58 haarcascade_license_plate_rus_16stages.xml 59 60 是OpenCV中用于目标检测任务的级联分类器模型文件,专门用于检测俄罗斯车牌。这个XML文件包含了一个预先训练好的Haar特征分类器,可以识别和定位车牌的位置。 61 62 --------------------------------------------- 63 haarcascade_lowerbody.xml 64 65 是OpenCV中用于目标检测任务的级联分类器模型文件,专门用于检测图像或视频中的下半身人体,例如腿部。这个XML文件包含了一个预先训练好的Haar特征分类器,可以识别和定位下半身人体的位置。 66 67 ----------------------------------------------- 68 haarcascade_profileface.xml 69 70 是OpenCV中用于目标检测任务的级联分类器模型文件,专门用于检测图像或视频中的侧脸。这个XML文件包含了一个预先训练好的Haar特征分类器,可以识别和定位侧脸的位置。 71 72 73 --------------------------------------- 74 haarcascade_righteye_2splits.xml 75 76 是OpenCV中用于目标检测任务的级联分类器模型文件,专门用于检测图像或视频中的右眼。这个XML文件包含了一个预先训练好的Haar特征分类器,可以识别和定位右眼的位置。这种分类器通常用于面部识别、情绪分析、用户界面和安全系统等应用中。 77 78 --------------------------------------- 79 haarcascade_russian_plate_number.xml 80 81 是一个用于OpenCV的XML文件,它包含了一个预先训练好的Haar特征分类器,专门用于检测俄罗斯车牌号码。这个分类器可以识别图像或视频中的车牌,并在检测到的车牌区域绘制矩形标记。 82 83 ---------------------------------- 84 haarcascade_smile.xml 85 86 是OpenCV中用于目标检测任务的级联分类器模型文件,专门用于检测图像或视频中的微笑。这个XML文件包含了一个预先训练好的Haar特征分类器,可以识别和定位人脸上微笑的表情。 87 88 ---------------------------------- 89 haarcascade_upperbody.xml 90 91 是OpenCV中用于目标检测任务的级联分类器模型文件,专门用于检测图像或视频中的上半身人体,例如头部和肩部。这个XML文件包含了一个预先训练好的Haar特征分类器,可以识别和定位上半身人体的位置。
标签:xml,haarcascade,cascade,Haar,检测,分类器,OpenCV From: https://www.cnblogs.com/liuliu1/p/18574885