Connect with us

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

Лидеры мнений

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

mm

Автор: Maksym Tatariants, инженер по 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 модуля OpenCV.

Итак, что дальше после обнаружения лица? Далее система на основе Python и OpenCV покажет рамки ограничения и уверенность в обнаружении. Наконец, применяется алгоритм размытия к обрезанным областям.

Как можно создать программное обеспечение для обработки видео в реальном времени с помощью ИИ?

Нет секрета в том, что обработка видео, кодеки, которые ее обеспечивают, и как аппаратное, так и программное обеспечение, необходимое для этого, довольно технические по своей природе.

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

Вот краткое описание того, что вам нужно сделать:

  1. Начните с настройки вашей предварительно обученной нейронной сети для выполнения необходимых задач.
  2. Настройте свою облачную инфраструктуру для обработки видео и масштабируйте по мере необходимости.
  3. Создайте программный слой для упрощения процесса и интеграции конкретных вариантов использования, таких как мобильные приложения и административные или веб-панели.

Разработка MVP для подобного программного обеспечения для обработки видео может занять до четырех месяцев с использованием предварительно обученной нейронной сети и простых слоев приложения. Однако объем и сроки зависят от деталей каждого проекта. В большинстве случаев имеет смысл начинать с разработки концепции, чтобы изучить детали проекта и найти оптимальный поток.

Maksym стремится получить новые знания и опыт в области Data Science и Machine Learning. Он особенно интересуется технологиями на основе Deep Learning и их применением в бизнес-кейсах.