python opencv 级联Haar多目标检测

news2024/11/24 9:25:49

一、基于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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jenkins (一)

Jenkins (一) Docker Jenkins 部署 一. 安装 jenkins $ mkdir -p /home/tester/data/docker/jenkins $ vim jenkins:lts-jdk11.sh./jenkins:lts-jdk11.sh 内容 #! /bin/bash mkdir -p /home/tester/data/docker/jenkins/jenkins_homesudo chown -R 1000:1000 /home/tester/da…

利用LightHouse进行合理的页面性能优化,看这一篇就够了!

利用LightHouse进行合理的页面性能优化,看这一篇就够了! 前言一. Lighthouse下载1.1 相关指标概念1.2 Lighthouse 优化建议 二. 跟着 Lighthouse 进行性能优化2.1 Enable text compression 开启文本压缩2.2 Resize images 重新设定合适大小的图片2.3 Eli…

Java阶段五Day08

Java阶段五Day08 文章目录 Java阶段五Day08内容回顾学习内容目的自动配置原理SPI-API:一对类似的概念 自定义Starter属性配置问题 网关组件SpringCloud Gateway网关架构微服务网关介绍Spring Cloud Gateway(技术选型)网关转发入门案例明确案例需求实现案…

学习系统编程No.31【多线程互斥与同步】

引言: 北京时间:2023/7/16/14:32,摆烂至今,在耍这方面,谁能比我行,哈哈哈,乐观!欠了一堆课要补,等我们把线程相关知识学完,对于系统编程方面我们搞定的就差不…

二分类结局变量Logistic回归临床模型预测——分训练集和测试集(完结)

1. 介绍 2. 基线特征 3. 单因素多因素logistic回归分析及三线表 4. 构建临床列线图模型 5. 模型评价 6. 外部数据集验证 7. 另一种发文章的办法,分训练集和测试集,分析上述3-6节的内容 这里就讲一下如何分训练集和测试集,其余的步骤和之前是一样的,分训练集和测试集用…

Fiddler网络调试器,抓包工具供大家学习研究参考

Fiddler 是一个 http 协议调试代{过}{滤}理工具,它能够记录并检查所有你的电脑和互联网之间的 http 通讯,设置断 点,查看所有的“进出”Fiddler 的数据(指 cookiehtmljscss等文件)。 Fiddler 要比其他的网络调试器要更加简单,因为…

从Vue2到Vue3【零】——Vue3简介

系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介及创建 文章目录 系列文章目录前言一、Vue3的发布带来了什么1.1 性能提升1.2 源码升级1.3 支持TypeScript1.4 新特性1.5 支持 vue3 的UI组件库 二、创建Vue3.0工程2.1 什么是Vite2.2 利用Vite创建Vue3.0工程2.3 利用vue-cli脚…

下载最新版 VC_redist.x86.exe / VC_redist.x64.exe for Visual Studio 2015, 2017, 2019, and 2022

目录 1、如何处理程序需要的C/C运行时库? 2、VC_redist.x64.exe的主界面以及支持的命令行参数 3、到微软官网上下载最新版本的VC_redist.x86.exe / VC_redist.x64.exe VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...&a…

总结几个GPT的超实用之处【附带Python案例】

GPT(Generative Pre-trained Transformer)是人工智能领域中最受欢迎的预训练语言模型之一,由OpenAI开发。该模型使用深度学习技术,可以自动生成各种文本,如文章、日记、小说等。GPT的超实用之处有很多,下面…

【Ubuntu 20.04LTS系统】安装CUDA11.8、cuDNN,可进行CUDA版本切换

Ubuntu 20.04LTS系统安装CUDA11.8、cuDNN,可进行CUDA版本切换 1. 更改为清华源并更新软件列表和依赖项2. 安装CUDA3. 安装cuDNN4. CUDA版本切换 1. 更改为清华源并更新软件列表和依赖项 https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ # 默认注释了源码镜像以提…

java项目之毕业生就业信息管理系统(ssm+mysql+jsp)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的毕业生就业信息管理系统。技术交流和部署相关看文章末尾! 开发环境: 后端: 开发语言:Java …

哇~真的是你呀!今天是LINUX中的SSH服务。

目录 前言 一、概述 二、身份验证机制及验证过程 三、加密机制 四、基本参数 五、基本操作 六、操作 前言 SSH(Secure Shell)是一种加密网络协议,用于远程登录和安全传输数据。在Linux系统中,SSH服务是一种常见的远程管理工具&am…

python copy.copy与copy.deepcopy 区别

结论 b a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。 b copy.deepcopy(a): 深拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。 import copy origin [1, 2, [3, 4]]…

CS拒绝连接,Cobalt Strike连接失败,Cobalt Strike使用方法(二)

本文主要介绍Cobalt Strike的界面及使用方法。 界面 菜单介绍 Cobalt Strike New Connection // 新建连接,可连接多个服务器端 Preferences // 设置Cobal Strike界面、控制台、以及输出报告样式、TeamServer连接记录 Visualization // 主要展…

精益生产有哪些管理工具?

精益生产有哪些管理工具? 一、什么是精益生产 智能制造是落实我国制造强国战略的重要举措,加快推进智能制造,是加速我国工业化和信息化深度融合、推动制造业供给侧结构性改革的重要着力点,对重塑我国制造业竞争新优势具有重要意义…

java项目---2048

目录 游戏介绍 游戏玩法 全代码 (1)Main类: (2)GamePanel类 (3)Card类 (4)GameFrame类 项目设计思路 1.绘制一个窗口 2.创建菜单 3.创建所有空白卡片 &…

项目经理在日常管理工作中需要注意什么?

项目管理的核心在于以项目经理为主导的团队协作,项目经理需要管理团队成员,保障团队的产出和效能。因此,项目经理需要具备多种能力,如沟通能力、管理能力、洞察人心的能力等,才能有效推动项目进展。 1、制定计划是项…

如何更改idea的背景,以及显示某些属性

idea项目无法正常显示的问题 在idea中右侧的属性都不存在的解决方法,或左边的不显示,我浏览了很多的文章才找到的解决办法,在这里分享给大家 就可以显示出来了,因为我原来已经显示了,当我取消后就看不到了 修改背景 1.先进入到设置的页面 选择完成后点击ok把设置关了就设置成功…

Java开发 - 深入理解Redis哨兵机制原理

前言 Redis的主从、哨兵模式、集群模式,在前文中都已经有了详细的搭建流程,可谓是手把手教程,也得到了很多朋友的喜欢。由于前文偏向于应用方面,就导致了理论知识的匮乏,我们可能会用了,但却不明所以&…

基于STM32的homeassistant(采用FreeRTOS操作系统)【第三章:HA服务器搭建、数据展示】

第三章开发环境 硬件设备STM32与各类传感器(与前两章一致)服务器设备腾讯云(阿里云等云服务器或自建服务器端均可)移植环境Homeassistant、EMQ 具体实现方案 视频教程 homeassistant配置MQTT集成以及传感器实体(ST…