使用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视图特性 视图的概念 视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据。视图中的数据…...
概率神经网络的分类预测:基于PNN网络的变压器故障诊断应用研究及对比实验(附Matlab源代码...
概率神经网络的分类预测 基于pnn网络变压器故障诊断 应用研究及对比实验 matlab源代码 代码有详细注释,完美运行变压器故障诊断这事儿听起来挺玄乎,但用概率神经网络(Probabilistic Neural Network)来处理就跟开挂似的。我最近在M…...
杰理之 使用触摸调试工具【篇】
...
告别每次手动连WiFi!NVIDIA Jetson NX保姆级无线网络配置与静态IP绑定教程
NVIDIA Jetson NX无线网络配置与静态IP绑定全攻略 刚拿到NVIDIA Jetson NX开发板的开发者们,是否还在为每次开机都要手动连接WiFi而烦恼?是否因为DHCP分配的IP地址频繁变动,导致SSH远程连接中断而抓狂?本文将彻底解决这两个痛点&a…...
基于Transformer架构解析:Nanbeige 4.1-3B 模型原理与性能调优
基于Transformer架构解析:Nanbeige 4.1-3B 模型原理与性能调优 最近在星图GPU平台上部署和测试Nanbeige 4.1-3B模型时,我发现很多朋友对Transformer架构的理解还停留在“听说过”的阶段,对模型参数、显存占用这些概念更是感到头疼。其实&…...
Lychee-Rerank与微信小程序结合:打造移动端智能文档搜索工具
Lychee-Rerank与微信小程序结合:打造移动端智能文档搜索工具 你有没有遇到过这种情况?在公司内部的小程序里想查个产品手册或者报销制度,输入关键词后,搜出来的结果要么完全不沾边,要么一大堆文件让你自己翻。明明知道…...
StructBERT模型本地部署详解:从GitHub克隆到服务启动
StructBERT模型本地部署详解:从GitHub克隆到服务启动 你是不是也遇到过这样的场景?手头有一堆文本,需要快速判断它们之间的相似度,比如检查文章是否重复、匹配用户查询、或者做智能问答。如果每次都调用云端API,不仅费…...
[搭建Web漏洞靶场:DVWA在CentOS上的部署]
//DVWA 是一个用来进行安全脆弱性鉴定的Web应用平台,可以手动调整靶机源代码的安全级别,包含暴力破解、命令行注入、跨站请求伪造、文件包含、文件上传、SQL注入、XSS等漏洞。(1)下载安装包通过网盘分享的文件:DVWA-ma…...
SAM-Audio多模态音频分离技术全解析:从原理到实践应用
SAM-Audio多模态音频分离技术全解析:从原理到实践应用 【免费下载链接】sam-audio The repository provides code for running inference with the Meta Segment Anything Audio Model (SAM-Audio), links for downloading the trained model checkpoints, and exam…...
解决MathType在Word中加载失败的终极指南:从运行时错误53到MathPage.WLL缺失
1. 遇到MathType加载失败时先别慌 最近有不少朋友在系统升级后遇到了MathType无法正常加载的问题。作为一个经常和公式打交道的科研狗,我完全理解这种崩溃感——论文deadline近在眼前,公式编辑器却罢工了。最常见的两种报错是:"Please r…...
OpenClaw+GLM-4-7-Flash科研助手:自动整理文献与生成综述
OpenClawGLM-4-7-Flash科研助手:自动整理文献与生成综述 1. 为什么需要自动化科研助手 作为一名经常需要阅读大量文献的研究者,我发现自己花费在文献整理上的时间越来越多。每次打开文件夹看到几十篇PDF文献时,那种"从哪里开始"的…...
