使用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)分销商准入规则设计 无规则: 没有分销商的准入门槛限制…...
MySQL视图特性
文章目录MySQL视图特性基本使用准备测试表创建视图修改视图影响基表修改基表影响视图删除视图视图规则和限制MySQL视图特性 视图的概念 视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据。视图中的数据…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
