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

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

  • 项目介绍
  • 环境准备
  • 项目准备
    • [1. PP-Human行为识别模块](#1. PP-Human行为识别模块)
      • [1.1 依赖列表参考](#1.1 依赖列表参考)
      • [1.2 代码修改](#1.2 代码修改)
      • [1.3 配置说明](#1.3 配置说明)
    • [2. FFmpeg 安装](#2. FFmpeg 安装)
    • [3. VLC 安装](#3. VLC 安装)
  • 启动
    • [1. MediaMTX 启动](#1. MediaMTX 启动)
    • [2. FFmpeg 推流](#2. FFmpeg 推流)
      • [2.1 查看设备列表](#2.1 查看设备列表)
      • [2.2 推流](#2.2 推流)
    • [3. PP-Human 启动](#3. PP-Human 启动)
  • 推理成果

项目介绍

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


环境准备


1. Anaconda 创建环境

  • 打开 Anaconda Prompt
bash 复制代码
# 创建环境
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 依赖列表参考

  • 代码中的所需要的依赖,我们本地环境肯定不是全部都有的,可以根据代码启动的报错信息,逐步添加。
  • 以下是我本地环境的依赖可正常启动,仅供参考。
bash 复制代码
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
python 复制代码
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
python 复制代码
        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
python 复制代码
    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;
  • 示例配置,引用的话可修改为实际路径:
yaml 复制代码
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 就是我的笔记本摄像头
bash 复制代码
ffmpeg -list_devices true -f dshow -i dummy

2.2 推流

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

3. PP-Human 启动


推理成果

  • 使用 VLC 打开实时视频流

相关推荐
985小水博一枚呀15 分钟前
【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法
人工智能·深度学习·神经网络·cnn·transformer
龙哥说跨境16 分钟前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
AltmanChan16 分钟前
大语言模型安全威胁
人工智能·安全·语言模型
985小水博一枚呀20 分钟前
【深度学习滑坡制图|论文解读2】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法
人工智能·深度学习·神经网络·cnn·transformer·迁移学习
数据与后端架构提升之路29 分钟前
从神经元到神经网络:深度学习的进化之旅
人工智能·神经网络·学习
小白学大数据32 分钟前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
flashman91133 分钟前
python在word中插入图片
python·microsoft·自动化·word
爱技术的小伙子35 分钟前
【ChatGPT】如何通过逐步提示提高ChatGPT的细节描写
人工智能·chatgpt
菜鸟的人工智能之路36 分钟前
桑基图在医学数据分析中的更复杂应用示例
python·数据分析·健康医疗
咔叽布吉44 分钟前
【论文阅读笔记】CamoFormer: Masked Separable Attention for Camouflaged Object Detection
论文阅读·笔记·目标检测