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

avatar
作者
猴君
阅读量:0

基于PaddleDetection本地实现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 打开实时视频流
    在这里插入图片描述

在这里插入图片描述

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!