基于 Deepstream 的深度学习多路视频推理平台。
-
Triton 是 NVIDIA 推出的 Inference Server,提供 AI 模型的部署服务。客户端可以使用 HTTP/REST 或 gRPC 的方式来请求服务。支持各种深度学习后端,支持 k8s,和多种批处理算法。
-
Deepstream 是 NVIDIA 开发的 SDK,适合快速开发和部署音/视频 AI 应用程序和服务。 提供多平台、高扩展性,支持 TLS 安全加密,可以部署在本地、边缘和云端。 参考样例可以查看 SDK 和 NVIDIA IOT GitHub .
-
GStreamer 是用来构建流媒体应用的开源多媒体框架,其目标是要简化音/视频应用程序的开发。 GStreamer 为 GNOME 桌面环境下 和 webkit 的多媒体框架,是 linux 官方推荐的流媒体框架,基于 GPL 协议。
请参考 Deepstream User Guide 安装最新版的 deepstream.
需严格按版本号安装,或拉取 DeepStream 的 docker 镜像。
- Ubuntu 18.04 (20.04 也支持,但未经官方测试)
- CUDA 11.4 latest
- NVIDIA driver (CUDA deb 自带)
- TensorRT latest
- cuDNN (tensorrt 自带)
- DeepStream SDK 6.0
参考 官方文档.
官方文档在 ubuntu 20.04 的安装方法错误, 请参考下面的步骤安装 python bindings.
a. Base dependencies
apt install python3-gi python3-dev python3-gst-1.0 python-gi-dev git python-dev \
python3 python3-pip python3.8-dev cmake g++ build-essential libglib2.0-dev \
libglib2.0-dev-bin python-gi-dev libtool m4 autoconf automake
export GST_LIBS="-lgstreamer-1.0 -lgobject-2.0 -lglib-2.0"
export GST_CFLAGS="-pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include"
b. Initialization of submodules
git submodule update --init
c. Installing Gst-python
cd 3rdparty/gst-python/
# 修改 acinclude.m4 L:82 的 PYTHON_LIBS=`$PYTHON-config --ldflags 2>/dev/null`
# 为 PYTHON_LIBS=`$PYTHON-config --libs --embed 2>/dev/null` || PYTHON_LIBS=`$PYTHON-config --libs 2>/dev/null`
# 参考 https://gitlab.freedesktop.org/gstreamer/gst-python/-/merge_requests/14/diffs
./autogen.sh PYTHON=python3.8
make
sudo make install
d. Building the bindings
cd deepstream_python_apps/bindings
mkdir build
cd build
cmake .. -DPYTHON_MAJOR_VERSION=3 -DPYTHON_MINOR_VERSION=8
make
e. Using the generated pip wheel
pip3 install ./pyds-1.1.0-py3-none*.whl
- clone ultralytics/yolov5
- 将
utils/gen_wts_yoloV5.py
复制到ultralytics/yolov5
- 使用
gen_wts_yoloV5.py
将pt
转换为wts
&cfg
文件python3 gen_wts_yoloV5.py -w yolov5n.pt
参考 https://grpc.io/docs/languages/python/quickstart/
cd configs/grpc
python3 -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. inference_result.proto
- 将
inference_result_pb2_grpc.py
第四行改为from . import inference_result_pb2 as inference__result__pb2
CUDA_VER=11.4 make -C thirdparty/nvdsinfer_custom_impl_Yolo
TODO: 重构这段 readme
python3 app.py [phone_call_detect|jam_detect] [-d|--rtsp_port_num=8553|--flask_address=0.0.0.0|flask_port=8554]
如: python3 app.py jam_detect --flask_port=8553
向 inference engine 添加需要推理的rtsp流
向 inference engine 发送 post 请求,默认地址是 http://127.0.0.1:19878/add_source,参数如下:
device_id: str, 设备id
rtsp_url: str, 需要推理的流
address: str, grpc_address (TODO: 改名字)
如:
curl -X POST \
-F device_id=12 \
-F rtsp_url=http://10.11.12.102:83/openUrl/YioPqRq/live.m3u8 \
-F grpc_address=10.5.24.131:50051 \
http://127.0.0.1:19878/add_source
另外,提供了一个角本来添加资源 bash scripts/flask_add_source.sh
原理跟添加资源相似,可参考 scripts/flask_remove_source.sh
可以通过 ffplay vlc 等媒体播放器查看实时的推理结果,默认 ip 为 rtsp://localhost:8554/ds-test