Архитектура приложения
Приложение для замены лиц в режиме реального времени реализовано полностью на языке программирования Rust, что позволяет достичь высокой производительности при минимальных накладных расходах.
Пайплайн обработки изображений
Обработка каждого кадра осуществляется последовательным выполнением четырёх этапов:
- RetinaFace – обнаруживает лица и ключевые точки на изображении;
- ArcFace – создаёт 512-мерный векторный отпечаток лица;
- InSwapper – выполняет замену лица на основе полученного отпечатка и региона цели;
- GFPGAN (опционально) – повышает качество изображения после замены.
Все этапы выполняются с использованием ONNX Runtime, обеспечивая высокую производительность без необходимости использования специализированных библиотек или ядер CUDA.
Многопоточная архитектура
Для достижения стабильной частоты кадров приложение использует три независимых потока:
- Поток захвата: отвечает за получение кадров с камеры и публикацию их в общую очередь;
- Поток пайплайна: обрабатывает поступающие кадры, выполняя все необходимые операции нейронных сетей;
- Поток пользовательского интерфейса: отображает результаты обработки пользователю.
Взаимодействие между потоками организовано таким образом, чтобы минимизировать блокировки и задержки. Для синхронизации используется механизм lock-free обмена данными, основанный на атомарных счетчиках поколений и замене указателей. Структура разделяемых данных оптимизирована для предотвращения ложного разделения ресурсов между процессорами.