0


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

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


项目介绍

用本地电脑的摄像头摄像并推流到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
bzip21.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 command
    parser = 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
iflen(self.pushurl)>0:
            video_out_name ='output'if self.file_name isNoneelse 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
withopen(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.5attr_thresh:0.5kpt_thresh:0.2visual:Truewarmup_frame:50DET:model_dir: D:\file\ai\models\paddle\pphuman\track\mot_ppyoloe_l_36e_pipeline
  batch_size:1MOT:model_dir: D:\file\ai\models\paddle\pphuman\track\mot_ppyoloe_l_36e_pipeline
  tracker_config: D:\code\fastdeploy\PaddleDetection\deploy\pipeline\config\tracker_config.yml
  batch_size:1skip_frame_num:-1# preferably no more than 3enable:FalseID_BASED_DETACTION:model_dir:  D:\file\ai\models\paddle\ppyoloe\infer_model
  batch_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_devicestrue-f dshow -i dummy

在这里插入图片描述

2.2 推流

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

在这里插入图片描述

3. PP-Human 启动

在这里插入图片描述


推理成果

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

在这里插入图片描述


本文转载自: https://blog.csdn.net/m0_48812875/article/details/140633492
版权归原作者 清汉 所有, 如有侵权,请联系我们删除。

“PP-Human行为识别(RTSP协议视频流实时检测)”的评论:

还没有评论