Настройка NVIDIA DeepStream для Edge-видеоаналитики

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Настройка NVIDIA DeepStream для Edge-видеоаналитики
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1240
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1167
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    867
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1084
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    829

Разработка видеоаналитики на базе 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 "из коробки". Пути:

  1. ultralytics/ultralytics — экспорт в TensorRT engine напрямую
  2. marcoslucianops/DeepStream-Yolo — Custom parser для разных версий YOLO
  3. Кастомный 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 недель.