手工特征目标检测(1)级联目标检测器

级联目标检测:构建高效目标识别的多阶段策略 级联目标检测通过多个检测器的级联来逐步提高检测精度,每个检测器专注于不同的检测任务。 阅读详情

在前面的博文主要是以模板匹配、颜色等像素级的目标特征为基础,描述如何进行目标检测。由于深度学习类算法的蓬勃发展,这些算法在实际应用中,除了在一些特殊的应用场景之外,已经很少见到了。但是,为了能够完整地讲叙目标检测的发展历程,还是稍费口舌进行叙述。从本篇开始,从像素级的目标检测,进入手工特征的目标检测阶段。
手工特征目标检测,是相对于基于机器学习的目标检测的概念。通俗地说,手工特征是指人为的设计一种方法或者算法,从像素级特征的基础上提取特征。例如:haar特征、LBP特征、HOG特征。反过来,如果是基于机器学习的目标特征,是指设计一种可训练或者可学习的模型,经过大量数据的训练,让模型自己可以从像素级特征得到更高层次的特征,更适用于目标检测任务。最典型的是,基于深度卷积网络的目标检测模型的backbone(特征提取模型)。

1 级联检测器

级联检测器是由多个分类器分级构成的,每一个分类器负责判断某个特征是否存在。当对某个区域进行检测时,如果某一级分类器负责的特征检测结果是存在,则会将该区域送入下一级分类器进行特征检测,逐级检测最终输出结果。如果某一级分类器负责的特征检测结果是不存在,则直接判定该区域不是待检测目标。用白话来说就是,类似于净水器的工作原理。一层有一层的过滤掉背景,剩下的就是目标了。每一层都是一个简单的分类器(弱分类器),联合很多的弱分类器,就可以形成一个强分类器。
在这里插入图片描述

2 VJ人脸检测器

科研工作者Paul Viola和Michael Jones设计了出了一个快速而准确的人脸检测器:在获得相同甚至更好准确度的同时,速度提升了几十上百倍——在当时的硬件条件下达到了每秒处理15张图像的速度,已经接近实时速度25fps(即25帧每秒)。这不仅是人脸检测技术发展的一个里程碑,也标志着计算机视觉领域的研究成果开始具备投入实际应用的能力。为了纪念这一工作,人们将这个人脸检测器用两位科研工作者的名字命名,称之为Viola-Jones人脸检测器,或者简称为VJ人脸检测器。

3 opencv的人脸检测器

opencv视觉算法库从1.0的版本就引进了Viola-Jones人脸检测器这套算法,并在历年的版本中当作默认的人脸检测器。下面,我们以python代码演示下,如何调用。

import cv2
import tkinter as tk
from tkinter import filedialog


def img_test():
    # 获取选择文件路径
    # 实例化
    root = tk.Tk()
    root.withdraw()
    # 获取文件或文件夹的绝对路径路径
    return filedialog.askopenfilename()


def haar_detection():
    face_path = 'haarcascades\\haarcascade_frontalface_default.xml'
    eye_path = 'haarcascades\\haarcascade_eye.xml'
    smile_path = 'haarcascades\\haarcascade_smile.xml'
    diction = {'face': face_path, 'eye': eye_path, 'smile': smile_path}
    for i in diction:
        diction[i] = cv2.CascadeClassifier(diction[i])
    return diction


def image_detection(img, detection):
    image_gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)
    face_ret = detection['face'].detectMultiScale(image_gray, scaleFactor=1.02, minNeighbors=5, minSize=(15, 15),
                                                  maxSize=(50, 50), flags=cv2.CASCADE_DO_CANNY_PRUNING)
    if len(face_ret) != 0:
        for (x, y, w, h) in face_ret:
            face_roi = image_gray[y:y + h, x:x + w]
            eye_ret = detection['eye'].detectMultiScale(face_roi, scaleFactor=1.1, minNeighbors=3, minSize=(15, 15),
                                                        flags=cv2.CASCADE_SCALE_IMAGE)
            smile_ret = detection['smile'].detectMultiScale(face_roi, scaleFactor=1.1, minNeighbors=3, minSize=(15, 15),
                                                            flags=cv2.CASCADE_SCALE_IMAGE)
            for (xx, yy, ww, hh) in eye_ret:
                pt1 = (x + xx, y + yy)
                pt2 = (pt1[0]+ww, pt1[1]+hh)
                cv2.rectangle(img, pt1, pt2, (255, 0, 0), 2)
            for (xx, yy, ww, hh) in smile_ret:
                pt1 = (x + xx, y + yy)
                pt2 = (pt1[0]+ww, pt1[1]+hh)
                cv2.rectangle(img, pt1, pt2, (0, 255, 0), 2)
            cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
        print('图像中有人脸')
    else:
        print('图像中无人脸')

    return img


if __name__ == '__main__':
    image = cv2.imread('image\\icon.jpg')
    cv2.namedWindow('Press q to exit and n to load the next picture', cv2.WINDOW_NORMAL)
    cv2.imshow('Press q to exit and n to load the next picture', image)
    while 1:
        k = cv2.waitKey()
        if k == ord('n'):
            image = cv2.imread(img_test())
            detector = haar_detection()
            image = image_detection(image, detector)
            cv2.imshow('Press q to exit and n to load the next picture', image)
        elif k == ord('q'):
            break
    cv2.destroyAllWindows()

在这里插入图片描述

opencv中内置了已经训练好的级联人脸、眼睛、嘴部等检测器,以.XML格式存储,可以将它们应用于图片及实时视频流的检测。
haarcascade_frontalface_default.xml:检测面部
haarcascade_eye.xml:检测左眼和右眼
haarcascade_smile.xml:检测面部是否存在嘴部
haarcascade_eye_tree_eyeglasses.xml:检测是否带墨镜
haarcascade_frontalcatface.xml:检测猫脸
haarcascade_frontalcatface_extended.xml:检测猫脸延伸
haarcascade_frontalface_alt.xml:检测人脸属性
haarcascade_frontalface_alt_tree.xml
haarcascade_frontalface_alt2.xml
haarcascade_fullbody.xml:检测全身
haarcascade_lefteye_2splits.xml:检测左眼
haarcascade_licence_plate_rus_16stages.xml:检测证件
haarcascade_lowerbody.xml:检测下半身
haarcascade_profileface.xml
haarcascade_righteye_2splits.xml:检测右眼
haarcascade_russian_plate_number.xml:检测俄罗斯字母车牌号
haarcascade_upperbody.xml:检测上半身
opencv的人脸检测级联检测器是最稳定和准确的,但在许多情况下眼睛检测和嘴巴检测的效果要差上许多。如果要对眼睛和嘴巴进行检测,可以尝试python、dlib、opencv工作流,它的效果更好、速度更快。
Haar级联算法是OpenCV最流行的目标检测算法,主要优点是速度快,尽管许多算法(如HOG+线性SVM、SSDs、更快的R-CNN、YOLO等等)比Haar级联算法更精确。但如果需要纯粹的速度,就是无法打败OpenCV的Haar cascades。Haar级联的缺点是容易出现假阳性检测,应用于推理/检测时需要进行参数调整。

4 结束语

在没有GPU的年代,这些经典的检测器是CV算法工程师必备的技能。时过境迁,除了在一些特定的应用场景下,大部分情况下,都会选择基于深度学习方向的解决方案。虽然解决方案已经过时,但是,其中的算法理念还是值得借鉴和学习的。

遥感图像目标检测研究综述 阅读详情

相关推荐

论文笔记:Object Detection in 20 Years: A Surve(目标检测20年研究综述)

文章目录1、介绍2、目标检测的20年发展历程2.1、目标检测路线2.1.1、里程碑:传统检测器2.1.2、基于CNN的两阶段检测器2.1.3、基于CNN的单阶段检测器2.2、目标检测数据集和度量标准2.2.1、度量准则2.3、目标检测技术发展2.3.1、早期检测2.3.2、多尺度检测技术的发展2.3.3、边界框回归技术发展2.3.4、Context Priming2.3.5、非最大抑制2.3.6、...

牛顿爱吃香蕉的博客 5790

Haar特征和级联分类器目标检测介绍及应用

Haar特征和级联分类器是一种经典的目标检测算法,适用于检测物体在图像中的位置、大小和姿态等。本教程将详细介绍Haar特征和级联分类器的原理、实现和应用。

百年孤独百年的博客 1万+

【OpenCV】目标检测

3.3 基于深度学习的目标检测 (OpenCV 模块)传统的计算机视觉方法(如Haar/LBP级联和HOG+SVM)在许多特定场景下表现良好,但它们通常需要手工设计特征,并且在面对复杂环境、多样的目标姿态、光照变化和遮挡时,其性能往往会遇到瓶颈。深度学习,特别是卷积神经网络 (CNN),通过从数据中自动学习层次化的特征表示,彻底改变了目标检测领域,带来了前所未有的精度和鲁棒性。OpenCV 的 (Deep Neural Network) 模块提供了一个统一的接口,用于加载和运行在各种流行的深度学习框架(

宅男很神经 1481

opencv-haar分类器的基本使用

在opencv文件路径下,有着4个haar特征训练的级联分类器,借用官方文档的说明来简单解释下互相之间的区别Stump-based 20x20 gentle adaboost frontal face detector. This detector uses tree of stage classifiers instead of a cascade(该检测器使用阶段分类器树而不是级联)对于分类器的选择,可以简单的写一下代码,输入目标类图像,通过更改分类器地址,来简单选择需要的分类器。

渊兮湛兮 597

目标检测方法综述

千里之行,始于足下 只为记录一下自己的目标检测方面的笔记,纸质容易丢;同时,也是自己的第一篇博客,鬼知道应该怎么去写!努力吧,少年!!! 目标检测方法综述笔记 在过去的20年时间里,人们普遍认为,目标检测的发展大致经历了两个历史时期,分别是2014年以前的传统的目标检测时期和2014年以后的基于深度学习的目标检测时期。 1 传统目标检测 早期的目标检测大多是基于手工构建的。由于当时缺乏有效的图像表示,人们别无选择,只能设计复杂的特征表示,以及各种加速技术来用尽有限的计算资源。传统目标类别检测则通过使用 Ad

adsfdaskgjddd的博客 2652

基于Haar级联的猫脸检测器

通过加载训练好的分类器,并在图像上进行检测和标记,我们可以有效地检测和定位猫脸。猫脸检测是计算机视觉领域的一个重要任务,可以应用于许多应用程序,如猫脸识别、猫脸表情分析等。在本文中,我们将介绍如何使用OpenCV-Python库中的Haar级联算法来实现猫脸检测器,并提供相应的源代码。在上面的代码中,我们首先加载了一个训练好的Haar级联分类器,该分类器由OpenCV提供。然后,我们加载了一张包含猫的图像,并将其转换为灰度图像,因为Haar级联分类器需要在灰度图像上进行检测。函数在灰度图像中检测猫脸。

JieLun_C的博客 260

目标检测算法国内外研究现状综述

结合图1.1可以看到,近20年来目标检测领域的技术路线主要可分为两个阶段,即以传统检测方法为主的第一阶段,以及基于深度学习的第二阶段。为了完整阐述目标检测技术路线的演变过程,下面将按照这两个阶段以及第二阶段中的分类情况顺序介绍相关算法的特点。需要注意的是,在本节中出现的mAP(mean Average Precision),即平均精度,均为mAP50。图1.1 目标检测算法近20年来发展路线图。

Joejwu的博客 2万+

使用OpenCV,Haar级联检测器进行面部、眼睛、嘴部检测

这篇博客将介绍如何使用预训练好的OpenCV Haar级联人脸、眼睛、嘴部检测器,并将它们应用于实时视频流。 人脸检测结果是最稳定和准确的。不幸的是,在许多情况下,眼睛检测和嘴巴检测结果是不可用的——对于面部特征/部分提取,强烈建议[使用python,dlib,OpenCV提取眼睛,鼻子,嘴唇及下颌](https://blog.youkuaiyun.com/qq_40985985/article/details/106136330),dlib的检测要比眼睛Haar级联,嘴巴Haar级联本身更稳定,甚至更快。

qq_40985985的博客 2万+

目标检测综述

目标检测综述

Fantastic 8799

(2-2)目标检测和识别:传统的目标检测方法

(2)现在开始训练模型,在本算法中可以设置多个参数,在shape_predictor_trainer的文档中说明了这些参数的含义,在Kazemi的论文中也详细解释了各个参数。这样设置的原因是,本实例用到的只是一个非常小的数据集。此外,如果在一个大的人脸标记数据集上训练它,可以获得最好的结果,正如Kazemi的论文所示。传统的目标检测方法是指基于手工设计的特征提取器和机器学习算法,这些方法使用人工定义的特征,如Haar特征、HOG特征等,结合分类器(如支持向量机、AdaBoost等)来检测和分类目标。

码农三叔 3416

haarcascade_frontalface_alt_tree.xml

OpenCV支持的目标检测的方法是利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification)。注意,新版本的C++接口除了Haar特征以外也可以使用LBP特征。 先介绍一下相关的结构,级联分类器的计算特征值的基础类FeatureEvaluator,功能包括读操作read、复制clone、获得特征类型getFeatureType,分配图片分配窗口的操作setImage、setWindow,计算有序特征calcOrd,计算绝对特征calcCat,创建分类器特征的结构create函数。级联分类器类CascadeClassifier。

目标检测算法回顾之传统算法

基于传统的目标检测算法主要可以分为基于特征和基于分割两个方向。

xiaobaizaza_Ry的博客 1万+

Nornir自动化简单介绍-网络设备信息收集

作为网工,学会通过执行脚本,可以自动化的完成日常一些设备相关配置或信息收集等工作,可以说是事半功倍。 Nornir就是这样一个自动化网络运维工具。按照官网上的说明: Nornir是用python编写的自动化框架,可与python一起使用。Nornir旨在通过提供一个纯Python框架来解决这些问题。 详细参考: Github GitHub - nornir-automation/nornir: Pluggable multi-threaded framework with inventory .

Gun&rose 7806

目标检测二十年间的那些事儿——从传统方法到深度学习

本文转载自DeepBlue深兰科技。本文主要参考自文献[1]:Zhengxia Zou, Zhenwei Shi, Member, IEEE, Yuhong Guo, and Jiepi...

我爱计算机视觉 2839

具身智能落地实战:制造业、物流与电力的工业级方案设计

具身智能是一种融合感知、推理与物理执行的智能范式,其核心在于构建具备因果建模能力、多模态闭环反馈和实时动作规划的行动主体。区别于通用AI或传统自动化,它依托多模态大模型、高精度力觉/触觉传感及Sim2Real仿真技术,实现对真实物理环境的深度理解与自适应交互。技术价值体现在可解释性决策、毫秒级跨模态协同与零停机容错能力,已规模化应用于制造业质检、物流破损鉴定、电力绝缘子巡检等强约束工业场景。本文聚焦‘行业应用方案解决方案’这一高频搜索需求,系统拆解从工位筛选、分层架构设计到72小时现场交付的全链路工程方法论

weixin_30952479的博客 300

CanMV K230实战:用MicroPython玩转AI视觉识别(附完整代码)

本文详细介绍了如何使用MicroPython在CanMV K230开发板上实现AI视觉识别,包括环境搭建、摄像头配置、模型部署及优化技巧。通过实战案例(如智能门禁和工业分拣机器人),展示如何快速开发低门槛的嵌入式AI应用,特别适合初学者和嵌入式开发者。

x8y9z0的博客 1144

目标检测的二十年发展史—从传统方法到深度学习

点击上方,选择星标或置顶,不定期资源大放送!阅读大概需要15分钟Follow小博主,每天更新前沿干货本文转载自DeepBlue深兰科技本文主要参考自文献[1]:Zhengxia Zou,...

深度学习技术前沿 5256

华为防火墙双线路配置实战:5分钟搞定主备自动切换(含健康检查避坑指南)

本文详细介绍了华为防火墙双线路配置实战,包括主备自动切换和健康检查机制的优化技巧。通过智能健康检查机制,华为防火墙能实现毫秒级故障自动切换,确保网络高可用性。文章提供了从架构设计到实战配置的全流程指南,并分享了常见配置误区与解决方案,帮助中小企业快速搭建稳定可靠的网络架构。

weixin_30872337的博客 605

目标检测20年综述之(一)

目标检测20年综述 本文是一篇综述的阅读笔记:《Object Detection in 20 Years: A Survey》 介绍历史上的里程碑检测器、检测数据集、评价指标、检测系统的基本构件、加速技术,以及最新最先进的检测方法。本文还综述了行人检测、人脸检测、文本检测等重要的检测应用,并对其面临的挑战以及近年来的技术进步进行了深入分析。 1. Introduction 目标检测解决什么问题? ...

公众号/知乎: AI算法札记,欢迎关注交流 1321

Investigating Bi-Level Optimization for Learning and Vision from a Unified Perspective: A Survey and

文章首先从双层优化的角度统一表示了超参数优化、多任务和元学习等复杂学习和视觉问题,建立了一个基于最佳响应的单层重构和一个统一的算法框架,来制定一个基于梯度的双层优化方法,最后讨论了该框架的潜力和未来研究方向。...

dawnyi_yang的博客 1110

Mac新手必看:用Homebrew安装wget的保姆级教程,附常见报错一键修复

本文为Mac新手提供使用Homebrew安装wget的详细教程,涵盖从Homebrew安装到wget基础使用的全流程,并附常见报错一键修复方案。通过本指南,用户可轻松掌握命令行下载工具wget的安装与使用技巧,解决Mac环境下资源下载的各种问题。

weixin_30635053的博客 367

关于目标检测的那些事儿(1) —— 二十年发展史 ^_^

目标检测是当前计算机视觉和机器学习领域的研究热点。从Viola-Jones Detector、DPM等冷兵器时代的智慧到当今RCNN、YOLO等深度学习土壤孕育下的GPU暴力美学,整个目标检测的发展可谓是计算机视觉领域的一部浓缩史。 简要概括下从1994到至今一共二十余年间目标检测的发展历程。 先看一张图:。。。。。。。 一、基于经典手工特征的目标检测算法(冷兵器时代的智慧) 早期的...

fsjdgfcuvb的博客 2179

嵌入式Linux&Android开发-TP调试

目录 一、修改DTS,添加新的I2C设备 二、修改Makefile,Kconfig 三、tp调试时的问题排查 一、修改DTS,添加新的I2C设备 &i2c4 { status = "okay"; clock-frequency = <400000>; gslX680@40 { compatible = "gslX680"; reg = <0x40>; touch-gpio = <&gp

嵌入式成长手册 572

【目标检测】目标检测究竟发展到了什么程度?聊聊这22年!

【目标检测】目标检测究竟发展到了什么程度?聊聊这22年!

wzk4869的博客 1万+

2026年沐曦集成电路数字IC笔试试卷带答案

本文摘要: 这是一份数字IC设计笔试模拟题,包含单选题、波形分析、多选题和代码设计题。重点考察ASIC设计流程(如逻辑综合将RTL转为门级网表)、时序分析(建立时间余量计算)、跨时钟域处理(格雷码应用)、复位机制、状态机设计等核心知识点。涉及沐曦特色考点如GPU架构(SIMT模型)、国产GPU芯片(曦云C系列)及MXMACA软件栈。代码题要求实现50%占空比三分频电路,综合考察Verilog设计能力。试题强调PPA优化、低功耗技术等工程实践要点,覆盖数字IC前端设计全流程核心内容。(149字)

Open 260

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 如何编写计算机视觉类算法设计报告?
下一篇: 手工特征目标检测(2)SVM+HOG车牌检测
深图智能
博客等级 码龄3年 1036粉丝 91原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深图智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值