Впровадження старіння/омолодження обличчя з штучним інтелектом в мобільному додатку
Ефекти старіння та омолодження — одна з небагатьох AI-фіч, де на пристрої обробка реально конкурує з серверною. Спеціалізовані моделі (SAM — Style-based Age Manipulation, FRAN — Face Re-Aging Network) мають компактні дистильовані версії. FaceApp історично будувався саме на на пристрої інференсі — звідси миттєвий відклик інтерфейсу.
На пристрої: FRAN через CoreML
FRAN (Face Re-Aging Network від Netflix Research) — опенсорсна модель, навчена на синтетичних даних. Приймає зображення обличчя + цільовий вік, повертає стилізований результат. Конвертована в CoreML версія важить ~45 MB у FLOAT16.
import CoreML
import Vision
class FaceAgingProcessor {
private let model: FRAN
func process(faceImage: CGImage, targetAge: Int) async throws -> CGImage {
// FRAN приймає нормалізоване зображення 256x256
let resized = try resize(image: faceImage, to: CGSize(width: 256, height: 256))
let input = FRANInput(
face_image: try MLMultiArray(from: resized),
target_age: MLMultiArray([Float(targetAge) / 100.0]) // нормалізуємо 0..1
)
let output = try await model.prediction(input: input)
return try cgImage(from: output.output_face)
}
}
На iPhone 13+ з Neural Engine час інференсу — 60–90 мс. Це дозволяє робити live preview при перетаскуванні слайдера віку. iPhone X (A11 Bionic) — близько 200 мс, що все ще прийнятно для інтерактивного слайдера при debounce 150ms.
Детекція та вирівнювання — критично важливий крок
Якість результату FRAN сильно залежить від того, наскільки точно обличчя вирівняне перед інференсом. Стандартний пайплайн:
-
VNDetectFaceLandmarksRequest— отримуємо 76 точок (iOS) або MediaPipe Face Mesh (468 точок) на Android - Обчислюємо афінне перетворення за 5 ключовими точками (очі, ніс, кути рота)
- Warp-трансформація через
vImage(iOS) або OpenCV на Android - Після інференсу — обернена трансформація + Poisson blending по маці обличчя
Без вирівнювання модель дає видимі артефакти при будь-якому нахилі голови більше 15°. Найчастіша причина поганих результатів у дешевих реалізаціях.
Poisson Blending на iOS
Стандартний CIBlendWithMask дає жорстку границю маски. Для плавного переходу — Poisson Image Editing. iOS не має вбудованого методу, тому або Metal шейдер, або Accelerate Framework з рішенням системи лінійних рівнянь. Другий варіант повільніше, але не вимагає написання GLSL.
Серверний шлях: коли потрібна більша якість
Для програм, де важливий фотореалізм (наприклад, прогноз віку в медичному або страховому контексті), серверні моделі класу SAM2 або StyleGAN-based дають істотно кращий результат:
- Replicate:
yuval-alaluf/sam— 10–20 секунд, висока якість - Власний бекенд на A100: ~2–3 секунди, повний контроль над моделлю
API-вклик стандартний: multipart/form-data з зображенням та параметром target_age. Результат — посилання на оброблений файл.
Комбінація: на пристрої preview + серверний експорт
Найкращий UX для користувача: миттєвий на пристрої preview в 256×256 при русі слайдера віку, та кнопка «Зберегти» запускає серверну обробку в оригінальній роздільній здатності. Поки сервер працює — показуємо анімацію. Результат зберігається в Camera Roll через PHPhotoLibrary.
Android: WorkManager для серверного запиту — він пережиє згортання програми. Notification по завершенню.
Приватність та App Store
Програми з віковими трансформаціями проходили ревю без проблем — немає обмежень, аналогічних face swap. Але якщо фото завантажується на сервер — обов'язкова Privacy Nutrition Label з Photos, використання App Functionality. Додати NSPhotoLibraryUsageDescription та NSCameraUsageDescription з конкретним описом.
Вихідні фото з сервера видаляємо одразу після обробки.
Терміни
На пристрої інтеграція FRAN з вирівнюванням та blending — 5–8 днів. Гібридний режим (на пристрої preview + серверний експорт) — 2–3 тижні. Вартість розраховується після уточнення вимог.







