python opencv 级联Haar多目标检测

一、基于OpenCV的haar分类器实现笑脸检测
1、Haar分类器介绍
🚀Haar分类器是一种基于机器学习的目标检测算法,它使用Haar特征描述图像中的目标。Haar特征是基于图像亮度的局部差异计算得出的,可以用来描述目标的边缘、角落和线条等特征。

在这里插入图片描述

使用Haar分类器进行目标检测的步骤大致如下:

🍎收集训练数据:需要大量包含目标的正样本图像和不包含目标的负样本图像。
🍌提取Haar特征:使用OpenCV等图像处理工具提取每个样本图像的Haar特征,并将其保存为向量形式。
🚗训练分类器:使用机器学习算法(如Adaboost)训练Haar分类器,使其能够准确地区分包含目标的图像和不包含目标的图像。opencv训练自己的xml分类器以及如何获取opencv_createsamples.exe和opencv_traincascade.exe_Lizaozao96的博客-CSDN博客
🍊目标检测:使用训练好的Haar分类器对新的图像进行检测。首先在图像中使用滑动窗口将图像划分为小块,在每个小块上使用分类器进行分类,如果检测到包含目标的区域,则将其输出为检测结果。

我们可以调用OpenCV训练好的分类器和自带的检测函数检测人脸、人眼等。
2、haar分类器的静态使用(处理图片)
首先只需要安装cv2的库就能玩啦~

pip install opencv-python

在以下代码中,我们首先加载了一个已经训练好的Haar分类器(这里使用的是检测人脸的分类器),然后将待检测的图像转换为灰度图像,并使用detectMultiScale方法对图像进行目标检测。如果检测到目标,则在目标所在位置绘制一个矩形框,并显示检测结果。
 

import cv2

# 加载分类器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 加载图像
img = cv2.imread('lena.jpg')

# 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 使用分类器进行人脸检测
faces = face_cascade.detectMultiScale(gray, 1.3, 5)

# 在检测到的人脸上绘制矩形框
for (x,y,w,h) in faces:
    cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)

# 显示检测结果
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uzjjmNT0-1683374335111)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230506192325795.png)]


以上就为对lena"长老"的图片简单操作。调用了 haarcascade_frontalface_default.xml模型文件实现了人脸框检测。

3、haar分类器的动态使用(对摄像头视频进行处理)
首先我们需要准备三个文件,分别是 'haarcascade_frontalface_default.xml、 haarcascade_eye.xml和 haarcascade_smile.xml分别用来识别人脸、眼睛和笑容。

可以使用上述代码的加载分类器方式,也可以将cv2包里面的模型文件拿出来供我们复用,这里我使用的是虚拟环境,haar的一系列模型文件都在 venv\Lib\site-packages\cv2\data目录下。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DVjKcfgz-1683374335111)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230506194047042.png)]

接下来我用直接传入模型文件的方式来使用这三个方法(画出脸框、眼眶和嘴框),并结合电脑摄像头,代码如下:

import cv2

haar_front_face_xml = 'haarcascade_frontalface_default.xml'
haar_eye_xml = 'haarcascade_eye.xml'
smileharr = 'haarcascade_smile.xml'


# 视频中的人脸检测
def DynamicDetect():
    '''
    打开摄像头,读取帧,检测帧中的人脸,扫描检测到的人脸中的眼睛,对⼈脸绘制蓝蓝色的矩形框,对人眼和笑绘制绿⾊的矩形框
    '''
    # 创建3个级联分类器 加载3个 .xml 分类器⽂件
    face_cascade = cv2.CascadeClassifier(haar_front_face_xml)
    eye_cascade = cv2.CascadeClassifier(haar_eye_xml)
    smile_cascade = cv2.CascadeClassifier(smileharr)
    # 打开摄像头
    camera = cv2.VideoCapture(0)
    cv2.namedWindow('Dynamic')
    while True:
        # 读取1帧图像
        ret, frame = camera.read()
        # 判断图片读取成功?
        if ret:
            gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 人脸检测
        faces = face_cascade.detectMultiScale(gray_img, 1.3, 5)
        for (x, y, w, h) in faces:
            # 在原图像上绘制矩形
            cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
            roi_gray = gray_img[y:y + h, x:x + w]
            # 眼睛和笑脸检测
            eyes = eye_cascade.detectMultiScale(roi_gray, 1.03, 5, 0, (40, 40))
            smile = smile_cascade.detectMultiScale(roi_gray, 1.03, 5, 0, (40, 40))
            for (ex, ey, ew, eh) in eyes:
                cv2.rectangle(frame, (ex + x, ey + y), (x + ex + ew, y + ey + eh), (0, 255, 0), 2)
            for (sx, sy, sw, sh) in smile:
                cv2.rectangle(frame, (sx + x, sy + y), (x + sx + sw, y + sy + sh), (0, 255, 0), 2)
        cv2.imshow('Dynamic', frame)
        # 如果按下q键则退出
        if cv2.waitKey(100) & 0xff == ord('q'):
            break
    camera.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    DynamicDetect()

————————————————
 https://blog.csdn.net/tianhai12/article/details/130534551

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/39043.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型开发(七):LLM提示工程(Prompt)与思维链(CoT)

全文共6500余字,预计阅读时间约13~20分钟 | 满满干货(附案例),建议收藏! 一、LLM模型的涌现能力 在GPT没有爆火之前,一直以来的共识都是:模型的规模越大,模型在下游任务上的能力越多、越强。 LLM原始训…

QT_Creator格式化工具使用

QT_Creator代码格式化工具使用 为了确保代码格式整齐统一,使用代码格式化工具会将写的代码自动格式化以保证格式统一 Astyle: A Free, Fast, and Small Automatic Formatter for C, C, C/CLI, Objective-C, C#, and Java Source Code 一、C和C代码格式化…

Ceph 服务的运用

目录 一、资源池 pool 管理 1.创建一个 Pool 资源池 2.查看集群 Pool 信息 3.查看资源池副本的数量 4.查看 PG 和 PGP 数量 5.修改 pg_num 和 pgp_num 的数量为 128 6.修改 Pool 副本数量为 2 7.修改默认副本数为 2 8.删除 Pool 资源池 8.1修改配置文件 8.2推送 ceph…

【半监督医学图像分割 2023 CVPR】PatchCL

文章目录 【半监督医学图像分割 2023 CVPR】PatchCL摘要1. 简介2. 相关工作2.1 半监督学习2.2 对比学习 3. 方法3.1 类感知补丁采样3.2 伪标记引导对比损失3.3 总体学习目标3.4 伪标号生成与求精 4. 实验5. 结果 【半监督医学图像分割 2023 CVPR】PatchCL 论文题目:…

MySQL操作库

MySQL操作库 一.创建数据库1. 创建数据库的方式2. 创建数据库时的编码问题3. 指定编码创建数据库4. 验证校验规则对数据库的影响 二.数据库与文件系统的关系三.操纵数据库1. 查看数据库2. 删除数据库3. 修改数据库 四.数据库的备份和恢复1.数据库的备份2.数据库的恢复 五.查看连…

OpenCV——总结《车牌识别》

1.图片中的hsv hsv提取蓝色部分 # hsv提取蓝色部分 def hsv_color_find(img):img_copy img.copy()cv2.imshow(img_copy, img_copy)"""提取图中的蓝色部分 hsv范围可以自行优化cv2.inRange()参数介绍:第一个参数:hsv指的是原图第二个参…

pytest 结合logging输出日志保存至文件

API_log.py import loggingclass loger():def logering(self):# 创建logger对象logger logging.getLogger(test_logger)# 设置日志等级logger.setLevel(logging.DEBUG)# 追加写入文件a ,设置utf-8编码防止中文写入乱码test_log logging.FileHandler(test.log, a,…

11、动手学深度学习——语言模型和数据集:代码详解

我们了解了如何将文本数据映射为词元,以及将这些词元可以视为一系列离散的观测,例如单词或字符。 假设长度为 T T T的文本序列中的词元依次为 x 1 , x 2 , … , x T x_1, x_2, \ldots, x_T x1​,x2​,…,xT​。于是, x t x_t xt​&#xff08…

初识C++(上)——“C++”

各位CSDN的uu们你们好呀,小雅兰的全新专栏又来啦,这次的专栏主要介绍的是C,下面,让我们进入C的世界吧!!! 什么是C C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的…

【MySQL】根据MVCC和Read View分析事务的四种隔离级别在读写场景分别是如何体现其隔离性的

目录 一、数据库并发的三种场景 二、读写场景的MVCC 1、3个(4个)记录隐藏列字段 2、undo log(撤销日志) 3、模拟MVCC场景 3.1update场景 3.2delete场景 3.3insert 3.4select场景 4、Read View 5、RR和RC的区别 5.1当…

AI制图工具丨Midjourney产品功能介绍

了解如何使用Discord上的Midjourney Bot通过简单的文本提示创建自定义图像 Midjourney是一款AI制图工具,只要关键字,就能透过AI算法生成相对应的图片,只需要不到一分钟。 可以选择不同画家的艺术风格,例如安迪华荷、达芬奇、达利…

H3C-Cloud Lab实验-OSPF配置实验

一、实验拓扑图 实验需求: 1、按照图示配置 IP 地址 2、按照图示分区域配置 OSPF ,实现全网互通 3、为了路由结构稳定,要求路由器使用环回口作为 Router-id,ABR 的环回口宣告进骨干区域 4、掌握OSPF初始化流程、路由表学习的过…

react和vue2/3父子组件的双向绑定

目录 Vue .sync(2.3.0) $emit (2.3后) 自定义组件的 v-model 2.2.0 v-modelemits(3.0取消了.sync) React 父组件回调函数 相关基础 框架 MVC (Model View Controller)/MVP(Model View…

西安丨高时空分辨率、高精度一体化预测技术之风、光、水能源自动化预测技术应用

目录 ​第一章 预测平台讲解及安装 第二章 一体化预测工具详解与数据获取及制备 第三章 风资源预测自动化技术 第四章 太阳能资源自动化预测技术 第五章 水资源自动化预测技术 第六章 后处理自动化技术 更多推荐 能源是国民经济发展和人民生活必须的重要物质基础。在过去…

大数据存储架构详解:数据仓库、数据集市、数据湖、数据网格、湖仓一体

前言 本文隶属于专栏《大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据理论体系 思维导图 数据仓库 数据仓库是一个面向主题的&…

Python自动化之pytest常用插件

目录 1、失败重跑 pytest-rerunfailures 2、多重校验 pytest-assume 3、设定执行顺序 pytest-ordering 4、用例依赖(pytest-dependency) 5.分布式测试(pytest-xdist) 6.生成报告(pytest-html) 1、失败重跑 pytest-rerunfailu…

华夏ERP在虚拟机Ubuntu上的安装(测试实例)

1.虚拟机软件VirtualBOX 7.0 2.Ubuntu 版本 3.宝塔面板安装 百度搜索宝塔面板,按官网提示进行安装。下面截图是官网示例。 if [ -f /usr/bin/curl ];then curl -sSO download.cnnbt.net/install_panel.sh;else wget -O install_panel.sh download.cnnbt.net/install…

EasyCVR告警类型设置后首页需要刷新才能更新的问题优化

EasyCVR视频融合平台基于云边端一体化架构,可支持多协议、多类型设备接入,包括:NVR、IPC、视频编码器、无人机、车载设备、智能手持终端、移动执法仪等。平台具有强大的数据接入、处理及分发能力,可在复杂的网络环境中&#xff0c…

【C++初阶】构造函数和析构函数

文章目录 一、类的六个默认成员函数二、构造函数三、析构函数 一、类的六个默认成员函数 📖默认成员函数 用户没有显式实现,编译器会自动生成的成员函数,称为默认成员函数。 构造函数:完成对象的初始化工作。析构函数&#xff…

动态sql语句

1.1 动态sql语句概述 Mybatis 的映射文件中&#xff0c;业务逻辑复杂时&#xff0c; SQL是动态变化的&#xff0c;此时在前面的学习中 SQL 就不能满足要求了。 参考的官方文档&#xff1a; 1.2 动态 SQL 之<if> 根据实体类的不同取值&#xff0c;使用不同的 SQL语句…