PP-Human行为识别(RTSP协议视频流实时检测)

基于PaddleDetection本地实现PP-Human行为识别模块(RTSP协议视频流实时检测)

  • 项目介绍
  • 环境准备
    • 1. Anaconda 创建环境
    • 2. 获取 PaddleDetection
    • 3. 获取 [MediaMTX](https://github.com/bluenviron/mediamtx/releases/tag/v1.8.4)
    • 4. FFmpeg 获取
    • 5. VLC 获取
  • 项目准备
    • 1. PP-Human行为识别模块
      • 1.1 依赖列表参考
      • 1.2 代码修改
      • 1.3 配置说明
    • 2. FFmpeg 安装
    • 3. VLC 安装
  • 启动
    • 1. MediaMTX 启动
    • 2. FFmpeg 推流
      • 2.1 查看设备列表
      • 2.2 推流
    • 3. PP-Human 启动
  • 推理成果


项目介绍

用本地电脑的摄像头摄像并推流到RTSP服务器然后拉取视频流,利用PP-Human行为识别模块本地推理并将推理结果推流到RTSP服务器,最终通过 VLC 打开网络串流播放实时画面。

在这里插入图片描述


环境准备

  • Windows 11
  • Anaconda
  • PyCharm
  • Python 3.10.10
  • Paddlepaddle-gpu 2.5.0
  • cudatoolkit 11.2
  • cudnn 8.2
  • PaddleDetection relase/2.7
  • MediaMTX 1.8.4
  • FFmpeg 7.0.1
  • VLC

1. Anaconda 创建环境

  • 打开 Anaconda Prompt
# 创建环境
conda create --name myenv python=3.10.10
# 启动环境
conda activate myenv

2. 获取 PaddleDetection

  • 采用的 Git 的方式获取的代码,使用的是 relase/2.7 分支
  • 使用 PyCharm 打开代码,并选择 Anaconda 创建的环境
    在这里插入图片描述

3. 获取 MediaMTX

  • MediaMTX(以前称为rtsp-simple-server)是一个随时可用的零依赖实时媒体服务器和媒体代理,允许发布,读取,代理,记录和回放视频和音频流。它被认为是一个“媒体路由器”,将媒体流从一端路由到另一端。
  • 超链接直达 MediaMTX ,如果网络不好也可直接使用文章关联的资源
    在这里插入图片描述

4. FFmpeg 获取

  • FFmpeg 是一个非常强大的多媒体框架,它能够解码、编码、转码、复用、解复用、过滤和处理几乎所有格式的音频和视频数据
  • 超链接直达 FFmpeg 在这里插入图片描述

5. VLC 获取

  • VLC(VideoLAN Client)是一款开源的多媒体播放器,由 VideoLAN 组织开发。它能够播放大多数多媒体文件格式,并且可以作为流媒体服务器。
  • 超链接直达 VLC
    在这里插入图片描述

项目准备

1. PP-Human行为识别模块

  • 这里我们主要用到了 PaddleDetection 项目中的 PP-Human,相对路径如下:
    deploy/pipeline/pipeline.py
  • 可参考deploy/pipeline/docs/tutorials/pphuman_action.md启动行为识别模块
  • 本文选择 - 吸烟识别,相关预训练模型如下:
    • 行人检测/跟踪
    • 吸烟行为识别

在这里插入图片描述

1.1 依赖列表参考

  • 代码中的所需要的依赖,我们本地环境肯定不是全部都有的,可以根据代码启动的报错信息,逐步添加。
  • 以下是我本地环境的依赖可正常启动,仅供参考。
aiofiles                  23.2.1                   pypi_0    pypi
altair                    5.3.0                    pypi_0    pypi
annotated-types           0.7.0                    pypi_0    pypi
anyio                     4.4.0                    pypi_0    pypi
astor                     0.8.1                    pypi_0    pypi
attrs                     23.2.0                   pypi_0    pypi
bzip2                     1.0.8                h2bbff1b_6    defaults
ca-certificates           2024.7.4             h56e8100_0    conda-forge
cattrs                    23.2.3                   pypi_0    pypi
certifi                   2024.7.4                 pypi_0    pypi
charset-normalizer        3.3.2                    pypi_0    pypi
click                     8.1.7                    pypi_0    pypi
colorama                  0.4.6                    pypi_0    pypi
contourpy                 1.2.1                    pypi_0    pypi
cudatoolkit               11.2.2              h933977f_10    conda-forge
cudnn                     8.2.1.32             h754d62a_0    conda-forge
cycler                    0.12.1                   pypi_0    pypi
decorator                 5.1.1                    pypi_0    pypi
dnspython                 2.6.1                    pypi_0    pypi
email-validator           2.2.0                    pypi_0    pypi
exceptiongroup            1.2.1                    pypi_0    pypi
fastapi                   0.111.0                  pypi_0    pypi
fastapi-cli               0.0.4                    pypi_0    pypi
ffmpeg                    1.4                      pypi_0    pypi
ffmpy                     0.3.2                    pypi_0    pypi
filelock                  3.15.4                   pypi_0    pypi
fonttools                 4.53.1                   pypi_0    pypi
fsspec                    2024.6.1                 pypi_0    pypi
gradio                    4.37.2                   pypi_0    pypi
gradio-client             1.0.2                    pypi_0    pypi
h11                       0.14.0                   pypi_0    pypi
httpcore                  1.0.5                    pypi_0    pypi
httptools                 0.6.1                    pypi_0    pypi
httpx                     0.27.0                   pypi_0    pypi
huggingface-hub           0.23.4                   pypi_0    pypi
idna                      3.7                      pypi_0    pypi
imageio                   2.34.2                   pypi_0    pypi
imgaug                    0.4.0                    pypi_0    pypi
importlib-resources       6.4.0                    pypi_0    pypi
incant                    23.2.0                   pypi_0    pypi
itsdangerous              2.2.0                    pypi_0    pypi
jinja2                    3.1.4                    pypi_0    pypi
joblib                    1.4.2                    pypi_0    pypi
jsonschema                4.23.0                   pypi_0    pypi
jsonschema-specifications 2023.12.1                pypi_0    pypi
kiwisolver                1.4.5                    pypi_0    pypi
lap                       0.4.0                    pypi_0    pypi
lazy-loader               0.4                      pypi_0    pypi
libffi                    3.4.4                hd77b12b_1    defaults
llvmlite                  0.39.1                   pypi_0    pypi
markdown-it-py            3.0.0                    pypi_0    pypi
markupsafe                2.1.5                    pypi_0    pypi
matplotlib                3.9.1                    pypi_0    pypi
mdurl                     0.1.2                    pypi_0    pypi
motmetrics                1.4.0                    pypi_0    pypi
networkx                  3.3                      pypi_0    pypi
numba                     0.56.4                   pypi_0    pypi
numpy                     1.23.5                   pypi_0    pypi
opencv-python             4.10.0.84                pypi_0    pypi
openssl                   1.1.1w               h2bbff1b_0    defaults
opt-einsum                3.3.0                    pypi_0    pypi
orjson                    3.10.6                   pypi_0    pypi
packaging                 24.1                     pypi_0    pypi
paddle-bfloat             0.1.7                    pypi_0    pypi
paddlepaddle              2.5.0                    pypi_0    pypi
paddlepaddle-gpu          2.5.0                    pypi_0    pypi
pandas                    2.2.2                    pypi_0    pypi
pillow                    10.4.0                   pypi_0    pypi
pip                       24.0            py310haa95532_0    defaults
protobuf                  3.20.2                   pypi_0    pypi
psutil                    6.0.0                    pypi_0    pypi
pycocotools               2.0.8                    pypi_0    pypi
pydantic                  2.8.2                    pypi_0    pypi
pydantic-core             2.20.1                   pypi_0    pypi
pydub                     0.25.1                   pypi_0    pypi
pygments                  2.18.0                   pypi_0    pypi
pyparsing                 3.1.2                    pypi_0    pypi
python                    3.10.10              h966fe2a_2    defaults
python-dateutil           2.9.0.post0              pypi_0    pypi
python-dotenv             1.0.1                    pypi_0    pypi
python-multipart          0.0.9                    pypi_0    pypi
pytz                      2024.1                   pypi_0    pypi
pyyaml                    6.0.1                    pypi_0    pypi
referencing               0.35.1                   pypi_0    pypi
requests                  2.32.3                   pypi_0    pypi
rich                      13.7.1                   pypi_0    pypi
rpds-py                   0.19.0                   pypi_0    pypi
ruff                      0.5.1                    pypi_0    pypi
scikit-image              0.24.0                   pypi_0    pypi
scikit-learn              1.5.1                    pypi_0    pypi
scipy                     1.14.0                   pypi_0    pypi
semantic-version          2.10.0                   pypi_0    pypi
setuptools                69.5.1          py310haa95532_0    defaults
shapely                   2.0.5                    pypi_0    pypi
shellingham               1.5.4                    pypi_0    pypi
six                       1.16.0                   pypi_0    pypi
sniffio                   1.3.1                    pypi_0    pypi
sqlite                    3.45.3               h2bbff1b_0    defaults
starlette                 0.37.2                   pypi_0    pypi
threadpoolctl             3.5.0                    pypi_0    pypi
tifffile                  2024.7.2                 pypi_0    pypi
tk                        8.6.14               h0416ee5_0    defaults
tomark                    0.1.4                    pypi_0    pypi
tomlkit                   0.12.0                   pypi_0    pypi
toolz                     0.12.1                   pypi_0    pypi
tqdm                      4.66.4                   pypi_0    pypi
typer                     0.12.3                   pypi_0    pypi
typing-extensions         4.12.2                   pypi_0    pypi
tzdata                    2024.1                   pypi_0    pypi
ujson                     5.10.0                   pypi_0    pypi
urllib3                   2.2.2                    pypi_0    pypi
uvicorn                   0.30.1                   pypi_0    pypi
vc                        14.2                 h2eaa2aa_4    defaults
vs2015_runtime            14.29.30133          h43f2093_4    defaults
watchfiles                0.22.0                   pypi_0    pypi
websockets                11.0.3                   pypi_0    pypi
wheel                     0.43.0          py310haa95532_0    defaults
xmltodict                 0.13.0                   pypi_0    pypi
xz                        5.4.6                h8cc25b3_1    defaults
zlib                      1.2.13               h8cc25b3_1    defaults

1.2 代码修改

  • 为适配本地的运行环境,本文示例项目对代码做了一定的修改。
  1. 原文通过命令行启动,指定配置文件及输入输出等各种参数。每次都需要手输,非常麻烦。因为我们是是用 Pycharm 调试,所以修改为在代码中写入参数,省的每次都在命令行输入。部分代码修改如下:deploy/pipeline/pipeline.py
if __name__ == '__main__':params_list = ['--config', 'D:\\code\\fastdeploy\\PaddleDetection\\deploy\\pipeline\\config\\infer_cfg_pphuman.yml','--rtsp', 'rtsp://127.0.0.1:8554/stream','--device', 'gpu','--pushurl', 'rtsp://127.0.0.1:8554/test']paddle.enable_static()# parse params from commandparser = argsparser()FLAGS = parser.parse_args(params_list)FLAGS.device = FLAGS.device.upper()assert FLAGS.device in ['CPU', 'GPU', 'XPU', 'NPU'], "device should be CPU, GPU, XPU or NPU"main()
  1. 由于我们使用的windows系统,代码中的 os.path.join 函数会考虑操作系统的路径分隔符,对于 Unix 和 Linux 系统,分隔符是 /,而对于 Windows 系统,分隔符是 \ 。拼接出来的内容会变成rtsp://127.0.0.1:8554\test,造成路径错误系统抛错。部分代码修改如下:deploy/pipeline/pipeline.py
        if len(self.pushurl) > 0:video_out_name = 'output' if self.file_name is None else self.file_name# pushurl = os.path.join(self.pushurl, video_out_name)# print("the result will push stream to url:{}".format(pushurl))pushstream = PushStream(self.pushurl)pushstream.initcmd(fps, width, height)
  1. 读取配置文件所遇到的编码问题deploy/pipeline/cfg_utils.py:178
    with open(file=args.config, encoding='utf-8') as f:

1.3 配置说明

  • 从模型库中下载行人检测/跟踪、抽烟行为识别两个预测部署模型并解压到./output_inference路径下;默认自动下载模型,如果手动下载,需要修改模型文件夹为模型存放路径。本人采用的手动下载,解压后修改名称如下

在这里插入图片描述

  • 修改配置文件deploy/pipeline/config/infer_cfg_pphuman.yml中ID_BASED_DETACTION下的enable为True;
  • 示例配置,引用的话可修改为实际路径:
crop_thresh: 0.5
attr_thresh: 0.5
kpt_thresh: 0.2
visual: True
warmup_frame: 50DET:model_dir: D:\file\ai\models\paddle\pphuman\track\mot_ppyoloe_l_36e_pipelinebatch_size: 1MOT:model_dir: D:\file\ai\models\paddle\pphuman\track\mot_ppyoloe_l_36e_pipelinetracker_config: D:\code\fastdeploy\PaddleDetection\deploy\pipeline\config\tracker_config.ymlbatch_size: 1skip_frame_num: -1 # preferably no more than 3enable: FalseID_BASED_DETACTION:model_dir:  D:\file\ai\models\paddle\ppyoloe\infer_modelbatch_size: 8threshold: 0.6display_frames: 30skip_frame_num: 2enable: true

2. FFmpeg 安装

  1. 解压下载的安装包
  2. 配置环境变量,可自行百度。最终需要将解压后的bin目录的绝对路径添加。

3. VLC 安装

  • 此处略过10个字…

启动

  • 一切准备就绪,开始启动… …

1. MediaMTX 启动

  • 双击
    在这里插入图片描述
    在这里插入图片描述

2. FFmpeg 推流

  • 将本地摄像编码并推送到 RTSP 服务器

2.1 查看设备列表

  • HP 5MP Camera 就是我的笔记本摄像头
ffmpeg -list_devices true -f dshow -i dummy

在这里插入图片描述

2.2 推流

  • 警告信息可以忽略,提示 Output #0, rtsp, to 'rtsp://127.0.0.1:8554/stream' 表示推流成功。
ffmpeg -f dshow -i video="HP 5MP Camera" -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream

在这里插入图片描述

3. PP-Human 启动

在这里插入图片描述


推理成果

  • 使用 VLC 打开实时视频流
    在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1486946.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

.NET开源、简单、实用的数据库文档生成工具

前言 今天大姚给大家分享一款.NET开源(MIT License)、免费、简单、实用的数据库文档(字典)生成工具,该工具支持CHM、Word、Excel、PDF、Html、XML、Markdown等多文档格式的导出:DBCHM。 支持的数据库 Sq…

IEEE官方列表会议 | 第三届能源与环境工程国际会议(CFEEE 2024)

会议简介 Brief Introduction 2024年第三届能源与环境工程国际会议(CFEEE 2024) 会议时间:2024年12月2日-4日 召开地点:澳大利亚凯恩斯 大会官网:CFEEE 2024-2024 International Conference on Frontiers of Energy and Environment Engineer…

Android APP 音视频(01)MediaCodec解码H264码流

说明: 此MediaCodec解码H264实操主要针对Android12.0系统。通过读取sd卡上的H264码流Me获取视频数据,将数据通过mediacodec解码输出到surfaceview上。 1 H264码流和MediaCodec解码简介 1.1 H264码流简介 H.264,也被称为MPEG-4 AVC&#xff…

uni-app 影视类小程序开发从零到一 | 开源项目分享

引言 在数字娱乐时代,对于电影爱好者而言,随时随地享受精彩影片成为一种日常需求。分享一款基于 uni-app 开发的影视类小程序。它不仅提供了丰富的影视资源推荐,还融入了个性化知乎日报等内容,是不错的素材,同时对电影…

就业管理功能概述:构建智慧校园企业招聘平台

在智慧校园整体解决方案中,就业管理模块连接着学校与企业两端,更成为学生们步入社会、开启职业生涯梦想的关键门户。这一功能的核心价值,在于它如何巧妙地运用科技的力量,简化招聘流程,提升招聘效率,同时为…

5G赋能车联网,无人驾驶引领未来出行

无人驾驶车联网应用已成为智能交通领域的重要发展趋势。随着无人驾驶技术的不断进步和5G网络的广泛部署,5G工业路由器在无人驾驶车联网中的应用日益广泛,为无人驾驶车辆提供了稳定、高效、低时延的通信保障。 5G工业路由器的优势 低时延:5G网…

Python教程(一):环境搭建及PyCharm安装

目录 引言1. Python简介1.1 编译型语言 VS 解释型语言 2. Python的独特之处3. Python应用全览4. Python版本及区别5. 环境搭建5.1 安装Python: 6. 开发工具(IDE)6.1 PyCharm安装教程6.2 永久使用教程 7. 编写第一个Hello World结语 引言 在当…

Open3D 可视化窗口中查看点的坐标数据

目录 一、概述 1.1实现步骤 1.2应用 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1选取点 3.2数据显示 前期试读,后续会将博客加入下列链接的专栏,欢迎订阅 Open3D与点云深度学习的应用_白葵新的博客-CSDN博客 一、概述 可以使用Op…

Java语言程序设计基础篇_编程练习题**15.19 (游戏:手眼协调)

**15.19 (游戏:手眼协调) 请编写一个程序,显示一个半径为10像素的实心圆,该圆放置在面板上的随机位置,并填充随机的顔色,如图15-29b所示。单击这个圆时,它会消失,然后在另一个随机的位置显示新的随机颜色的…

【工具】轻松转换JSON与Markdown表格——自制Obsidian插件

文章目录 一、插件简介二、功能详解三、使用教程四、插件代码五、总结 一、插件简介 JsonMdTableConverter是一款用于Obsidian的插件,它可以帮助用户在JSON格式和Markdown表格之间进行快速转换。这款插件具有以下特点: 轻松识别并转换JSON与Markdown表格…

Java | Leetcode Java题解之第278题第一个错误的版本

题目&#xff1a; 题解&#xff1a; public class Solution extends VersionControl {public int firstBadVersion(int n) {int left 1, right n;while (left < right) { // 循环直至区间左右端点相同int mid left (right - left) / 2; // 防止计算时溢出if (isBadVers…

【linux驱动开发】卸载驱动时报错:Trying to free already-free IRQ 0

【linux驱动开发】free_irq时报错:Trying to free already-free IRQ 0 卸载驱动时报错Trying to free already-free IRQ 0 第一次加载卸载驱动没有任何问题。第二次加载驱动&#xff0c;按键中断触发失效&#xff0c;卸载驱动时报错:Trying to free already-free IRQ 0 看了…

牛客周赛50轮+cf955+abc363

D-小红的因式分解_牛客周赛 Round 50 (nowcoder.com) 思路&#xff1a; 巨蠢的题目&#xff0c;ax^2bxca1*a2*x^2(b1*a2b2*a1)xb1*b2&#xff0c;即&#xff1a; aa1*a2,ba1*b2a2*b1,cb1*b2 数据范围很小&#xff0c;直接暴力枚举吧&#xff08;注意条件&#xff09; 代码…

简单使用SpringMVC写一个图书管理系统的登入功能和图书展示功能

准备好前端的代码 这里已经准备好了前端的代码&#xff0c;这里仅仅简单的介绍登入功能&#xff0c;和展示图书列表的功能。 如图&#xff1a; 如上图所示&#xff0c;这里的前端代码还是比较多的&#xff0c;在这里我介绍&#xff0c;login.html还有book_list.html这两个。 l…

【快速逆向四/无过程/有源码】浙江工商职业技术学院 统一身份认证

逆向日期&#xff1a;2024.07.23 使用工具&#xff1a;Node.js 加密方法&#xff1a;RSAUtils 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法&#xf…

万界星空科技MES系统的智能排产功能

万界星空科技MES系统通过一系列先进的手段和算法进行智能排产&#xff0c;这些手段确保了生产过程的优化和效率的提升。 1、智能分析&#xff1a; MES系统通过收集和分析生产过程中的数据&#xff0c;能够对生产过程进行智能分析。这包括分析哪些工序需要生产&#xff0c;哪些…

01 RabbitMQ:简单介绍

01 RabbitMQ&#xff1a;简单介绍 1. 简单介绍1.1. 什么是消息队列&#xff1f;1.2. 底层实现两大主流方式1.3. 两大主流方式对比1.4. 各个MQ产品的对比 2. RabbitMQ简介1.2. 官网1.3. 体系结构1.3.1. Producer1.3.2. Consumer1.3.3. Connection1.3.4. Channel1.3.5. Broker1.3…

【iOS】——属性关键字

属性关键字的类型 在iOS中属性关键字分为四种类型&#xff1a; 可访问性: readonly ,readwrite原子性 &#xff1a; atomic &#xff0c;nonatomic内存管理 &#xff1a; retain/strong/copy&#xff0c; assign/unsafe_unretained&#xff0c;weak方法命名&#xff1a;sette…

Next.js中构建完整的身份验证系统【翻译】

案例使用第三方库&#xff1a;NextAuth.js, Shadcn/ui, react-hook-form, and Zod等 prisma: is an open-source database toolkit. We will use it to store user credentials.next-auth: Authentication for Next.js.react-hook-form: a library that helps you validate fo…

Github Desktop 关于将本地文件夹设置为新仓库的 使用笔记

实际要达到的结果: 将UE5工程同步到Github,工程太大,我们只需要将必要的工程文件夹同步即可,缓存等一些不必要的文件夹则不需要同步 最终效果预览: 1. 将本地文件夹设置为新仓库 将本地文件夹作为仓库一般你是没有这个仓库的,所以你需要新建一个仓库 如果忽略某些不必要的文…