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
历史版本下载地址: 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}
"下载地址: 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下载地址: 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 tensorrtgit clone --recurse-submodules [email protected]:karmueo/deepstream-app-custom.git
# git submodule init
# git submodule updatecd DeepStream-Yolo
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolocd 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发送结果,安装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
mosquittomosquitto配置文件,比如创建一个my_config.conf如下
allow_anonymous true
listener 1883 0.0.0.0
启动
mosquitto -v -c ./my_config.conf &然后就可以使用mqtt发送和接收消息了
如果要将 mosquitto 作为系统服务运行并设置开机自启动,请按照以下步骤操作:
- 创建配置文件目录并放置配置文件:
sudo mkdir -p /etc/mosquitto
sudo cp my_config.conf /etc/mosquitto/- 创建 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
- 重新加载 systemd 配置并启用服务:
sudo systemctl daemon-reload
sudo systemctl enable mosquitto.service
sudo systemctl start mosquitto.service- 检查服务状态:
sudo systemctl status mosquitto.service- 如果需要停止服务:
sudo systemctl stop mosquitto.service- 彻底取消自动重启(本次与下次开机都不拉起):
sudo systemctl stop mosquitto.service
sudo systemctl disable mosquitto.service- 查看日志
sudo journalctl -u mosquitto.servicecd /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"
}
]
},
...
}把目标检测模型onnx文件放入src/deepstream-app/models目录下,根据实际的模型名称修改下面的参数:
动态 batch: ./convert2trt.sh <ONNX_PATH> <ENGINE_PATH> [fp16]
然后根据实际的engine文件名修改src/deepstream-app/configs/yml/config_infer_primary_yoloV11_rgb.yml中model-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转换,类似前面的转换操作
将如下命令作为 systemd 服务开机自启动:
/opt/nvidia/deepstream/deepstream/bin/deepstream-app -c /opt/nvidia/deepstream/deepstream/deepstream-app-custom/configs/yml/app_config.yml步骤如下:
- 创建服务文件
/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- 重新加载并启用/启动服务
sudo systemctl daemon-reload
sudo systemctl enable deepstream-app-rgb.service
sudo systemctl start deepstream-app-rgb.service- 查看状态与日志
sudo systemctl status deepstream-app-rgb.service
sudo journalctl -u deepstream-app-rgb.service -f- 停止和取消自启动
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
- 创建白天服务文件
/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- 创建夜晚服务文件
/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- 创建白天定时器文件
/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- 创建夜晚定时器文件
/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- 部署
# 重新加载 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 --allsudo apt install cockpit -y
# 启动并启用服务
sudo systemctl enable cockpit.socket