Користувач завантажує відео — і у вас є секунди, щоб вирішити, чи показувати його іншим. Ручна перевірка не масштабується: оператори втомлюються, пропускають порушення, а черга в 10 хвилин вбиває Retention. Наша команда мобільних інженерів з досвідом в AI-модерації реалізувала 40+ проєктів для FinTech, EdTech і Social. Спеціалізація — інтеграція on-device моделей та хмарних API для автоматичної класифікації відеоконтенту. Нижче розберемо, як уникнути типових помилок і вибудувати надійну систему.
Де найчастіше виникають проблеми
Модерація в реальному часі vs постобробка
Найчастіший архітектурний прорахунок — намагатися гнати відео через модель покадрово на клієнті. CoreML на iPhone 14 Pro впорається з MobileNet v3 при 30 fps на коротких роликах, але це вбиває батарею та нагріває пристрій. На Android схожа картина з MediaPipe: обробка кожного кадру в ImageAnalysis.Analyzer при 1080p призводить до ImageProxy backlogs та крашів з java.lang.IllegalStateException: Image is already closed.
Правильний підхід для відео — не покадровий аналіз, а вибірковий: кожні N кадрів або ключові сцени через AVAssetImageGenerator (iOS) / MediaMetadataRetriever.getFrameAtTime() (Android). Для більшості завдань модерації достатньо 1 кадру на секунду.
Серверна модерація через Video Intelligence API
Для застосунків з UGC-відео вибудовуємо наступну схему: клієнт завантажує відео у сховище (S3/GCS), тригерить Cloud Function, яка викликає Google Video Intelligence API з фічами EXPLICIT_CONTENT та OBJECT_TRACKING. Відповідь — JSON з часовими мітками та confidence-оцінками по кожному сегменту.
// Android: запуск завантаження та передача URI на бекенд
val uploadRef = storageRef.child("uploads/${UUID.randomUUID()}.mp4")
uploadRef.putFile(localUri)
.addOnSuccessListener { taskSnapshot ->
taskSnapshot.storage.downloadUrl.addOnSuccessListener { downloadUri ->
moderationApi.submitVideo(downloadUri.toString(), onComplete = { result ->
when (result.verdict) {
ModerationVerdict.SAFE -> publishVideo()
ModerationVerdict.UNSAFE -> rejectWithReason(result.reason)
ModerationVerdict.REVIEW -> sendToHumanReview()
}
})
}
}
AWS Rekognition Video — альтернатива з аналогічним API: StartContentModeration + polling через GetContentModeration. Для синхронних сценаріїв (короткі reels до 30 сек) підходить Rekognition Image, застосовуваний до витягнутих кадрів — відповідь за 200–400 мс. Вартість обробки хвилини відео через Google Video Intelligence — від кількох центів за хвилину.
On-device передфільтрація
Перед відправкою на сервер має сенс прогнати перший та останній кадри відео через локальну CoreML/TFLite модель. Це відсікає очевидний NSFW ще на клієнті та економить трафік. NudeNet Lite у TFLite форматі займає близько 14 МБ і дає точність ~92% на бенчмарках NSFW-датасетів. Хибні спрацювання на медичному контенті — окрема історія, потребує whitelist-логіки на рівні категорії застосунку.
Як працює on-device передфільтрація?
On-device передфільтрація виконується на витягнутих ключових кадрах (перший та останній) через CoreML (iOS) або TFLite (Android). Модель — NudeNet Lite, розмір 14 МБ, точність 92% на NSFW-датасеті. Хибні спрацювання (медичний контент) відсікаються whitelist-логікою. On-device аналіз у 3 рази швидший за серверний roundtrip для очевидних порушень і економить до 30% трафіку.
Чому серверна модерація краща для UGC?
Серверна модерація через cloud API (Google Video Intelligence, AWS Rekognition) виграє по точності та масштабованості. On-device моделі обмежені обчислювальними ресурсами та підтримують лише базові класи (NSFW, violence). Для складної модерації (детекція зброї, контекстні порушення) потрібна серверна модель з великим контекстом. На практиці ми комбінуємо: швидкий on-device фільтр + хмарний глибокий аналіз для граничних випадків.
Порівняння рішень
| Параметр | On-device (CoreML/TFLite) | Cloud API (Google/AWS) | Live (WebRTC + MobileViT) |
|---|---|---|---|
| Затримка | 100–300 мс | 500–2000 мс | 2–4 сек на сегмент |
| Точність | 92% (NSFW) | 95–98% (всі класи) | 90% (компроміс) |
| Трафік | Не потребує | Відправка відео | Постійний потік |
| Вартість | Розробка моделі | від кількох центів за хвилину | Вища через real-time |
| Застосування | Передфільтрація | Основна модерація | Стріми |
Типові сценарії та рекомендовані рішення
| Сценарій | On-device фільтр | Хмарний аналіз | Live-стек |
|---|---|---|---|
| UGC-лента | Так (перший/останній кадр) | Так (Video Intelligence) | Ні |
| Stories | Так (кожен кадр при записі) | Так (після завантаження) | Ні |
| Live-стрімінг | Ні | Ні | Так (WebRTC + HLS) |
| Короткі reels (<30 сек) | Так (всі кадри) | Так (Rekognition Image) | Опціонально |
Як ми вибудовуємо рішення
Стек залежить від вимог до latency та бюджету. Для стартапів з невеликим трафіком — Google Video Intelligence API: платите лише за оброблені хвилини, не потрібно піднімати інфраструктуру. Для високонавантажених платформ — власний inference-сервіс на базі CLIP або кастомної ONNX-моделі за reverse proxy з кешуванням хешів вже перевірених відео (perceptual hashing через pHash запобігає повторній модерації одного й того ж ролика).
На клієнті (iOS/Android/Flutter) реалізуємо:
- прогрес-бар завантаження з
URLSession.uploadTask/okhttp3.MultipartBody - pending-стан відео у стрічці («на перевірці»)
- пуш-повідомлення про результат через FCM/APNs
Окремий кейс — live-стрімінг. Тут Video Intelligence API не підходить через latency. Використовуємо потокову передачу через WebRTC + серверний аналіз HLS-сегментів кожні 2–4 секунди з моделлю, оптимізованою під швидкість (MobileViT-S в TorchScript).
Що входить в роботу (deliverables)?
- Архітектурна документація (ADR)
- Інтеграція SDK завантаження та модерації
- UI станів (pending, approved, rejected)
- Тестування на 100+ edge-кейсах
- Навчання team lead з адміністрування
- Гарантія на код 6 місяців
Процес роботи
- Аудит вимог: тип контенту (UGC, Stories, live), допустима затримка публікації, вимоги до compliance (GDPR, COPPA).
- Вибір стеку: on-device передфільтр + хмарна модерація vs повністю серверна.
- Розробка: інтеграція SDK завантаження, webhook/polling для результатів, UI статусів.
- Тестування на датасеті edge-cases: мультимовні субтитри у кадрі, медичний контент, мультиплікація.
Орієнтири по термінах
Інтеграція з Google Video Intelligence або AWS Rekognition Video — 3–5 днів. Додавання on-device передфільтра на CoreML/TFLite — ще 2–3 дні. Повне рішення з live-стрімінгом та системою human review — 3–4 тижні.
Зв'яжіться з нами для оцінки вашого проєкту — ми підготуємо пропозицію під ваш стек та навантаження. Замовте консультацію, щоб обговорити деталі.







