使用 OpenCV 进行视频中的行人检测

news/2024/11/26 5:26:26/

在计算机视觉领域,行人检测是一个重要的研究方向,它在视频监控、自动驾驶、人机交互等领域都有着广泛的应用。本文将介绍如何使用 OpenCV 库来实现视频中的行人检测。

环境准备

首先,我们需要安装 OpenCV 库。可以通过以下命令来安装:

pip install opencv-python

代码实现

以下是实现视频中行人检测的代码:

import cv2
import os
import numpy as np
import timedef detect_people():current_dir = os.path.dirname(os.path.abspath(__file__))video_path = os.path.join(current_dir, 'walk2.mp4')if not os.path.exists(video_path):print(f"Error: 视频文件不存在,请确认文件路径: {video_path}")return# 创建HOG检测器hog = cv2.HOGDescriptor()hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())cap = cv2.VideoCapture(video_path)if not cap.isOpened():print("Error: 无法打开视频文件")return# 设置视频捕获的分辨率cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)# 用于控制检测频率frame_count = 0detection_interval = 3  # 每隔3帧进行一次检测last_boxes = []while True:start_time = time.time()ret, frame = cap.read()if not ret:break# 降低分辨率frame = cv2.resize(frame, (640, 480))# 每隔几帧进行一次检测if frame_count % detection_interval == 0:# 检测人boxes, weights = hog.detectMultiScale(frame, winStride=(8, 8),padding=(4, 4),scale=1.1)last_boxes = boxeselse:boxes = last_boxes# 在图像上绘制边界框for (x, y, w, h) in boxes:cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)# 显示人数people_count = len(boxes)cv2.putText(frame, f'People Count: {people_count}', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)# 计算和显示FPSfps = 1.0 / (time.time() - start_time)cv2.putText(frame, f'FPS: {int(fps)}', (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)# 显示结果cv2.imshow('People Detection', frame)frame_count += 1# 减小等待时间,提高帧率if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()cv2.destroyAllWindows()if __name__ == '__main__':detect_people()

 

 


http://www.ppmy.cn/news/1549987.html

相关文章

MySQL数据库的算法

MySQL数据库中使用的算法主要包括以下几种: • 联接算法: • Nested-Loop Join(NLJ):这是一种基本的连接实现算法,通过双层循环比较数据来获取结果。MySQL数据库根据不同的使用场合,支持两种N…

神经网络12-Time-Series Transformer (TST)模型

Time-Series Transformer (TST) 是一种基于 Transformer 架构的深度学习模型,专门用于时序数据的建模和预测。TST 是 Transformer 模型的一个变种,针对传统时序模型(如 RNN、LSTM)在处理长时间依赖、复杂数据关系时的限制而提出的…

C#之WPF的C1FlexGrid空间的行加载事件和列事件变更处理动态加载的枚举值

列变更,EnumDataItemStackClassTypeList数据源是枚举配置,实时查询到VM缓存的,如果是定义的枚举就不用这个麻烦了,直接在对象里面获取枚举值匹配,即 public string ApplyStatusName { get { retur…

selinux及防火墙

selinux说明 SELinux 是 Security-Enhanced Linux 的缩写,意思是安全强化的 linux 。 SELinux 主要由美国国家安全局( NSA )开发,当初开发的目的是为了避免资源的误用。 httpd进程标签(/usr/share/nginx/html &#…

Python 获取微博用户信息及作品(完整版)

在当今的社交媒体时代,微博作为一个热门的社交平台,蕴含着海量的用户信息和丰富多样的内容。今天,我将带大家深入了解一段 Python 代码,它能够帮助我们获取微博用户的基本信息以及下载其微博中的相关素材,比如图片等。…

Mac下的vscode远程ssh免密码登录

Mac下的vscode远程ssh免密码登录(同理可迁移至windows及linux系统) 在日常开发中,使用远程服务器进行开发是非常常见的,而通过 SSH 免密码登录可以显著提高效率,避免每次连接时都需要输入密码。本文将介绍如何在 macOS…

深度学习:神经网络中线性层的使用

深度学习:神经网络中线性层的使用 在神经网络中,线性层(也称为全连接层或密集层)是基础组件之一,用于执行输入数据的线性变换。通过这种变换,线性层可以重新组合输入数据的特征,并将其映射到新…

H.264/H.265播放器EasyPlayer.js网页全终端安防视频流媒体播放器关于iOS不能系统全屏

在数字化时代,流媒体播放器已成为信息传播和娱乐消遣的主流载体。随着技术的进步,流媒体播放器的核心技术和发展趋势不断演变,影响着整个行业的发展方向。 EasyPlayer播放器属于一款高效、精炼、稳定且免费的流媒体播放器,可支持…