Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之四 简单行人人体检测效果

devtools/2024/9/18 23:23:53/ 标签: python, opencv, 图像处理, 人体检测, 视频处理

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之四 简单行人人体检测效果

目录

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之四 简单行人人体检测效果

一、简单介绍

二、简单行人人体检测效果实现原理

三、简单行人人体检测效果案例实现简单步骤

四、注意事项


一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

这里使用 Python  基于 OpenCV 进行视觉图像处理,......

OpenCV 提供了一些已经训练好的级联分类器,这些级联分类器以XML文件的方式保存在以下路径中:

...\Python\Lib\site-packages\cv2\data\

OpenCV提供了一些经过预训练的人脸检测器模型文件,这些文件通常包含在OpenCV的安装包中。你也可以在OpenCV的官方GitHub页面或者OpenCV官方网站的下载页面找到这些模型文件的下载链接。

一般来说,你可以从以下位置获取OpenCV的预训练模型文件:

        OpenCV GitHub Release 页面:在 Releases · opencv/opencv · GitHub 找到你需要的版本,然后在下载的压缩包中找到位于 opencv\data 目录下的人脸检测器模型文件。
        OpenCV 官方网站下载页面:访问 OpenCV 官方网站 Releases - OpenCV ,下载你需要的版本,并在相应的压缩包中查找人脸检测器模型文件。

请确保下载与你使用的OpenCV版本兼容的模型文件。

二、简单行人人体检测效果实现原理

行人检测是计算机视觉中的一个重要任务,旨在从图像或视频中检测和定位人类行人的位置。这项任务通常涉及以下步骤:

  1. 特征提取:通常使用特征提取算法,如 Haar 特征、HOG(方向梯度直方图)特征或深度学习模型,从图像中提取用于识别行人的特征。

  2. 分类器训练:使用机器学习技术(如支持向量机、随机森林等)或深度学习模型,对提取的特征进行训练,以区分行人和非行人的图像。

  3. 行人检测:将训练好的分类器应用于输入图像或视频流,以识别其中的行人。在此阶段,通常会使用滑动窗口技术在图像中不同的位置和尺度上进行检测。

  4. 定位和标注:一旦检测到行人,通常会在图像上绘制矩形框或边界框来标记他们的位置。

  5. 性能评估:对行人检测算法进行评估和性能分析,以确定其在不同数据集上的准确性和鲁棒性。

行人检测在许多领域都有重要应用,包括智能监控系统、自动驾驶汽车、人机交互、无人机和机器人导航等。

实现原理:

  1. 使用 OpenCV 加载行人检测器,这里使用的是 Haar 级联分类器。
  2. 读取视频文件的每一帧,并将每一帧转换为灰度图像。
  3. 在灰度图像中使用行人检测器检测行人的位置。
  4. 对于检测到的每个行人,绘制一个矩形框来标记其位置。
  5. 将带有矩形框的图像显示出来,直到按下 'q' 键退出。

实现方法:

  1. 加载 Haar 级联分类器用于行人检测。
  2. 使用 VideoCapture 对象从给定的视频文件中读取帧。
  3. 将每一帧转换为灰度图像,并使用 detectMultiScale 函数检测行人。
  4. 对于每个检测到的行人,使用 rectangle 函数绘制一个矩形框。
  5. 循环遍历直到视频结束或者按下 'q' 键退出,然后释放资源。

涉及的一些函数说明,如下

  1. cv2.CascadeClassifier

    • 作用:加载 Haar 级联分类器,用于行人检测。
    • 参数:
      • filename(str):级联分类器的文件路径。
    • 返回值:cv2.CascadeClassifier 对象。
  2. cv2.VideoCapture

    • 作用:创建一个视频捕获对象,用于从给定的视频文件中读取帧。
    • 参数:
      • filename(str):要读取的视频文件的路径。
    • 返回值:cv2.VideoCapture 对象。
  3. cv2.cvtColor

    • 作用:将图像从一种颜色空间转换为另一种颜色空间。
    • 参数:
      • src(numpy.ndarray):输入图像。
      • code(int):颜色空间转换代码,如 cv2.COLOR_BGR2GRAY 表示从 BGR(彩色)到灰度的转换。
    • 返回值:转换后的图像。
  4. detectMultiScale

    • 作用:在图像中检测对象的多个实例,例如人脸或行人。
    • 参数:
      • image(numpy.ndarray):输入图像,灰度图像通常用于人脸或行人检测。
      • scaleFactor(float):每个图像缩小的比例尺寸。
      • minNeighbors(int):每个候选矩形应该保留多少个邻居。
      • minSize(tuple):对象的最小尺寸。
    • 返回值:检测到的对象的矩形列表。
  5. cv2.rectangle

    • 作用:在图像上绘制矩形。
    • 参数:
      • img(numpy.ndarray):输入图像。
      • pt1(tuple):矩形的一个顶点。
      • pt2(tuple):矩形对角线上的另一个顶点。
      • color(tuple 或 int):矩形的颜色,可以是 RGB 颜色元组或灰度值。
      • thickness(int):矩形边框的厚度。
    • 返回值:修改后的图像。
  6. cv2.imshow

    • 作用:在窗口中显示图像。
    • 参数:
      • winname(str):窗口名称。
      • mat(numpy.ndarray):要显示的图像。
    • 返回值:无。
  7. cv2.waitKey

    • 作用:等待键盘输入。
    • 参数:
      • delay(int):等待时间,单位为毫秒。
    • 返回值:按下的键的 ASCII 码。
  8. cv2.destroyAllWindows

    • 作用:关闭所有 OpenCV 窗口。
    • 参数:无。
    • 返回值:无。
  9. VideoCapture.release

    • 作用:释放视频捕获对象的资源。
    • 参数:无。
    • 返回值:无。

三、简单行人人体检测效果案例实现简单步骤

1、编写代码

2、运行效果

3、具体代码

python">"""
简单行人人体检测效果1、加载 Haar 级联分类器用于行人检测。2、使用 VideoCapture 对象从给定的视频文件中读取帧。3、将每一帧转换为灰度图像,并使用 detectMultiScale 函数检测行人。4、对于每个检测到的行人,使用 rectangle 函数绘制一个矩形框。5、循环遍历直到视频结束或者按下 'q' 键退出,然后释放资源。
"""import cv2def detect_and_draw_pedestrians(video_path, scale_factor=1.1, min_neighbors=5, min_size=(30, 30)):"""检测视频中的行人并绘制矩形框:param video_path: (str) 输入视频文件的路径:param scale_factor: (float) 检测窗口的缩放比例,默认为1.1:param min_neighbors: (int) 每个候选矩形应该保留的邻近矩形的数量阈值,默认为5:param min_size: (tuple) 行人矩形的最小尺寸,格式为(w, h),默认为(30, 30):return: """# 参数安全校验if not isinstance(video_path, str) or not video_path.strip():raise ValueError("Invalid video path.")if not isinstance(scale_factor, (int, float)) or scale_factor <= 1.0:raise ValueError("Scale factor must be a positive float greater than 1.0.")if not isinstance(min_neighbors, int) or min_neighbors < 0:raise ValueError("Min neighbors must be a non-negative integer.")if not isinstance(min_size, tuple) or len(min_size) != 2 or not all(isinstance(val, int) for val in min_size) or \min_size[0] <= 0 or min_size[1] <= 0:raise ValueError("Min size must be a tuple of two positive integers.")# 加载行人检测器pedestrian_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_fullbody.xml')# 读取视频文件video_capture = cv2.VideoCapture(video_path)while True:# 读取一帧视频ret, frame = video_capture.read()if not ret:break# 将图像转换为灰度图像gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 检测行人pedestrians = pedestrian_cascade.detectMultiScale(gray, scaleFactor=scale_factor, minNeighbors=min_neighbors,minSize=min_size)# 绘制矩形框for (x, y, w, h) in pedestrians:cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)# 显示结果cv2.imshow('Pedestrian Detection', frame)# 按 'q' 键退出循环if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放视频捕获对象video_capture.release()cv2.destroyAllWindows()# 测试接口函数
if __name__ == "__main__":video_path = 'Videos/TwoPeopleRunning.mp4'detect_and_draw_pedestrians(video_path, scale_factor=1.2, min_neighbors=3, min_size=(50, 50))

四、注意事项

  1. 确保提供的视频文件路径是正确的,视频文件存在并且格式正确。
  2. 适当调整 detectMultiScale 函数的参数以达到最佳的行人检测效果。
  3. 处理视频时可能会遇到视频帧的分辨率、帧率等问题,需要考虑处理效率。
  4. 为了提高检测效率,可以在视频的每几帧上进行行人检测,而不是每一帧都进行检测。
  5. 释放视频捕获对象和关闭窗口的代码应该在所有帧都处理完毕后执行,以避免资源泄露。


http://www.ppmy.cn/devtools/22059.html

相关文章

基于springboot的母婴商城系统源码数据库

基于springboot的母婴商城系统源码数据库 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本母婴商城系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在…

win安装vue并运行 vue-admin-template

1. Node Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;用于构建高性能、可扩展的网络应用程序。它使得开发者能够在服务器端使用JavaScript编程&#xff0c;同时支持事件驱动、非阻塞I/O模型&#xff0c;适用于构建实时应用和高吞吐量的网络服务。 1.1 …

Springboot 中RedisTemplate使用scan来获取所有的key底层做了哪些事情

直接上代码&#xff0c;围绕着代码来讨论 redisTemplate.execute((RedisCallback<Object>) (connection) -> {Cursor<byte[]> scan connection.scan(ScanOptions.scanOptions().count(2).match("*").build());scan.forEachRemaining((bytes) -> {…

openssl3.2 - exp - 使用默认的函数宏,在release版中也会引入__FILE__

文章目录 openssl3.2 - exp - 使用默认的函数宏&#xff0c;在release版中也会引入__FILE__概述笔记验证是否__FILE__在release版下也能用&#xff1f;将openssl编译成release版的&#xff0c;看看CRYPTO_free()是否只需要一个参数就行&#xff1f;将工程中的openssl相关的库换…

【PyTorch】torch.gather() 用法

gather常被用于image做mask的操作中&#xff0c;对哪些地方进行赋值0/1 API&#xff1a; torch.gather — PyTorch 2.2 documentation torch.gather(input, dim, index, outNone) → Tensor gather()的意义&#xff1a; 顾名思义&#xff0c;聚集、集合&#xff1a;gather…

ruoyi实现大文件上传

前端&#xff1a; 安装依赖 1.在package.json文件中添加"vue-simple-uploader": "^0.7.4","spark-md5": "^3.0.1"到dependencies中&#xff1b;devDependencies中"node-sass": "^4.9.0", "sass-loader&quo…

【计算机网络】计算机网络概念

1.1 计算机网络基本概念 计算机网络&#xff1a;是一个将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件是实现资源共享和信息传递的系统。 计算机网络是互连的&#xff08;互联互通的通信链路&#xff09;、自治&…

二次封装搜索组件

做web端页面时,伴随列表的是各种各样的搜索条件,当各种页面搜索条件都比较多时,此组件将简化代码 组件1: 无更多查询按钮,一行显示所有搜索条件 <template><div class"searchArea"><el-formv-if"fieldColumns.length > 0"ref"for…

eclipse 如何创建python文件

一、准备 1.平台要求&#xff1a; 电脑除了要安装eclipse软件和Python语言包之外&#xff0c;还需要将Python集成到eclipse软件中&#xff0c;网上有很多的方法&#xff0c;这里就不细细介绍如何集成了。 在下面界面中可以看到自己已经安装了继承插件。具体方法见步骤2&…

12(第十一章,数据仓库和商务智能)

目录 概述 目标和原则 基本概念 商务智能 数据仓库 数据仓库建设方法 数据仓库架构组件 加载处理方式 1、历史数据 2、批量变更数据捕获&#xff08;CDC&#xff09; 3、准实时和实时数据加载 活动 运营分析应用 方法 数据仓库构建 架构演进 数据处理过程 数…

现代永磁同步电机控制原理pdf及全套matlab仿真模型

现代永磁同步电机控制原理pdf及matlab仿真模型。全书包含SVPWM, DTC, Lun, smo, EKF, HFI等经典控制算法。将书中10章节涉及到的模型复原搭建模型。 模型获取链接&#xff1a;现代永磁同步电机控制原理pdf及全套matlab仿真模型

[转载] 在IIS上启用https的免费ssl证书使用教程

一、申请证书 数字证书管理服务&#xff08;原SSL证书&#xff09;_SSL数字证书_HTTPS加密_服务器证书_CA认证-阿里云 二、添加证书 1、在控制台上做如下操作&#xff1a;文件》添加/删除管理单元》可用的管理单元》证书》添加》确定。 2、在证书管理单元中选择&#xff1a;…

2024五一劳动节市集露营生活节活动策划方案

2024五一劳动节市集露营生活节&#xff08;向野而生 躺平生活节主题&#xff09;活动策划方案 方案页码&#xff1a;72页 文件格式&#xff1a;pptx 方案简介&#xff1a; 五一躺平生活节 咖啡一饮&#xff0c;书本一翻&#xff0c;轻松又自在,看着窗外的阳光&#xff0c;…

C++ 模板和泛型编程详解

C中的模板和泛型编程是非常重要的概念。模板是一种将数据类型作为参数的通用程序设计方法。它们允许开发人员编写可以处理各种数据类型的代码&#xff0c;而无需为每种数据类型编写不同的代码。下面介绍了一些关于C中模板和泛型编程的重要知识点 模板的定义 模板是一种通用程序…

Ansible自动化

Ansible自动化 自动化的需求&#xff1a; 1. 在什么样的场景下需要自动化&#xff1f; 批量化的工作&#xff1a; 装软件包、配置服务、升级、下发文件… 2. 为什么在自动化工具中选择ansible&#xff1f; 对比shell脚本&#xff1a; 相对于用shell的脚本来实现自动化&#x…

Laravel 6 - 第十七章 配置数据库

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

Mongodb语法使用说明(含详细示例)

点击下载《Mongodb语法使用说明&#xff08;含详细示例&#xff09;》 1. 前言 MongoDB是一款高性能、开源、面向文档的NoSQL数据库&#xff0c;它使用类似JSON的BSON格式存储数据&#xff0c;提供了灵活的数据模型和强大的查询功能。本文将详细介绍MongoDB数据库的基本增删改…

【面经八股】搜广推方向:面试记录(十三)

【面经&八股】搜广推方向:面试记录(十三) 文章目录 【面经&八股】搜广推方向:面试记录(十三)1. 自我介绍2. 实习经历问答3. 八股之类的问题4. 编程题5. 反问6. 可以1. 自我介绍 。。。。。。 2. 实习经历问答 挑最熟的一个跟他讲就好了。 一定要熟~3. 八股之类…

面经总结(二)(数据库)

数据库常识&#xff1a; 1、数据库系统包含什么&#xff1f; 包含了数据库、数据库管理系统、数据库管理员和应用程序。 数据库&#xff08;DB)&#xff1a;顾名思义是存放数据的仓库&#xff0c;实现数据的持久化。 数据库管理系统&#xff08;DBMS)&#xff1a;类似于操作系…

Spring Cloud Alibaba Gateway 入门:简介与基本配置教程

一、引言 随着微服务架构的兴起&#xff0c;服务之间的通信和治理变得尤为重要。Spring Cloud Alibaba 作为一套完整的微服务解决方案&#xff0c;提供了丰富的组件来简化微服务的开发、部署和管理。其中&#xff0c;Gateway 作为服务网关&#xff0c;扮演着至关重要的角色。本…