Лидеры мнений
Применение ИИ в обработке видео в реальном времени: основы и больше

Максим Татарянц, инженер по данным в Data Science в MobiDev.
Нет ничего нового в использовании искусственного интеллекта (ИИ) в обработке видео. Если вы посмотрите за пределы обработки изображений – это один из наиболее распространенных случаев использования ИИ. И как в случае с обработкой изображений, обработка видео использует установленные методы, такие как компьютерное зрение, распознавание объектов, машинное обучение и глубокое обучение для улучшения этого процесса.
Независимо от того, используете ли вы компьютерное зрение и NLP в видеомонтаже и генерации, распознавание объектов в автоматическом тегировании видеоконтента, машинное обучение для оптимизации анализа видео с помощью ИИ или глубокое обучение для ускорения удаления фона в реальном времени, случаи использования продолжают расти с каждым днем.
Продолжайте читать, чтобы узнать, какой подход вы можете использовать при работе с ИИ в обработке видео.
Основы обработки видео в реальном времени
Давайте начнем с основ. Обработка видео в реальном времени – это важная технология в системах видеонаблюдения, использующих распознавание объектов и лица.
Итак, как работает обработка видео? Обработка видео включает в себя ряд шагов, которые включают декодирование, вычисления и кодирование. Вот что вам нужно знать:
- Декодирование: Процесс, необходимый для преобразования видео из сжатого файла обратно в его исходный формат.
- Вычисления: Конкретная операция, выполняемая над сырым кадром видео.
- Кодирование: Процесс перекодирования обработанного кадра обратно в его исходное сжатое состояние.
Теперь цель любой задачи обработки видео – выполнить эти шаги как можно быстрее и точнее. Самые простые способы достижения этого включают: параллельную обработку и оптимизацию алгоритма для скорости. В простых терминах? Вам нужно использовать разделение файлов и архитектуру конвейера.
Что такое разделение видеофайлов?
Разделение видеофайлов позволяет алгоритмам работать одновременно, позволяя им использовать более медленные, но точные модели. Это достигается путем разделения видео на отдельные части, которые затем обрабатываются одновременно.
Вы можете думать о разделении видео как о виде виртуальной генерации файлов, а не генерации подфайлов.
Несмотря на это, разделение видеофайлов не является лучшим вариантом для обработки видео в реальном времени. Почему именно? Этот процесс затрудняет паузу, возобновление и перемотку файла во время его обработки.
Что такое архитектура конвейера?
Другой вариант – архитектура конвейера. Этот процесс работает для разделения и параллелизации задач, выполняемых во время обработки, а не простого разделения видео.
Вот быстрый пример того, как выглядит архитектура конвейера на практике, и как она может быть использована в системе видеонаблюдения для обнаружения и размытия лиц в реальном времени.
В этом примере конвейер разделил задачи на декодирование, обнаружение лиц, размытие лиц и кодирование. И если вы хотите улучшить скорость конвейера, вы можете использовать техники глубокого обучения.
Декодирование и кодирование: объяснение
Что насчет декодирования и кодирования? Существует два способа выполнения этих процессов: программное и аппаратное.
Вы, возможно, уже знакомы с концепцией аппаратного ускорения. Этот процесс возможен благодаря декодерам и кодерам, установленным в последних видеокартах NVIDIA, а также ядрам CUDA.
Итак, какие варианты у вас есть для аппаратного ускорения при кодировании и декодировании? Вот некоторые из наиболее популярных вариантов:
- Скомпилируйте OpenCV с поддержкой CUDA: Скомпилируйте OpenCV с поддержкой CUDA, чтобы оптимизировать как декодирование, так и любые вычисления конвейера, которые используют OpenCV. Имейте в виду, что вам нужно будет написать их на C++, поскольку Python-обертка не поддерживает это. Но в ситуациях, когда требуется как декодирование, так и числовые вычисления с GPU без копирования из памяти CPU, это все еще один из лучших вариантов.
- Скомпилируйте FFmpeg или GStreamer с поддержкой кодеков NVDEC/NVENC: Другой вариант – использовать встроенный декодер и кодер NVIDIA, включенный в пользовательские установки FFmpeg и Gstreamer. Однако мы рекомендуем использовать FFmpeg, если это возможно, поскольку для этого требуется меньше обслуживания. Кроме того, большинство библиотек работают на основе FFmpeg, что означает, что вы автоматически повысите производительность библиотеки, заменив ее.
- Используйте фреймворк обработки видео NVIDIA: Наконец, вы можете использовать Python-обертку, чтобы декодировать кадр直接 в тензор PyTorch на GPU. Этот вариант удаляет дополнительное копирование из CPU в GPU.
Обнаружение и размытие лиц
Модели обнаружения объектов (SSD или RetinaFace) – популярный вариант для обнаружения лиц. Эти решения работают для обнаружения лица человека в кадре. И на основе нашего опыта, мы склоняемся к предпочтению моделей отслеживания лица Caffe и моделей обнаружения объектов TensorFlow, поскольку они давали лучшие результаты. Кроме того, обе доступны с помощью библиотеки dnn.
Итак, что дальше после обнаружения лица? Далее система на основе Python и OpenCV покажет рамки и уверенность в обнаружении. Наконец, применяется алгоритм размытия к обрезанным областям.
Как построить программное обеспечение для обработки видео в реальном времени с помощью ИИ?
Нет секрета в том, что обработка видео, кодеки, которые ее поддерживают, и как аппаратное, так и программное обеспечение, требуются довольно технические.
Тем не менее, это не означает, что вы не можете использовать эти инструменты для создания собственного программного обеспечения для обработки видео в реальном времени.
Вот краткое описание того, что вам нужно сделать:
- Начните с настройки вашей предварительно обученной нейронной сети для выполнения необходимых задач.
- Настройте свою облачную инфраструктуру для обработки видео и масштабируйте по мере необходимости.
- Создайте программный слой для упрощения процесса и интеграции конкретных случаев использования, таких как мобильные приложения и панели администратора или веб-панели.
Разработка MVP для подобного программного обеспечения для обработки видео может занять до четырех месяцев с помощью предварительно обученной нейронной сети и простых слоев приложения. Однако объем и сроки зависят от деталей каждого проекта. В большинстве случаев имеет смысл начать с разработки концепции, чтобы изучить детали проекта и найти оптимальный поток.














