Ваша первая платформа для анализа видео с открытым исходным кодом
Ваша первая платформа для анализа видео с открытым исходным кодом
Сейчас,Кисть видео стала частью нашей жизни серединаиз,И легко смотреть на это и не в силах остановиться. Вам когда-нибудь было любопытно,Как это да на просторах видео,Найдите извидео, которое вас интересует? И как да позволяет передавать ключевые слова,Вы искали контент, связанный с извидео? Все это неотделимо от компьютерного анализа и понимания контента.

компьютердакак“Понимать”Массивныйвидеоиз Шерстяная ткань?видео По сутидасерия последовательныхизизображениерамка,Играть с определенной частотой кадров,Создавая таким образом непрерывный динамический эффект。поэтому,компьютеранализироватьвидеоиз Основной принципда:декодирование(видео Перенос фотографий)-> Анализ/Рассуждение (ИИ алгоритм)-> Кодирование (представление результата)

Хотя может показаться, что это всего лишь несколько шагов, здесь задействовано множество технических деталей и сложных алгоритмов. Например, как быстро развернуть модель алгоритма обученного изображения ИИ в реальных сценариях применения? Для программистов, которые не имели дело с компьютерным зрением (именуемым в дальнейшем CV), или инженеров-алгоритмистов, которые занимаются исключительно алгоритмами, может быть немного сложно реализовать + функции, связанные с анализом видео с помощью искусственного интеллекта. Однако по мере того, как видео становится все более популярным и используется в повседневной жизни, постепенно растет и спрос на обработку и анализ видеоданных.

Итак, сегодня HelloGitHub Он включает в себя структуру/структурированную структуру видеоанализа с открытым исходным кодом — VideoPipe, предназначенную для того, чтобы сделать разработку приложений для видеоанализа такой же простой, как и использование Django Писать Web Так же удобно。Оригинальный визуальный дисплей конвейера VideoPipe позволяет сразу увидеть статус обработки каждого шага.。Долженрамка Возможность легко интегрировать различные CV Модели предметной области можно легко реализовать с помощью технологии Plug-and-Play. AI Видеоанализ с поддержкой подходит для таких сценариев, как структурирование видео, поиск изображений, распознавание лиц и анализ поведения в сфере безопасности (распознавание карт, обнаружение дорожно-транспортных происшествий).

Адрес GitHub: https://github.com/sherlockchou86/VideoPipe.

Далее давайте проследим за автором проекта (Чжоу Чжи), чтобы понять и начать работу с VideoPipe, а затем углубимся в его внутреннюю структуру, чтобы узнать больше технических деталей.

1. Введение

VideoPipe Это основа для анализа и структурирования видео с использованием C++ компилировать Писать、полагатьсянемного、Простота в использовании。Это похоже на конвейер. Каждый узел независим друг от друга и может быть сопоставлен сам по себе.,Используется для построения различных типов конвейеров видеоанализа.,Применимо квидеоструктурированный、Поиск изображений、распознавание лиц、Такие сценарии, как поведенческий анализ в области безопасности (например, обнаружение дорожно-транспортных происшествий).

Вам просто нужно подготовить модель и знать, как анализировать ее выходные данные. Вывод может быть основан на различных реализациях серверной части, таких как OpenCV::DNN (по умолчанию), TensorRT, PaddleInference, ONNXRuntime и т. д., в зависимости от того, что вам нравится.

С помощью приведенной выше рабочей схемы VideoPipe вы можете обнаружить, что он предоставляет следующие функции:

  • Чтение/передача потока: поддерживает основные протоколы потоковой передачи видео, такие как udp, rtsp, rtmp, файлы.
  • декодирование/кодирование видео: поддерживает декодирование/кодирование изображений на основе OpenCV/GStreamer извидео (поддерживает аппаратное ускорение).
  • Рассуждения на основе алгоритма глубокого обучения: поддерживает выводы на основе алгоритма глубокого обучения.,Например⽬Стандартное обнаружение、Классификация изображений、Извлечение функций.
  • Отслеживание целей: поддерживает отслеживание целей, например, алгоритмы отслеживания IOU, SORT и т. д.
  • Анализ поведения (BA): поддерживает поведенческий анализ на основе отслеживания.,Например Пересечь черту、останавливаться、Нарушения и другие нарушения правил дорожного движения.
  • данныеактерское мастерство:⽀Командирструктурированныйданные(json/xml/⾃определить формат)к kafka/Sokcet Отправка в облако, файлы или другие методы Сторонние платформы.
  • Запись: поддерживает запись определенных периодов времени и снимки экрана определенных кадров.
  • Экранное меню (OSD): поддерживает отображение результатов вывода модели в кадрах.

Сравните аналоги со схожими функциями и знакомые DeepStream (NVIDIA) и mxVision(Huawei)рамка,VideoPipe Более простой в использовании и отладке, с лучшей переносимостью, он полностью состоит из собственных C++ Программирование Писать, опирается только на небольшой объём основных модулей сторонних производителей (таких как OpenCV)。Также предоставлено Визуальный конвейер,рамкаиз Работающий статус автоматически обновится на экране.,включая трубысерединакаждая точка соединенияиз fps, размер кэша, задержка и другую информацию, вы можете быстро обнаружить узкое место обработки на основе этой текущей информации.

имя

Это с открытым исходным кодом?

Порог обучения

Применимые платформы

производительность

Трехсторонняя зависимость

DeepStream

нет

высокий

только NVIDIA

высокий

много

mxVision

нет

высокий

только Huawei

высокий

много

VideoPipe

да

Низкий

Нет ограничений по платформам

середина

немного

2. Приступайте к работе быстро

VideoPipe Никаких требований к аппаратному обеспечению машины нет, просто используйте CPU Все доступнокбегать,Никакой дополнительной карты-ускорителя не требуется. Более того, проект середина также предоставляет множество примеров кода.,Давайте запустим простой пример «распознавания лиц».,Начните быстро с этой рамкой.

Язык кода:javascript
копировать
/*
* имя:1-1-N sample
* Полный код находится по адресу: sample/1-1-N_sample.cpp.
* Описание функции: 1 видеовход, 1 видео задача анализа (обнаружение и распознавание лиц), 2 выхода (вывод на экран/вывод RTMP)
* Примечание. Файлы моделей и видео необходимо подготовить самостоятельно.
*/

int main() {
    VP_SET_LOG_INCLUDE_CODE_LOCATION(false);
    VP_SET_LOG_INCLUDE_THREAD_ID(false);
    VP_LOGGER_INIT();

    // 1. Создайте узлы
    // видеополучать Node
    auto file_src_0 = std::make_shared<vp_nodes::vp_file_src_node>("file_src_0", 0, "./test_video/10.mp4", 0.6);
    // 2、Модельное рассуждение Node
    // Вывод уровня 1: распознавание лиц
    auto yunet_face_detector_0 = std::make_shared<vp_nodes::vp_yunet_face_detector_node>("yunet_face_detector_0", "./models/face/face_detection_yunet_2022mar.onnx");
    // Рассуждение второго уровня: распознавание лиц
    auto sface_face_encoder_0 = std::make_shared<vp_nodes::vp_sface_feature_encoder_node>("sface_face_encoder_0", "./models/face/face_recognition_sface_2021dec.onnx");
    // 3、OSD Node
    // Результаты обработки отображаются на рамке.
    auto osd_0 = std::make_shared<vp_nodes::vp_face_osd_node_v2>("osd_0");
    // Экран дисплея
    auto screen_des_0 = std::make_shared<vp_nodes::vp_screen_des_node>("screen_des_0", 0);
    // Нажмите дисплей
    auto rtmp_des_0 = std::make_shared<vp_nodes::vp_rtmp_des_node>("rtmp_des_0", 0, "rtmp://192.168.77.60/live/10000");

    // Создайте конвейер для связывания результатов обработки узлов.
    yunet_face_detector_0->attach_to({file_src_0});
    sface_face_encoder_0->attach_to({yunet_face_detector_0});
    osd_0->attach_to({sface_face_encoder_0});

    // Конвейер автоматически разделяется, и результаты выводятся посредством потоковой передачи экрана/push.
    screen_des_0->attach_to({osd_0});
    rtmp_des_0->attach_to({osd_0});

    // Запустить конвейер
    file_src_0->start();

    // Визуальный конвейер
    vp_utils::vp_analysis_board board({file_src_0});
    board.display();
}

Прочитав приведенный выше пример кода, вы можете найти Рамка VideoPipeбудет Видео анализ/шаги процесса,Абстрагировано в трубу,Каждый шаг обработки включает в себя узел (Node) в конвейере.,Последовательность обработки выглядит следующим образом:

  1. видеочитать Узел: Завершить работу по чтению видео и декодированию из
  2. Узел вывода модели: разделен на две модели: обнаружение лиц и распознавание лиц.
  3. OSD Node:Экспортируйте модельиз Результаты обработки отображаются на рамке.
  4. Постройте конвейер: последовательно соедините вышеуказанные узлы и разделите результаты на вывод на экран и вывод на передачу.
  5. Старт: запустить программу,И показать статус работы трубопровода

После запуска кода появится приведенное выше сообщение. 3 Картина. Это соответственно диаграмма состояния работы конвейера (статус автоматически обновляется), результаты отображения экрана (GUI), результаты отображения проигрывателя (RTMP), и с этого момента вы можете начать работу. VideoPipe Понятно!

3. Технические принципы

Далее мы подробно представим технические принципы и детали реализации платформы VideoPipe. Вот и полезная информация! Прежде чем углубляться в технические детали платформы VideoPipe, нам необходимо сначала выяснить общий процесс обработки видео.

3.1 Основные ссылки приложения со структурированием видео

видео Структурированное да — это процесс преобразования неструктурированных данных (видео/изображений) в структурированные данныеиз. Неструктурированные данные обычно включают в себя: видео、изображение、Аудио、⾃Ран Ю⾔текст,Структурированные данные в основном включают в себя JSON, XML или серединаизданные таблицы библиотеки данных и т. д.,Эти данные могут обрабатываться непосредственно машинами (программами). Специально для видео (включая изображения),То же ниже) Структурированный процесс,В основном это включает в себя следующие основные части:

  • Чтение потока: получение потока из сети или локального компьютера.
  • Декодирование: декодируйте поток байтов в кадры, поскольку алгоритм работает только с изображениями.
  • Вывод: Выполняйте выводы глубокого обучения на изображениях, такие как обнаружение, классификация или извлечение признаков.
  • Отслеживать: отслеживать цель.
  • Анализ поведения/логическая обработка: анализируйте целевые траектории и атрибуты.
  • OSD: отображение результатов на изображениях для отладки или визуальных эффектов.
  • Брокер сообщений: отправляйте структурированную информацию наружу для использования бизнес-платформой.
  • Кодирование: кодирование кадра, содержащего результат, для передачи и хранения.
  • Push-поток: выведите поток байтов наружу или сохраните его напрямую.

Каждая из приведенных выше ссылок соответствует VideoPipe серединаиз⼀ Тип плагина, код серединаиз Node объект. Ниже мы объясним одно за другим VideoPipe из Node、поток данные, крюкиз технические детали и реализация.

3.2 Node

VideoPipe серединаизич Node Отвечает за одну задачу (строго следуя принципу единой ответственности), например, расшифровку или рассуждение. Мы можем объединить множество узлов в конвейер и позволить видеопотоку данные по всему конвейеру. каждый Node Внутри две очереди,⼼Кэш для вышестоящих узлов, изданных,Другой используется для ожидания отправки кэша на изданный нижестоящий узел. Мы можем запрограммировать логику Писать между двумя очередями.,Это типичная модель производитель-потребитель.

VideoPipe середина имеет три типа узлов соответственно:

  1. Узел SRC: исходный узел,данные были созданы из места (внутри только одна очередь,Используется для передачи кеша на нижестоящие узлы (изданные).
  2. Узел MID: межузел середина, здесь будут обрабатываться данные.
  3. Узел DES: целевой узел,данные пропадают там же (внутри только одна очередь,Используется для кэширования данных от вышестоящих узлов (изданных).

Каждый узел сам по себе имеет возможность объединять вышестоящие узлы и разделять их на нижестоящие узлы. Уведомление,По умолчанию узлы используют мелкие копии и равные копии при передаче данных с одного узла на другой. Если вам нужна глубокая копия или вы хотите перенести данные по индексу канала (надеюсь, данные не перепутаны),Затем добавьте vp_split_node Тип узла.

3.3 Поток данных

видеодаанные тяжеловесы,Таким образом, частые глубокие копии ухудшат работу конвейера. на самом деле,VideoPipe При передаче изданных между двумя узлами по умолчанию используются интеллектуальные указатели. После того как данные созданы исходным узлом, содержимое данных не будет копироваться по всему конвейеру середина большое количество раз. Но при необходимости мы можем указать режим глубокого копирования, используя vp_split_node Тип узла.

видео состоит из последовательных кадров,Итак, VideoPipe обрабатывает эти кадры кадр за кадром.,Следовательно, индекс кадра элемента кадра данныесерединаиз также будет постоянно увеличиваться.

3.4 Крючки

механизм крюкдаа,Позвольте субъекту уведомлять детектор о возникновении определенных событий.,VideoPipe Хуки также поддерживаются. Функция обратного вызова триггера конвейера std::function Взаимодействие с внешним кодом, например с самим конвейером Live Push. fps、Задержка и другая информация о состоянии。я Мы здеськомпилировать Писать При вызове кода внутри функции,Никакие препятствия не допускаются,нет влияет на производительность всего конвейера.

крюк помогает отлаживать наши приложения,и быстро выявлять узкие места на всем протяжении трубопровода,VideoPipe рамкасередина поставляется с инструментами визуализации. vp_analysis_board Просто да полагается на механизм крюка для реализации.

3.5 Как реализовать новый тип узла

первый vp_node да VideoPipe середина Все узлы базового класса, мы можем определить из vp_node Создайте новый класс узла и переопределите некоторые виртуальные функции:

  • handle_frame_meta:Обработка проходит через текущий узелизрамкаданные。
  • handle_control_meta:Обработка проходит через текущий узелизинструкции по контролюданные。

рамкаданныеобратитесь кизда VideoPipe серединаиз vp_frame_meta,Его середина содержит связанные с фреймом изданные,нравитьсярамкаиндекс、данныебуфер、исходная ширина и т. д.。инструкции по контролюданныеобратитесь кизда VideoPipe серединаиз vp_control_meta,Его середина содержит порядок, связанный с изданными,Например, записывать видео, записывать изображения и т. д. Не все потоки через текущий узел изданные должны обрабатываться,Нам нужно обрабатывать только тот контент, который нас интересует.

4. Наконец

В настоящее время на основе глубокого обучения анализ Технологии Входной барьер все еще относительно низок, некоторые зрелые израмки, такие как DeepStream、mxVision и т. д. Они сложны для понимания, трудны для понимания и не очень удобны для новичков. Итак, я потратил два года в свободное время на создание VideoPipe Видео анализрамка,яиз Идея очень простадахочуНовички смогут быстро разобраться Видео анализ стека связанных технологий,Легко запустите приложение распознавания лиц на своем компьютере.,Пусть больше людей освоят технологии, связанные с видеоанализом,Также подумайте, с чего начать.

Я прекрасно знаю, что это дело трудное и долгосрочное, поэтому VideoPipe даполностью Открытый при рождении исходный код, я надеюсь, что смогу использовать Открытый исходный Сила кодиза заставляет его «сиять» и по-настоящему достигать цели по уменьшению Низкого и развитию Видео анализируйте приложение из порога, чтобы помочь большему количеству разработчиков войти в Видео поле анализа.

Адрес GitHub: https://github.com/sherlockchou86/VideoPipe.

Наконец, благодаря «HelloStar «Проект» предоставляет возможность рассказать большему количеству людей о VideoPipe рамка。якак Открытый исходный кодэкологический из Бенефициар, хорошо знающий Открытый исходный кодиз Сила и ответственность, этот шаг тоже дает надежду VideoPipe Проект может стать зданием, соединяющим Видео анализирует, интересуется структурированными технологиями от мелких партнеров до бриджа, может общаться и учиться со всеми, вместе добиваться прогресса и вносить свой вклад Открытый исходный кодовое сообщество!

- END -

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose