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

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

Хотя может показаться, что это всего лишь несколько шагов, здесь задействовано множество технических деталей и сложных алгоритмов. Например, как быстро развернуть модель алгоритма обученного изображения ИИ в реальных сценариях применения? Для программистов, которые не имели дело с компьютерным зрением (именуемым в дальнейшем 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
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода