Лідери думок
Застосування штучного інтелекту до обробки відео в реальному часі: Основи та більше

Від Максима Татар’янца, інженера з науки про дані в Data Science у компанії MobiDev.
Нічого нового немає в тому, що штучний інтелект (ШІ) використовується в обробці відео. Якщо ви дивитесь за рамки обробки зображень – це один з найпоширеніших випадків використання ШІ. І як і обробка зображень, обробка відео використовує встановлені техніки, такі як комп’ютерне бачення, розпізнавання об’єктів, машинне навчання та глибоке навчання для поліпшення цього процесу.
Чи використовуєте ви комп’ютерне бачення та НЛП у редагуванні відео та генерації, розпізнавання об’єктів у автоматичному тегуванні відеоконтенту, машинне навчання для оптимізації аналізу відео ШІ, або глибоке навчання для прискорення обробки відео в реальному часі видалення фону, випадки використання продовжуються зростати з дня на день.
Продовжуйте читати, щоб дізнатися, який підхід ви можете використовувати при використанні ШІ в обробці відео.
Основи обробки відео в реальному часі
Давайте почнемо з основ. Обробка відео в реальному часі – це важлива технологія в системах відеоспостереження, які використовують розпізнавання об’єктів та облич. Це також процес, який живить програмне забезпечення ШІ для візуальної інспекції в промисловому секторі.
Отже, як працює обробка відео? Обробка відео включає в себе серію кроків, які включають декодування, обчислення та кодування. Ось що вам потрібно знати:
- Декодування: Процес, необхідний для перетворення відео з файлу, що стискається, назад у його первинний формат.
- Обчислення: Конкретна операція, виконана над первинним кадром відео.
- Кодування: Процес перетворення обробленого кадру назад у його первинний стиснутий стан.
Тепер мета будь-якого завдання обробки відео – завершити ці кроки якомога швидше та точно. Найлегші способи досягнення цього включають: паралельну роботу та оптимізацію алгоритму для швидкості. У простих термінах? Вам потрібно використовувати розділення файлів та архітектуру конвеєра.
Що таке розділення відеофайлів?
Розділення відеофайлів дозволяє алгоритмам працювати одночасно, дозволяючи їм використовувати повільніші, але більш точні моделі. Це досягається шляхом розділення відео на окремі частини, які потім обробляються одночасно.
Ви можете вважати розділення відео формою віртуальної генерації файлів, а не генерації підфайлів.
Незважаючи на це, розділення відеофайлів не є найкращим варіантом для обробки відео в реальному часі. Чому саме? Цей процес робить важким паузу, відновлення та перемотування файлу під час його обробки.
Що таке архітектура конвеєра?
Інший варіант – архітектура конвеєра. Цей процес працює над розділенням та паралелізмом завдань, виконуваних під час обробки, а не просто розділенням відео.
Ось швидкий приклад того, як архітектура конвеєра виглядає на практиці, та як її можна використовувати в системі відеоспостереження для виявлення та розмиття облич у реальному часі.
У цьому прикладі конвеєр розділив завдання на декодування, виявлення облич, розмиття облич та кодування. І якщо ви хочете поліпшити швидкість конвеєра, ви можете використовувати глибоке навчання.
Декодування та кодування: пояснення
А що щодо декодування та кодування? Є два способи виконання цих процесів: програмне забезпечення та апаратне забезпечення.
Ви вже можете бути знайомі з концепцією апаратного прискорення. Цей процес можливий завдяки декодерам та кодерам, встановленим у найновіших графічних картах 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, оскільки вони забезпечили кращі результати. Крім того, обидва доступні за допомогою бібліотеки OpenCV модуль dnn.
Отже, що далі після виявлення обличчя? Далі система на основі Python та OpenCV покаже рамки обмеження та впевненість у виявленні. Нарешті, алгоритм розмиття застосовується до обрізаних областей.
Як можна створити програмне забезпечення для обробки відео в реальному часі з допомогою ШІ?
Немає секрету в тому, що обробка відео, кодеки, які живлять її, та апаратне та програмне забезпечення, необхідне для цього, є досить технічними.
Все ж таки, це не означає, що ви не можете використовувати ці інструменти для створення власного програмного забезпечення для обробки відео в реальному часі.
Ось короткий опис того, що вам потрібно зробити:
- Почніть з налаштування вашої попередньо навченої нейронної мережі для виконання завдань, необхідних для цього.
- Налаштуйте вашу інфраструктуру хмари для обробки відео та масштабуйте за необхідністю.
- Створіть програмний шар для звуження процесу та інтеграції конкретних випадків використання, таких як мобільні додатки та панелі адміністратора або веб-панелі.
Розробка MVP для подібного програмного забезпечення для обробки відео може зайняти до чотирьох місяців за допомогою попередньо навченої нейронної мережі та простих програмних шарів. Однак обсяг та термін залежать від деталей кожного проекту. У більшості випадків має сенс починати з розробки концепції, щоб вивчити особливості проекту та знайти оптимальний потік.














