Python 基于 OpenCV 视觉图像处理实战 之 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、具体代码

"""
简单行人人体检测效果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.hqwc.cn/news/640647.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全数字孪生:一种新颖的汽车软件解决方案

摘要 随着汽车行业转变为数据驱动的业务&#xff0c;软件在车辆的开发和维护中发挥了核心作用。随着软件数量的增加&#xff0c;相应的网络安全风险、责任和监管也随之增加&#xff0c;传统方法变得不再适用于这类任务。相应的结果是整车厂和供应商都在努力应对汽车软件日益增加…

论文解读:(VPT)Visual Prompt Tuning

文章汇总 要解决的问题 大型模型应用于下游任务本身就存在挑战。最明显的(通常也是最有效的)适应策略是对预先训练好的模型进行全面的端到端微调。 动机 只微调参数的一个子集 解决的办法 只在输入空间中引入少量特定于任务的可学习参数&#xff0c;而在下游训练期间冻结…

visionTransformer window平台下报错

错误&#xff1a; KeyError: Transformer/encoderblock_0/MlpBlock_3/Dense_0kernel is not a file in the archive解决方法&#xff1a; 修改这个函数即可&#xff0c;主要原因是Linux系统与window系统路径分隔符不一样导致 def load_from(self, weights, n_block):ROOT f&…

idea文件菜单打不开,pom一直在加载。有些项目一直在加载。从文件打开,d盘进不去。

idea文件菜单打不开&#xff0c;pom一直在加载。有些项目一直在加载。从文件打开&#xff0c;d盘进不去。 在这里会有红色感叹号&#xff0c;进入吧插件禁止启用。就ok。我这里miniapp插件坏了。重启就行。

使用Go语言和chromedp库下载Instagram图片:简易指南

摘要/导言 本文将介绍如何使用Go语言配合chromedp库来下载Instagram上的图片。我们将通过一个简单的示例来展示整个过程&#xff0c;包括如何设置爬虫代理IP以绕过网络限制。 背景/引言 在数据采集和自动化测试领域&#xff0c;Go语言以其出色的执行效率、简洁的语法和卓越的…

Topaz Photo AI 3.0.0 (macOS Universal) - AI 图片修复工具

Topaz Photo AI 3.0.0 (macOS Universal) - AI 图片修复工具 Maximize Image Quality with AI 请访问原文链接&#xff1a;Topaz Photo AI 3.0.0 (macOS Universal) - AI 图片修复工具&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sy…

Django模型的属性与方法

本节介绍Django模型的属性和方法&#xff0c;以及如何重写之前定义的模型方法等内容。 3.5.1 模型属性 Django模型中最重要的属性就是Manager&#xff0c;它是Django模型和数据库查询操作之间的接口&#xff0c;并且被用作从数据库当中获取实例的途径。如果Django模型中没有…

AI视频分析技术的常用开源模型及TSINGSEE青犀AI视频识别分析能力介绍

AI视频分析技术是指利用人工智能技术来对视频数据进行分析和处理的技术。开源模型是指可以免费获取和使用的代码模型&#xff0c;可以帮助开发人员快速构建和部署AI视频分析应用程序。 以下是一些业内常用的用于AI视频分析技术的开源模型&#xff1a; OpenCV&#xff1a;Open…

区块链安全应用-------压力测试

基于已有的链进行测试&#xff08;build_chain默认建的链 四个节 点&#xff09;&#xff1a; 第一步&#xff1a;搭链 1. 安装依赖 在ubuntu操作系统中&#xff0c;操作步骤如下&#xff1a; sudo apt install -y openssl curl 2. 创建操作目录, 下载安装脚本 ## 创建操作…

Gateway断言工厂

这个用的时候可以在官网上查

文心一言 VS 讯飞星火 VS chatgpt (242)-- 算法导论17.4 1题

一、假定我们希望实现一个动态的开地址散列表。为什么我们需要当装载因子达到一个严格小于 1 的值 a 时就认为表满&#xff1f;简要描述如何为动态开地址散列表设计一个插入算法&#xff0c;使得每个插入操作的摊还代价的期望值为 O(1) 。为什么每个插入操作的实际代价的期望值…

CentOS7下安装mysql8或者mysql5.7

mysql8 1、下载 访问mysql官网下载mysql8软件包 https://dev.mysql.com/downloads/mysql/ 选择相应的版本如&#xff1a;RPM Bundle mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar RPM Bundle 8.0.33 下载地址&#xff1a;https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.…