компьютердакак“Понимать”Массивныйвидеоиз Шерстяная ткань?видео По сутидасерия последовательныхизизображениерамка,Играть с определенной частотой кадров,Создавая таким образом непрерывный динамический эффект。поэтому,компьютеранализироватьвидеоиз Основной принципда:декодирование(видео Перенос фотографий)-> Анализ/Рассуждение (ИИ алгоритм)-> Кодирование (представление результата)
Хотя может показаться, что это всего лишь несколько шагов, здесь задействовано множество технических деталей и сложных алгоритмов. Например, как быстро развернуть модель алгоритма обученного изображения ИИ в реальных сценариях применения? Для программистов, которые не имели дело с компьютерным зрением (именуемым в дальнейшем CV), или инженеров-алгоритмистов, которые занимаются исключительно алгоритмами, может быть немного сложно реализовать + функции, связанные с анализом видео с помощью искусственного интеллекта. Однако по мере того, как видео становится все более популярным и используется в повседневной жизни, постепенно растет и спрос на обработку и анализ видеоданных.
Итак, сегодня HelloGitHub Он включает в себя структуру/структурированную структуру видеоанализа с открытым исходным кодом — VideoPipe, предназначенную для того, чтобы сделать разработку приложений для видеоанализа такой же простой, как и использование Django Писать Web Так же удобно。Оригинальный визуальный дисплей конвейера VideoPipe позволяет сразу увидеть статус обработки каждого шага.。Долженрамка Возможность легко интегрировать различные CV Модели предметной области можно легко реализовать с помощью технологии Plug-and-Play. AI Видеоанализ с поддержкой подходит для таких сценариев, как структурирование видео, поиск изображений, распознавание лиц и анализ поведения в сфере безопасности (распознавание карт, обнаружение дорожно-транспортных происшествий).
Адрес GitHub: https://github.com/sherlockchou86/VideoPipe.
Далее давайте проследим за автором проекта (Чжоу Чжи), чтобы понять и начать работу с VideoPipe, а затем углубимся в его внутреннюю структуру, чтобы узнать больше технических деталей.
VideoPipe Это основа для анализа и структурирования видео с использованием C++ компилировать Писать、полагатьсянемного、Простота в использовании。Это похоже на конвейер. Каждый узел независим друг от друга и может быть сопоставлен сам по себе.,Используется для построения различных типов конвейеров видеоанализа.,Применимо квидеоструктурированный、Поиск изображений、распознавание лиц、Такие сценарии, как поведенческий анализ в области безопасности (например, обнаружение дорожно-транспортных происшествий).
Вам просто нужно подготовить модель и знать, как анализировать ее выходные данные. Вывод может быть основан на различных реализациях серверной части, таких как OpenCV::DNN (по умолчанию), TensorRT, PaddleInference, ONNXRuntime и т. д., в зависимости от того, что вам нравится.
С помощью приведенной выше рабочей схемы VideoPipe вы можете обнаружить, что он предоставляет следующие функции:
Сравните аналоги со схожими функциями и знакомые DeepStream (NVIDIA) и mxVision(Huawei)рамка,VideoPipe Более простой в использовании и отладке, с лучшей переносимостью, он полностью состоит из собственных C++ Программирование Писать, опирается только на небольшой объём основных модулей сторонних производителей (таких как OpenCV)。Также предоставлено Визуальный конвейер,рамкаиз Работающий статус автоматически обновится на экране.,включая трубысерединакаждая точка соединенияиз fps, размер кэша, задержка и другую информацию, вы можете быстро обнаружить узкое место обработки на основе этой текущей информации.
имя | Это с открытым исходным кодом? | Порог обучения | Применимые платформы | производительность | Трехсторонняя зависимость |
---|---|---|---|---|---|
DeepStream | нет | высокий | только NVIDIA | высокий | много |
mxVision | нет | высокий | только Huawei | высокий | много |
VideoPipe | да | Низкий | Нет ограничений по платформам | середина | немного |
VideoPipe Никаких требований к аппаратному обеспечению машины нет, просто используйте CPU Все доступнокбегать,Никакой дополнительной карты-ускорителя не требуется. Более того, проект середина также предоставляет множество примеров кода.,Давайте запустим простой пример «распознавания лиц».,Начните быстро с этой рамкой.
/*
* имя: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) в конвейере.,Последовательность обработки выглядит следующим образом:
После запуска кода появится приведенное выше сообщение. 3 Картина. Это соответственно диаграмма состояния работы конвейера (статус автоматически обновляется), результаты отображения экрана (GUI), результаты отображения проигрывателя (RTMP), и с этого момента вы можете начать работу. VideoPipe Понятно!
Далее мы подробно представим технические принципы и детали реализации платформы VideoPipe. Вот и полезная информация! Прежде чем углубляться в технические детали платформы VideoPipe, нам необходимо сначала выяснить общий процесс обработки видео.
видео Структурированное да — это процесс преобразования неструктурированных данных (видео/изображений) в структурированные данныеиз. Неструктурированные данные обычно включают в себя: видео、изображение、Аудио、⾃Ран Ю⾔текст,Структурированные данные в основном включают в себя JSON, XML или серединаизданные таблицы библиотеки данных и т. д.,Эти данные могут обрабатываться непосредственно машинами (программами). Специально для видео (включая изображения),То же ниже) Структурированный процесс,В основном это включает в себя следующие основные части:
Каждая из приведенных выше ссылок соответствует VideoPipe серединаиз⼀ Тип плагина, код серединаиз Node объект. Ниже мы объясним одно за другим VideoPipe из Node、поток данные, крюкиз технические детали и реализация.
VideoPipe серединаизич Node Отвечает за одну задачу (строго следуя принципу единой ответственности), например, расшифровку или рассуждение. Мы можем объединить множество узлов в конвейер и позволить видеопотоку данные по всему конвейеру. каждый Node Внутри две очереди,⼼Кэш для вышестоящих узлов, изданных,Другой используется для ожидания отправки кэша на изданный нижестоящий узел. Мы можем запрограммировать логику Писать между двумя очередями.,Это типичная модель производитель-потребитель.
VideoPipe середина имеет три типа узлов соответственно:
Каждый узел сам по себе имеет возможность объединять вышестоящие узлы и разделять их на нижестоящие узлы. Уведомление,По умолчанию узлы используют мелкие копии и равные копии при передаче данных с одного узла на другой. Если вам нужна глубокая копия или вы хотите перенести данные по индексу канала (надеюсь, данные не перепутаны),Затем добавьте vp_split_node
Тип узла.
видеодаанные тяжеловесы,Таким образом, частые глубокие копии ухудшат работу конвейера. на самом деле,VideoPipe При передаче изданных между двумя узлами по умолчанию используются интеллектуальные указатели. После того как данные созданы исходным узлом, содержимое данных не будет копироваться по всему конвейеру середина большое количество раз. Но при необходимости мы можем указать режим глубокого копирования, используя vp_split_node
Тип узла.
видео состоит из последовательных кадров,Итак, VideoPipe обрабатывает эти кадры кадр за кадром.,Следовательно, индекс кадра элемента кадра данныесерединаиз также будет постоянно увеличиваться.
механизм крюкдаа,Позвольте субъекту уведомлять детектор о возникновении определенных событий.,VideoPipe Хуки также поддерживаются. Функция обратного вызова триггера конвейера std::function
Взаимодействие с внешним кодом, например с самим конвейером Live Push. fps、Задержка и другая информация о состоянии。я Мы здеськомпилировать Писать При вызове кода внутри функции,Никакие препятствия не допускаются,нет влияет на производительность всего конвейера.
крюк помогает отлаживать наши приложения,и быстро выявлять узкие места на всем протяжении трубопровода,VideoPipe рамкасередина поставляется с инструментами визуализации. vp_analysis_board
Просто да полагается на механизм крюка для реализации.
первый vp_node
да VideoPipe середина Все узлы базового класса, мы можем определить из vp_node
Создайте новый класс узла и переопределите некоторые виртуальные функции:
handle_frame_meta
:Обработка проходит через текущий узелизрамкаданные。handle_control_meta
:Обработка проходит через текущий узелизинструкции по контролюданные。рамкаданныеобратитесь кизда VideoPipe серединаиз vp_frame_meta
,Его середина содержит связанные с фреймом изданные,нравитьсярамкаиндекс、данныебуфер、исходная ширина и т. д.。инструкции по контролюданныеобратитесь кизда VideoPipe серединаиз vp_control_meta
,Его середина содержит порядок, связанный с изданными,Например, записывать видео, записывать изображения и т. д. Не все потоки через текущий узел изданные должны обрабатываться,Нам нужно обрабатывать только тот контент, который нас интересует.
В настоящее время на основе глубокого обучения анализ Технологии Входной барьер все еще относительно низок, некоторые зрелые израмки, такие как DeepStream、mxVision и т. д. Они сложны для понимания, трудны для понимания и не очень удобны для новичков. Итак, я потратил два года в свободное время на создание VideoPipe Видео анализрамка,яиз Идея очень простадахочуНовички смогут быстро разобраться Видео анализ стека связанных технологий,Легко запустите приложение распознавания лиц на своем компьютере.,Пусть больше людей освоят технологии, связанные с видеоанализом,Также подумайте, с чего начать.
Я прекрасно знаю, что это дело трудное и долгосрочное, поэтому VideoPipe даполностью Открытый при рождении исходный код, я надеюсь, что смогу использовать Открытый исходный Сила кодиза заставляет его «сиять» и по-настоящему достигать цели по уменьшению Низкого и развитию Видео анализируйте приложение из порога, чтобы помочь большему количеству разработчиков войти в Видео поле анализа.
Адрес GitHub: https://github.com/sherlockchou86/VideoPipe.
Наконец, благодаря «HelloStar «Проект» предоставляет возможность рассказать большему количеству людей о VideoPipe рамка。якак Открытый исходный кодэкологический из Бенефициар, хорошо знающий Открытый исходный кодиз Сила и ответственность, этот шаг тоже дает надежду VideoPipe Проект может стать зданием, соединяющим Видео анализирует, интересуется структурированными технологиями от мелких партнеров до бриджа, может общаться и учиться со всеми, вместе добиваться прогресса и вносить свой вклад Открытый исходный кодовое сообщество!
- END -