Багато команд стикаються з двома основними проблемами при впровадженні заміни обличчя: відхилення додатку через невідповідність правилам стору та недостатня якість заміни — артефакти, невідповідність кольору шкіри, неприродні контури. Розглянемо архітектуру production-ready пайплайну face swap, включаючи on-device та API-підходи, пост-обробку, модерацію контенту та вимоги синдикатів App Store та Google Play. Зв'яжіться з нами для оцінки вашого проєкту.
Чому on-device face swap — рідкість?
Моделі SimSwap (300 MB), FaceShifter (250 MB), GHOST (100 MB) потребують GPU. TFLite-порти втрачають ~15% якості. MediaPipe Face Mesh дає 468 landmarks у реальному часі — ми використовуємо їх для alignment. Однак сам swap потребує нейромережевого інференсу. On-device реалізація можлива через Core ML на iPhone 14 Pro+: дистильована модель обробляє кадр за 1–3 секунди. На Android — GPU-делегат TFLite, але поведінка різна (Adreno 730 vs PowerVR). У продакшен-додатках частіше використовують API: InsightFace, Akool, DeepFaceLab. Akool face_swap endpoint повертає результат за 5–15 секунд.
API-підхід швидше впровадити та економить ресурси пристрою, але on-device гарантує конфіденційність та роботу офлайн. Ми пропонуємо обидва варіанти залежно від завдань клієнта.
| Бібліотека | Платформа | Ключові особливості |
|---|---|---|
| MediaPipe Face Mesh | Android/iOS | 468 landmarks, real-time, <30ms |
| ML Kit Face Detection | Android/iOS | 5+ облич, classifications, немає mesh |
| Параметр | On-device | API |
|---|---|---|
| Час обробки | 1–3 с (Core ML) | 5–15 с |
| Якість | Залежить від моделі (втрата ~10%) | Висока (повна модель) |
| Конфіденційність | Дані на пристрої | Передача на сервер |
| Вимоги до заліза | GPU (A13+, Adreno 6xx) | Будь-який пристрій з інтернетом |
| Вартість інфраструктури | Немає | Оплата запитів |
Як виконується пост-обробка після заміни обличчя?
Навіть хороший face swap дає артефакти. На iOS ми застосовуємо CIFilter(name: "CIGaussianBlur") по масці обличчя та CIBlendWithMask для плавного переходу; для складних випадків — Metal Performance Shaders. Колір шкіри між обличчям та шиєю може не збігатися — colour transfer через LAB-кольоровий простір з фільтром CIColorCube. На Android використовуємо OpenCV для GaussianBlur та inpaint. Економія на інфраструктурі при on-device може сягати суттєвих значень порівняно з API при високому навантаженні.
Пайплайн обробки на клієнті
До відправки на сервер потрібна передобробка:
// Android: детекція та кропування обличчя перед відправкою
class FacePreprocessor(private val context: Context) {
private val detector = FaceDetection.getClient(
FaceDetectorOptions.Builder()
.setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_ACCURATE)
.setLandmarkMode(FaceDetectorOptions.LANDMARK_MODE_ALL)
.build()
)
suspend fun extractFace(bitmap: Bitmap): FaceExtractionResult {
val image = InputImage.fromBitmap(bitmap, 0)
val faces = detector.process(image).await()
if (faces.isEmpty()) throw FaceSwapError.NoFaceDetected
if (faces.size > 1) throw FaceSwapError.MultipleFaces
val face = faces.first()
val bounds = face.boundingBox
// Expand bounds by 40% for better context
val expandedBounds = expandRect(bounds, 0.4f, bitmap.width, bitmap.height)
val croppedBitmap = Bitmap.createBitmap(
bitmap, expandedBounds.left, expandedBounds.top,
expandedBounds.width(), expandedBounds.height()
)
return FaceExtractionResult(croppedBitmap, face.headEulerAngleY)
}
}
Кут повороту голови (headEulerAngleY) важливий: при відхиленні >30° якість swap різко падає — про це варто попередити користувача.
Процес роботи
- Аналітика: визначення джерела (фото, відео), вибір підходу (on-device/API), оцінка метрик.
- Проєктування: розробка архітектури, вибір моделей (Core ML/TFLite), дизайн UI.
- Реалізація: інтеграція детекції облич (MediaPipe, ML Kit), передобробка, відправка запиту, пост-обробка.
- Тестування: перевірка на різних пристроях, A/B тестування якості, стрес-тести.
- Деплой: публікація в App Store/Google Play, налаштування модерації, моніторинг.
Що входить в роботу
Повний пакет включає:
- Документація з архітектури та інтеграції API (специфікації endpoints, postman collection).
- Доступи до API (тестові ключі, пісочниця).
- Навчання команди замовника (2-3 воркшопи з роботи з пайплайном та модерацією).
- Технічна підтримка на етапі впровадження та після релізу (1 місяць).
- Інтеграція ватермарка та дисклеймера, налаштування Terms of Service під вимоги стору.
Правові обмеження та модерація
Face swap — область з жорсткими вимогами App Store Review Guidelines (Guideline 1.1 Objectionable Content). Apple відхиляє додатки, які:
- дозволяють вставити чуже обличчя без явної згоди;
- не мають watermark або маркування AI-generated;
- можуть використовуватися для deepfake.
Обов'язковий мінімум: watermark на результаті, явний дисклеймер в onboarding, Terms of Service із забороною використання реальних облич без згоди, система репортингу контенту.
Детальніше про вимоги Store
Згідно з політикою Apple, додатки з AI-заміною облич повинні забезпечувати прозорість використання AI та можливість повідомити про порушення. Google Play також вимагає маркування AI-контенту.Content moderation на сервері: перед генерацією прогнати через Amazon Rekognition DetectModerationLabels або Google Cloud Vision Safe Search. Якщо вхідне фото flagged — відхилити на backend, не доводити до генерації.
Зберігання та видалення
Результати face swap не повинні зберігатися на сервері довше, ніж потрібно для доставки клієнту. Стандартна практика: TTL 24-48 годин, потім автовидалення з S3/GCS. Вхідні фото — видаляти одразу після обробки.
Строки
Базова інтеграція API з детекцією обличчя та відображенням результату — 4-6 днів. З blending пост-обробки, модерацією контенту, watermarking та відповідністю стор-політикам — 3-4 тижні. Вартість розраховується індивідуально після аудиту вашого проєкту. Ми — команда сертифікованих розробників з 5+ років досвіду в мобільній розробці та AI, що реалізувала 10+ проєктів з face swap. Замовте тестову інтеграцію або отримайте консультацію — оцінимо ваш проєкт безкоштовно.







