当前位置: 首页 > news >正文

使用Python,Opencv检测图像,视频中的猫

使用Python,Opencv检测图像,视频中的猫🐱

这篇博客将介绍如何使用Python,OpenCV库附带的默认Haar级联检测器来检测图像中的猫。同样的技术也可以应用于视频流。这些哈尔级联由约瑟夫·豪斯(Joseph Howse)训练并贡献给OpenCV项目。

虽然哈尔级联非常有用,但通常使用HOG+线性SVM,因为它更容易调整检测器参数,更重要的是可以享受更低的假阳性检测率。

在haarcscades目录中(OpenCV存储所有经过预训练的Haar分类器以检测各种对象、身体部位等模型)

  • haarcascade_frontalcatface.xml
  • haarcascade_frontalcatface_extended.xml
    这俩个模型用来检测图像中的“猫脸”;

1. 效果图

单猫检测图效果图如下:
在这里插入图片描述

多猫检测效果图如下:
可以看到有的并没有检测出来,优化可以用HOG+SVG检测模型;
在这里插入图片描述

2. 原理

2.1 opecv预置的模型

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

在这里插入图片描述

传奇人物约瑟夫·豪斯(Joseph Howse)对级联进行了培训,并将其贡献给了OpenCV存储库,他撰写了大量关于计算机视觉的教程、书籍和演讲。

2.2 cv2.CascadeClassifer & detector.detectMultiScale

  • cv2.CascadeClassifer从磁盘加载预先训练好的Haar级联检测器:
detector = cv2.CascadeClassifier(path)
  • detectMultiScale对其进行预测:
# gray 灰度图
# scaleFactor 检测猫脸时使用的图像金字塔的scaleFactor。更大的比例因子将提高检测器的速度,但可能会损害阳性检测精度。相反,较小的规模将减缓检测过程,但会增加阳性检测。然而,这种较小的尺度也会增加假阳性检测率。
# minNeighbors参数控制给定区域中检测到的边界框的最小数量,以将该区域视为“猫脸”。此参数在修剪假阳性检测时非常有用。
# minSize参数非常简单。该值确保每个检测到的边界框至少为宽度x高度像素(在本例中为75 x 75)。
# 返回值:矩形框列表,每一个是包含4个点的tuple
results = detector.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=5,minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE)
  • 注意,Haar级联按照您可能不喜欢的顺序返回边界框。 在这种情况下,中间的猫实际上被标记为第三只猫。可以通过根据边界框的(x,y)坐标对边界框进行排序来解决这个“问题”,以实现一致的排序。

  • 关于准确性的简要说明:在.xml文件的注释部分,Joseph Howe详细介绍了猫检测器Haar cascades可以在有人脸的地方报告猫的脸。在这种情况下,他建议同时执行面部检测和猫检测,然后丢弃与面部边界框重叠的任何猫边界框。

2.3 haar级联模型详解

保罗·维奥拉(Paul Viola)和迈克尔·琼斯(Michael Jones)于2001年首次发表了 《使用简单特征的增强级联快速目标检测》(Rapid Object Detection using a Boosted Cascade of Simple Features),这部原创作品已成为计算机视觉领域被引用最多的论文之一。

  • 该算法能够检测图像中的对象,而不管它们的位置和大小。该探测器可以在现代硬件上实时运行。

  • 维奥拉和琼斯专注于训练人脸检测器;然而,该框架也可用于训练检测器以识别任意“物体”,如汽车、香蕉、路标等。

  • Haar级联的最大问题是正确获取detectMultiScale参数,特别是scaleFactor和minNeighbors。很多情况需要逐个图像调整这两个参数的情况,这在使用对象检测器时远远不够理想。

    scaleFactor变量控制用于检测图像不同比例对象的图像金字塔。如果scaleFactor太大,那么将只评估图像金字塔的几个层,这可能会导致丢失位于金字塔层之间的比例的对象。
    如果将scaleFactor设置得太低,则会计算许多金字塔层。这将有助于检测图像中的更多对象,但它(1)使检测过程变慢,(2)大大提高了假阳性检测率,这是哈尔级联的著名之处。

  • 为了优化它的问题:通常使用定向梯度直方图+线性SVM检测。
    HOG+线性SVM框架参数通常更容易调整,最重要的是,HOG+线型SVM具有更小的假阳性检测率。唯一的缺点是很难让HOG+线性SVM实时运行。

3. 源码

# 使用Python,OpenCV库中的猫脸检测器对图片进行猫脸检测
# USAGE
# python cat_detector.py --image images/cat_01.jpg# 导入必要的包
import argparse
import cv2
import imutils# 构建命令行参数及解析
# -image 猫脸照片
# -cascade 模型文件路径
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,help="path to the input image")
ap.add_argument("-c", "--cascade",default="haarcascade_frontalcatface_extended.xml",help="path to cat detector haar cascade")
args = vars(ap.parse_args())# 加载图片,转化为灰度图
image = cv2.imread(args["image"])
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 加载猫脸级联检测器,然后检测猫脸
detector = cv2.CascadeClassifier(args["cascade"])
# gray 灰度图
# scaleFactor 检测猫脸时使用的图像金字塔的scaleFactor。更大的比例因子将提高检测器的速度,但可能会损害阳性检测精度。
# 相反,较小的规模将减缓检测过程,但会增加阳性检测。然而,这种较小的尺度也会增加假阳性检测率。
# minNeighbors参数控制给定区域中检测到的边界框的最小数量,以将该区域视为“猫脸”。此参数在修剪假阳性检测时非常有用。
# minSize参数非常简单。该值确保每个检测到的边界框至少为宽度x高度像素(在本例中为75 x 75)。
rects = detector.detectMultiScale(gray, scaleFactor=1.3,minNeighbors=10, minSize=(75, 75))
print(len(rects))# 遍历猫脸,并绘制矩形框
for (i, (x, y, w, h)) in enumerate(rects):cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)cv2.putText(image, "Cat #{}".format(i + 1), (x, y - 10),cv2.FONT_HERSHEY_SIMPLEX, 0.55, (0, 0, 255), 2)# 展示检测到的猫脸🐱
cv2.imshow("Cat Faces", imutils.resize(image,width=600))
cv2.waitKey(0)

参考

  • https://pyimagesearch.com/2016/06/20/detecting-cats-in-images-with-opencv/

相关文章:

使用Python,Opencv检测图像,视频中的猫

使用Python,Opencv检测图像,视频中的猫🐱 这篇博客将介绍如何使用Python,OpenCV库附带的默认Haar级联检测器来检测图像中的猫。同样的技术也可以应用于视频流。这些哈尔级联由约瑟夫豪斯(Joseph Howse)训练…...

浅谈域名和服务器集约化管理的误区

一个正常的网站通常由域名、网站程序、服务器三个部分组成,网站程序由单位开发设计,而域名和服务器则需要租用购买,那么域名和服务器之间的关系是什么?如何实现域名和服务器的有效管理呢? 服务器和域名的关系 服务器…...

迪赛智慧数——柱状图(正负条形图):20212022人才求职最关注的因素

效果图从近两年职场跳槽方向看,相比此前人们对高薪大厂趋之若鹜,如今职场人更关注业务前景。根据相关数据显示,职场人求职最关注的因素中,“薪资福利”权重下降,“个人发展”权重上升,“业务前景”首次进入…...

网络安全-黑帽白帽红客与网络安全法

网络安全-黑帽白帽红客与网络安全法 本章内容较少,因为刚开端。 黑客来源于hacker 指的是信息安全里面,能够自由出入对方系统,指的是擅长IT技术的电脑高手 黑帽黑客-坏蛋,研究木马的,找漏洞的,攻击网络或者…...

Xpath元素定位之同级节点,父节点,子节点

XPath学习:轴(8)——following-siblingXPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。推荐一个挺不错的网站:htt…...

华为OD机试 - 挑选字符串(Python)| 真题+思路+代码

挑选字符串 题目 给定 a-z,26 个英文字母小写字符串组成的字符串 A 和 B, 其中 A 可能存在重复字母,B 不会存在重复字母, 现从字符串 A 中按规则挑选一些字母可以组成字符串 B 挑选规则如下: 同一个位置的字母只能挑选一次, 被挑选字母的相对先后顺序不能被改变, 求最…...

python笔记-- “__del__”析构方法

-#### 1、基本概念(构造函数与析构函数) 特殊函数:由系统自动执行,在程序中不可显式地调用他们 构造函数: 建立对象时对对象的数据成员进行初始化(对象初始化) 析构函数: 对象生命期…...

支付系统核心架构设计思路(万能通用)

文章目录1. 支付系统总览核心系统交互业务图谱2. 核心系统解析交易核心交易核心基础交易类型抽象多表聚合 & 订单关联支付核心支付核心总览支付行为编排异常处理渠道网关资金核算3. 服务治理平台统一上下文数据一致性治理CAS校验幂等 & 异常补偿对账准实时对账DB拆分异…...

python实现mongdb的双活

如何用python实现mongdb的双活,两个数据库实时同步? 可以使用Pymongo库,它可以提供同步的API来实现MongoDB的双活,两个数据库实时同步。还可以使用MongoDB的复制集功能来进行实时同步。 Pymongo库提供什么同步的API来实现MongoD…...

LeetCode-110. 平衡二叉树

目录题目分析递归法题外话题目来源 110. 平衡二叉树 题目分析 平很二叉树:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 二叉树节点的深度和二叉树节点的高度 递归法 递归三步曲 1.明确递归函数的参数和返回值 参数:当前传入节点。 返回值…...

Python蓝桥杯训练:基本数据结构 [链表]

Python蓝桥杯训练:基本数据结构 [链表] 文章目录Python蓝桥杯训练:基本数据结构 [链表]一、链表理论基础知识二、有关链表的一些常见操作三、力扣上面一些有关链表的题目练习1、[移除链表元素](https://leetcode.cn/problems/remove-linked-list-element…...

华为OD机试 - 找字符(Python)| 真题+思路+代码

找字符 题目 给定两个字符串, 从字符串2中找出字符串1中的所有字符, 去重并按照 ASCII 码值从小到大排列。 输入 字符范围满足 ASCII 编码要求, 输入字符串1长度不超过1024, 字符串2长度不超过100。 输出描述 按照 ASCII 由小到大排序 示例一 输入 bach bbaaccddf…...

使用继承与派生的6大要点

概述 面向对象编程技术非常看重软件的可重用性,在C中,可重用性是通过继承机制来实现的。继承机制允许程序员在保持原有类的数据和功能的基础上进行扩展,增加新的数据和功能,从而构成一个新的类,也称为派生类。原有类&a…...

加一-力扣66-java高效方案

一、题目描述给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入:di…...

记一次 .NET 某游戏网站 CPU爆高分析

一:背景 1. 讲故事 这段时间经常有朋友微信上问我这个真实案例分析连载怎么不往下续了,关注我的朋友应该知道,我近二个月在研究 SQLSERVER,也写了十多篇文章,为什么要研究这东西呢? 是因为在 dump 中发现…...

集群使用——资源管理和租户创建

概述 OceanBase 数据库是多租户的分布式数据库,租户使用的资源建立在资源池上。资源池包含了资源单元,而资源单元则规定了具体资源的量化(如 CPU、Memory、Disk_Size 和 IOPS 等)。 创建租户前,必须规定租户使用的资源…...

谷歌浏览器登录失败,提示【无法同步到“...@gmail.com”】

首先安装Chrome同步助手(Chrome-Sync-Helper,看了很多博客,谷歌浏览器同步问题好像都要用这个),改成.rar,解压,文件夹_metadata重命名为metadata,然后添加到谷歌浏览器的扩展程序中。…...

75 111111

选择题(共75题,合计75.0分) 1. 选项ABCD中显示了所创造的商业价值以及在产品中实施各种功能需要进行的开发工作。团队应优先实施哪项功能? The business value created and the development effort needed to implement the various features in the product are sh…...

分销系统逻辑

相关概念 主营商户: 提供分销商品和佣金的商户分销商: 拥有自己的销售渠道,能够帮助推动产品销售的个人或商户消费者: 购买分销商品的人。佣金: 主营商户返还给经销商的比例抽成 分销功能设计 (1)分销商准入规则设计 无规则: 没有分销商的准入门槛限制&#xf…...

MySQL视图特性

文章目录MySQL视图特性基本使用准备测试表创建视图修改视图影响基表修改基表影响视图删除视图视图规则和限制MySQL视图特性 视图的概念 视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据。视图中的数据…...

RabbitMQ详解(二):Docker安装RabbitMQ

在Docker上安装部署RabbitMQ方便快捷,不需要额外安装Erlang环境,所以写该篇文章先来介绍如何在Docker上部署RabbitMQ。 一、安装并运行 (1)、在docker hub 中查找rabbitmq镜像 docker search rabbitmq:3.9.12-management带有“mangement”的版本&…...

如何使用代码注释:关于JavaScript与TypeScript 注释和文档的自动生成

如何使用代码注释:关于JavaScript与TypeScript 注释和文档的自动生成jcLee95:https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/detail…...

Echarts 设置面积区域图(areaStyle核心)

第011个点击查看专栏目录Echarts折线区域面积图的视觉效果更加饱满丰富,在系列不多的场景下尤其适用。区域面积图将折线到坐标轴的空间设置背景色,用区域面积表达数据。通过 areaStyle 设置折线图的填充区域样式,将其设为为 {} 表示使用默认…...

pandas——字符串处理【建议收藏】

pandas——字符串处理 作者:AOAIYI 创作不易,如果觉得文章不错或能帮助到你学习,记得点赞收藏评论一下哦 文章目录pandas——字符串处理一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.cat() 拼接字符串2.split()切片字符串…...

反射,枚举,lambda表达式

目录 1、反射 1.1 基本概念 1.2 反射相关的类 1.3 创建 Class 对象 1.4 反射的使用 1.4.1 通过反射创建对象: 1.4.2 获取私有的构造方法 1.4.3 获取私有的成员变量 1.4.4 获取私有的方法 1.5 总结 2、枚举 2.1 认识枚举 2.2 使用枚举 2.3 枚举与反射…...

.Net Core对于RabbitMQ封装分布式事件总线

首先我们需要了解到分布式事件总线是什么; 分布式事件总线是一种在分布式系统中提供事件通知、订阅和发布机制的技术。它允许多个组件或微服务之间的协作和通信,而无需直接耦合或了解彼此的实现细节。通过事件总线,组件或微服务可以通过发布…...

GPIO功能描述

GPIO 文章目录 GPIO1. 功能描述1.1 OSCI/OSCO 引脚1.3 HSEIN/HSEOUT引脚1.2 Bit-Band1.4 VRTCAFx引脚1.5 EWKUPx引脚1.6 QSPI0 引脚1.7 LVDIN引脚1.8 SARADC引脚1.9 ADCIN引脚2. 测试项描述2.1 PAD Location2.2 LBOR和BOR复位2.3 驱动能力2.4 模拟态\高阻态2.5 SWD\JTAG2.6 输出…...

指派问题与匈牙利法讲解

指派问题概述:实际中,会遇到这样的问题,有n项不同的任务,需要n个人分别完成其中的1项,每个人完成任务的时间不一样。于是就有一个问题,如何分配任务使得花费时间最少。通俗来讲,就是n*n矩阵中&a…...

day5——冒泡排序,选择排序和插入排序的学习

选择排序冒泡排序插入排序 选择排序 选择排序的基本思路就是: 首先假定第一个的下表为所有元素中最小的一个, 然后用后面的每一个元素跟这个元素进行比较, 如果后面的元素比这个元素更小一点, 那么就将找到的最小的元素的下标和…...

Windows 数据类型 (Windows Data Types)

参考:https://learn.microsoft.com/en-us/windows/win32/winprog/windows-data-types 要求 要求值最低受支持的客户端Windows XP [仅限桌面应用]最低受支持的服务器Windows Server 2003 [仅限桌面应用]HeaderBaseTsd.h;WinDef.h;WinNT.hAPIENTRY 系统函数的调用约…...

.net 大型网站开发/广州公关公司

机器学习(四)变量选择技术----------岭回归,Lasso 我们回顾一下之前线性回归模型里面的一元线性回归模型和多元线性回归模型,里面在谈论如何找到最佳系数时,使用的是最小二乘法,在这里我们先把多元线性回归的最小二乘解简化表达一…...

wordpress仿qq空间/大二网络营销实训报告

一、前端页面 1.下载jquery.uploadify 去uploadify官网&#xff08;http://www.uploadify.com/download/ &#xff09;下载压缩包&#xff0c;解压后放在如下路径&#xff1a; 2.html结构 form表单的上传控件部分&#xff1a; <div class"control-group"><l…...

奉节网站建设/b2b网站排名

Java Web应用中调优线程池的重要性不论你是否关注&#xff0c;Java Web应用都或多或少的使用了线程池来处理请求。线程池的实现细节可能会被忽视&#xff0c;但是有关于线程池的使用和调优迟早是需要了解的。本文主要介绍Java线程池的使用和如何正确的配置线程池。单线程我们先…...

有哪些专门做写字楼的网站/网络优化的内容包括哪些

C语言的一本經典教材内容&#xff0c;是以FAQ的方式得出495个C语言易错误的事例&#xff0c;很合适学习培训和招聘面试用&#xff0c;这书构造清楚&#xff0c;解读深入&#xff0c;是各高等院校有关技术专业C语言课程内容非常好的课堂教学教材&#xff0c;也是核心层C语言程序…...

什么网站做视频最赚钱/域名查询官网

之前介绍了BLOCK层和SCSI层代码&#xff0c;后面准备将LIBSAS/SAS驱动代码作简单介绍。 再次搬出存储框架图&#xff0c;LIBSAS代码在SCSI层代码以下&#xff0c;像HISI_SAS驱动和MVSAS驱动采用 LIBSAS框架&#xff1a; 在SCSI框架下可以直接定义SCSI驱动来适配硬件&#xff0c…...

软装公司网站建设/网络营销推广计划书

一、前言 接着前面的《Mybatis中的执行器Executor&#xff08;一&#xff09;》继续分析学习Executor。在分析BatchExecutor类之前&#xff0c;先了解一下JDBC的批处理相关知识。 二、JDBC批处理 批量处理允许将相关的SQL语句分组到批处理中&#xff0c;并通过对数据库的一次…...