Разработка видеоаналитики на базе NVIDIA DeepStream для Edge
DeepStream SDK — фреймворк NVIDIA для потоковой видеоаналитики с аппаратным ускорением. GStreamer-based пайплайн от декодирования RTSP до публикации метаданных в Kafka. На Jetson Orin обрабатывает 16+ HD-потоков с детекцией объектов в реальном времени.
Архитектура DeepStream пайплайна
GStreamer плагины DeepStream формируют линейный пайплайн:
[RTSP/File/USB] → nvv4l2decoder → nvstreammux → nvinfer → nvtracker
↓
[Kafka/MQTT/File] ← nvmsgbroker ← nvmsgconv ← nvdsosd ← nvinfer (secondary)
nvv4l2decoder: Hardware decode (H.264/H.265/AV1) через Jetson VPU. Zero-copy в GPU memory — нет CPU→GPU transfer.
nvstreammux: Мультиплексирует N потоков в batch. batch-size=8 → один вызов инференса для 8 кадров одновременно.
nvinfer: TensorRT engine внутри. Поддерживает detector (YOLO, SSD), classifier, segmentor. Конфиг через .txt файл — model engine, batch size, precision.
nvtracker: Multi-object tracking. Алгоритмы: IOU, NvSORT, NvDeepSORT (с ReID), NvDCF (correlation filter). DeepSORT: Re-ID сеть для удержания ID при перекрытиях.
nvmsgconv + nvmsgbroker: Конвертация метаданных bbox/trackID/class в JSON, публикация в Kafka, MQTT, Azure IoT Hub, AWS IoT.
Конфигурация под конкретные задачи
Охранное видеонаблюдение (16 RTSP-камер):
[primary-gie]
model-engine-file=yolov8n.engine
batch-size=16
interval=0 # каждый кадр
network-type=0 # detector
[tracker]
tracker-width=640
tracker-height=384
ll-lib-file=/opt/nvidia/deepstream/lib/libnvds_nvmultiobjecttracker.so
ll-config-file=nvdcf_tracking.yml
Производственный контроль качества (1–2 камеры высокого разрешения): batch-size=1, interval=0, primary detector → secondary classifier (дефект/норма). Высокое разрешение: tile-based inference через nvdspreprocess с overlapping tiles.
Подсчёт людей в зонах: nvinfer → nvtracker → nvdsanalytics. nvdsanalytics: ROI counting, line crossing detection, direction detection. Всё через конфиг без написания кода.
Кастомные модели
YOLO интеграция: Официальный DeepStream не включает YOLO "из коробки". Пути:
- ultralytics/ultralytics — экспорт в TensorRT engine напрямую
- marcoslucianops/DeepStream-Yolo — Custom parser для разных версий YOLO
- Кастомный nvdsinfer_custom_impl_Yolo — C++ парсер bbox/confidence
Custom parser для нестандартного output:
extern "C" bool NvDsInferParseCustomYoloV8(
std::vector<NvDsInferLayerInfo> const& outputLayersInfo,
NvDsInferNetworkInfo const& networkInfo,
NvDsInferParseDetectionParams const& detectionParams,
std::vector<NvDsInferObjectDetectionInfo>& objectList) {
// парсинг тензора → NvDsInferObjectDetectionInfo
}
Python биндинги (pyds)
Для кастомной логики в probe callbacks:
def osd_sink_pad_buffer_probe(pad, info, u_data):
gst_buffer = info.get_buffer()
batch_meta = pyds.gst_buffer_get_nvds_batch_meta(hash(gst_buffer))
for frame_meta in pyds.NvDsFrameMetaList(batch_meta.frame_meta_list):
for obj_meta in pyds.NvDsObjectMetaList(frame_meta.obj_meta_list):
if obj_meta.class_id == PERSON_CLASS:
# кастомная логика: фильтрация, алерты, запись
obj_meta.rect_params.border_color.set(1.0, 0, 0, 1.0)
Probe на любой pad пайплайна — полный доступ к метаданным без остановки потока.
Деплой на Jetson
JetPack 6.x: DeepStream 7.x, CUDA 12.2, TensorRT 8.6, OpenCV 4.8. Установка: apt install deepstream-7.0.
TensorRT engine генерация:
# конвертация ONNX → TRT engine на целевом устройстве
trtexec --onnx=yolov8n.onnx \
--saveEngine=yolov8n.engine \
--fp16 \
--workspace=2048 \
--minShapes=input:1x3x640x640 \
--optShapes=input:8x3x640x640 \
--maxShapes=input:16x3x640x640
Engine генерируется на конкретном железе — не переносим между разными Jetson SKU.
Контейнеризация: nvcr.io/nvidia/deepstream:7.0-gc-triton-devel. Docker на Jetson с --runtime nvidia. Оркестрация через docker-compose или K3s (lightweight Kubernetes).
Масштабирование и мониторинг
Метрики: DeepStream Prometheus exporter: fps per source, inference time, tracker update time, drop frame ratio. Grafana dashboard.
Multi-node: Kafka как транспорт метаданных между узлами. Каждый Jetson — producer. Центральный сервер — consumer + аггрегация.
Удалённое управление: DeepStream App Framework с REST API (ds-server): добавление/удаление RTSP источников без перезапуска пайплайна. PATCH /stream с новым URI.
Типичные конфигурации производительности
| Платформа | Потоков HD | Модель | FPS/поток |
|---|---|---|---|
| Jetson Orin AGX | 32 | YOLOv8n FP16 | 30 |
| Jetson Orin NX 16G | 16 | YOLOv8n FP16 | 30 |
| Jetson Orin Nano | 4 | YOLOv8n INT8 | 25 |
| RTX 4090 (x86) | 64+ | YOLOv8s FP16 | 30 |
Сроки: 4–8 недель
Базовая конфигурация с готовой моделью — 1–2 недели. Кастомные парсеры, интеграция с VMS (Milestone, Genetec), сложная бизнес-логика в probe callbacks — 6–8 недель.







