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


项目介绍

用本地电脑的摄像头摄像并推流到RTSP服务器然后拉取视频流,利用PP-Human行为识别模块本地推理并将推理结果推流到RTSP服务器,最终通过 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 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
        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: 50

DET:
  model_dir: D:\file\ai\models\paddle\pphuman\track\mot_ppyoloe_l_36e_pipeline
  batch_size: 1

MOT:
  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: 1
  skip_frame_num: -1 # preferably no more than 3
  enable: False


ID_BASED_DETACTION:
  model_dir:  D:\file\ai\models\paddle\ppyoloe\infer_model
  batch_size: 8
  threshold: 0.6
  display_frames: 30
  skip_frame_num: 2
  enable: 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 打开实时视频流
    在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清汉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值