Skip to content

karmueo/deepstream-app-custom

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1. 安装依赖

安装依赖包

sudo apt install \
libssl3 \
libssl-dev \
libgles2-mesa-dev \
libgstreamer1.0-0 \
gstreamer1.0-tools \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libgstreamer-plugins-base1.0-dev \
libgstrtspserver-1.0-0 \
libjansson4 \
libyaml-cpp-dev \
libjsoncpp-dev \
protobuf-compiler \
gcc \
make \
git \
python3 \
python3-pip \
libjson-glib-dev \
libgstreamer1.0-dev \
libgstrtspserver-1.0-dev \
libx11-dev \
libgbm1 \
libglapi-mesa

注:安装时不要在conda环境下安装,如果在conda环境则执行conda deactivate来退出conda虚拟环境。

安装显卡驱动

pass

安装CUDA Toolkit

历史版本下载地址: https://developer.nvidia.com/cuda-toolkit-archive。历史版本下载地址: https://developer.nvidia.com/cuda-toolkit-archive 这里使用的版本是: cuda-repo-ubuntu2404-12-9-local_12.9.0-575.51.03-1_amd64.deb。

sudo dpkg -i cuda-repo-ubuntu2404-12-9-local_12.9.0-575.51.03-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2404-12-9-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-9

安装完查看环境变量:

# CUDA
export CUDA_HOME=/usr/local/cuda
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH

# deepstream
export LD_LIBRARY_PATH=/opt/nvidia/deepstream/deepstream/lib:/opt/nvidia/deepstream/deepstream/lib/gst-plugins:${LD_LIBRARY_PATH}
"

安装TensorRT

下载地址: https://developer.nvidia.com/tensorrt/download/10x。这里使用的版本是: nv-tensorrt-local-repo-ubuntu2404-10.10.0-cuda-12.9_1.0-1_amd64.deb

sudo dpkg -i nv-tensorrt-local-repo-ubuntu2404-10.10.0-cuda-12.9_1.0-1_amd64.deb
sudo cp /var/nv-tensorrt-local-repo-ubuntu2404-10.10.0-cuda-12.9/nv-tensorrt-local-CD20EDBE-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get install tensorrt

安装Deepstream SDK

下载地址: https://catalog.ngc.nvidia.com/orgs/nvidia/resources/deepstream?version=8.0, 这里使用的版本是: nv-tensorrt-local-repo-ubuntu2404-10.10.0-cuda-12.9_1.0-1_amd64.deb

sudo dpkg -i nv-tensorrt-local-repo-ubuntu2404-10.10.0-cuda-12.9_1.0-1_amd64.deb
sudo cp /var/nv-tensorrt-local-repo-ubuntu2404-10.10.0-cuda-12.9/nv-tensorrt-local-CD20EDBE-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get install tensorrt

2.安装

获取项目

git clone --recurse-submodules [email protected]:karmueo/deepstream-app-custom.git
# git submodule init
# git submodule update

编译DeepStream-Yolo

cd DeepStream-Yolo
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo

编译报文发送插件

cd src/gst-udpmulticast_sink
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
sudo cmake --install .

编译单目标跟踪插件

cd sot_plugin
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
sudo cmake --install .

编译多帧目标识别插件

cd src/gst-videorecognition
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
sudo cmake --install .

添加环境变量

export GST_PLUGIN_PATH=/opt/nvidia/deepstream/deepstream/lib/gst-plugins:$GST_PLUGIN_PATH

(可选)MQTT报文服务

安装

# 可选
# 如果要使用MQTT发送结果,安装mosquitto,可以安装在docker中,也可以安装在宿主机或者局域网其他服务器中
sudo apt-get install libglib2.0 libglib2.0-dev libcjson-dev
wget https://mosquitto.org/files/source/mosquitto-2.0.15.tar.gz
tar -xvf mosquitto-2.0.15.tar.gz
cd mosquitto-2.0.15
make
make install
sudo cp /usr/local/lib/libmosquitto* /opt/nvidia/deepstream/deepstream/lib/
sudo ldconfig

运行mosquitto

adduser --system mosquitto
mosquitto

mosquitto配置文件,比如创建一个my_config.conf如下

allow_anonymous true
listener 1883 0.0.0.0

启动

mosquitto -v -c ./my_config.conf &

然后就可以使用mqtt发送和接收消息了

作为服务安装并开机自启动

如果要将 mosquitto 作为系统服务运行并设置开机自启动,请按照以下步骤操作:

  1. 创建配置文件目录并放置配置文件:
sudo mkdir -p /etc/mosquitto
sudo cp my_config.conf /etc/mosquitto/
  1. 创建 systemd 服务文件 /etc/systemd/system/mosquitto.service
[Unit]
Description=Mosquitto MQTT Broker
After=network.target

[Service]
Type=simple
User=mosquitto
ExecStart=/usr/local/sbin/mosquitto -v -c /etc/mosquitto/my_config.conf
Restart=on-failure

[Install]
WantedBy=multi-user.target
  1. 重新加载 systemd 配置并启用服务:
sudo systemctl daemon-reload
sudo systemctl enable mosquitto.service
sudo systemctl start mosquitto.service
  1. 检查服务状态:
sudo systemctl status mosquitto.service
  1. 如果需要停止服务:
sudo systemctl stop mosquitto.service
  1. 彻底取消自动重启(本次与下次开机都不拉起):
sudo systemctl stop mosquitto.service
sudo systemctl disable mosquitto.service
  1. 查看日志
sudo journalctl -u mosquitto.service

编译多帧识别插件

cd /workspace/deepstream-app-custom/src/gst-videorecognition
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
cmake --install .

编译主工程

cd /workspace/deepstream-app-custom/src/deepstream-app
make

如果要使用vscode Makefiles-tools插件进行调试开发,在.vscode/settings.json中添加如下:

{
    ...
    "cmake.ignoreCMakeListsMissing": true,
    "cmake.sourceDirectory": "${workspaceFolder}/src/deepstream-app/CMakeLists.txt",
    "cmake.debugConfig": {
        "args": [
            "-c",
            "${workspaceFolder}/src/deepstream-app/configs/yml/app_config.yml"
        ],
        "environment": [
            {
                "name": "GST_PLUGIN_PATH",
                "value": "/opt/nvidia/deepstream/deepstream/lib/gst-plugins:${env:GST_PLUGIN_PATH}"
            },
            {
                "name": "LD_LIBRARY_PATH",
                "value": "/opt/nvidia/deepstream/deepstream/lib:${env:LD_LIBRARY_PATH}"
            },
            {
                "name": "DISPLAY",
                "value": "tl-Ai:10.0"
            }
        ]
    },
    ...
}

3. 准备模型

目标检测模型

把目标检测模型onnx文件放入src/deepstream-app/models目录下,根据实际的模型名称修改下面的参数: 动态 batch: ./convert2trt.sh <ONNX_PATH> <ENGINE_PATH> [fp16] 然后根据实际的engine文件名修改src/deepstream-app/configs/yml/config_infer_primary_yoloV11_rgb.ymlmodel-engine-file的值

单目标跟踪模型

把onnx模型文件放入src/sot_plugin/models目录下,

# 用法: ./convert2trt.sh <ONNX_PATH> <ENGINE_PATH> [fp16]
# 例如: 
./convert2trt.sh mixformerv2_online_base.onnx mixformerv2_online_base_fp32.engine
./convert2trt.sh mixformerv2_online_small.onnx mixformerv2_online_base_fp16.engine fp16

多帧识别模型

把onnx模型如放到src/gst-videorecognition/models目录下,使用./convert2trt.sh转换,类似前面的转换操作

4.开机自启动

程序开机自启动

将如下命令作为 systemd 服务开机自启动:

/opt/nvidia/deepstream/deepstream/bin/deepstream-app -c /opt/nvidia/deepstream/deepstream/deepstream-app-custom/configs/yml/app_config.yml

步骤如下:

  1. 创建服务文件 /etc/systemd/system/deepstream-app-rgb.service
[Unit]
Description=DeepStream RGB App
# 网络就绪后再启动,如依赖 MQTT,请追加 mosquitto.service
After=network-online.target mosquitto.service
Wants=network-online.target mosquitto.service

[Service]
Type=simple
# 指定运行用户和组
User=tl
Group=tl
WorkingDirectory=/opt/nvidia/deepstream/deepstream
ExecStart=/opt/nvidia/deepstream/deepstream/bin/deepstream-app -c /opt/nvidia/deepstream/deepstream/deepstream-app-custom/configs/yml/app_config.yml
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target
  1. 重新加载并启用/启动服务
sudo systemctl daemon-reload
sudo systemctl enable deepstream-app-rgb.service
sudo systemctl start deepstream-app-rgb.service
  1. 查看状态与日志
sudo systemctl status deepstream-app-rgb.service
sudo journalctl -u deepstream-app-rgb.service -f
  1. 停止和取消自启动
sudo systemctl stop deepstream-app-rgb.service
sudo systemctl disable deepstream-app-rgb.service

注意:

  • 如果你的应用依赖其他服务(如 MQTT),可在 [Unit] 中追加:After=mosquitto.service 与/或 Wants=mosquitto.service
  • 若启用 User=... 以非 root 运行,请确保该用户有 GPU 与摄像头、模型及日志目录等资源的访问权限。

定时关闭、启动服务(由此可以定时切换模型,比如夜间和白天用不同的模型)

注意: 先停止前面的服务:sudo systemctl stop deepstream-app-rgb.service

  1. 创建白天服务文件 /etc/systemd/system/deepstream-day.service
[Unit]
Description=DeepStream Day App (07:00 - 19:00)
After=network-online.target mosquitto.service
Wants=network-online.target mosquitto.service
# 当本服务启动时,强制停止夜间服务
Conflicts=deepstream-night.service

[Service]
Type=simple
User=tl
Group=tl
WorkingDirectory=/opt/nvidia/deepstream/deepstream
# 白天使用的 RGB 配置文件
ExecStart=/opt/nvidia/deepstream/deepstream/bin/deepstream-app -c /opt/nvidia/deepstream/deepstream/deepstream-app-custom/configs/rgb_app_config.txt
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target
  1. 创建夜晚服务文件 /etc/systemd/system/deepstream-night.service
[Unit]
Description=DeepStream Night App (19:00 - 07:00)
After=network-online.target mosquitto.service
Wants=network-online.target mosquitto.service
# 当本服务启动时,强制停止白天服务
Conflicts=deepstream-day.service

[Service]
Type=simple
User=tl
Group=tl
WorkingDirectory=/opt/nvidia/deepstream/deepstream
# 晚上使用的 Night 配置文件
ExecStart=/opt/nvidia/deepstream/deepstream/bin/deepstream-app -c /opt/nvidia/deepstream/deepstream/deepstream-app-custom/configs/night_app_config.txt
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target
  1. 创建白天定时器文件 /etc/systemd/system/deepstream-day.timer
[Unit]
Description=Start Day App at 07:00 daily

[Timer]
# 每天 07:00:00 触发
OnCalendar=*-*-* 07:00:00
Unit=deepstream-day.service
# 如果关机错过了时间,开机后是否补发?(可选,建议 false 以免逻辑混乱)
Persistent=false

[Install]
WantedBy=timers.target
  1. 创建夜晚定时器文件 /etc/systemd/system/deepstream-night.timer
[Unit]
Description=Start Night App at 19:00 daily

[Timer]
# 每天 19:00:00 触发
OnCalendar=*-*-* 19:00:00
Unit=deepstream-night.service
Persistent=false

[Install]
WantedBy=timers.target
  1. 部署
# 重新加载 systemd 配置
sudo systemctl daemon-reload

# 启用定时器(不是服务!)
sudo systemctl enable deepstream-day.timer
sudo systemctl enable deepstream-night.timer

# 启动定时器
sudo systemctl start deepstream-day.timer
sudo systemctl start deepstream-night.timer

# 检查定时器状态
sudo systemctl list-timers --all

*可选,服务可视化

sudo apt install cockpit -y
# 启动并启用服务
sudo systemctl enable cockpit.socket

浏览器访问 https://服务器IP:9090,使用系统用户名和密码登录即可进入管理界面。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published