Замена лиц в реальном времени на локальном ПК: GPU, FPS, камера и приватность
Живая замена лиц — это фиксированный бюджет времени на кадр. Понимание того, какой этап расходует этот бюджет, отделяет рабочий предпросмотр от слайд-шоу.

Коротко: Замена лиц в реальном времени выполняет весь путь «детекция — замена — композитинг» для каждого кадра веб-камеры прямо на вашей машине. Частоту кадров задаёт самый медленный этап, аппаратное ускорение определяет практическую пригодность, а больше всего FPS обычно съедает улучшение лица.
Экспорт видео может занимать сколько угодно. Живой предпросмотр — нет. При 30 FPS на кадр есть около 33 миллисекунд, чтобы захватить изображение, найти лица, заменить их, при необходимости восстановить и вывести на экран. Всё дальнейшее следует из этого ограничения.
Перед выходом в живой режим
Используйте собственное лицо или портрет, на который у вас есть явное разрешение, и не скрывайте, что изображение с камеры изменено. Не применяйте живую замену лиц для выдачи себя за другого, мошенничества, обхода проверки личности или преследования. См. правила ответственного использования.
1. Что происходит с каждым кадром камеры
Живой путь — это цикл, и у каждого этапа есть цена:
- Захват. Кадр берётся с камеры в запрошенном разрешении и с запрошенной частотой.
- Детекция и анализ. Лица в кадре находятся и описываются, включая эмбеддинг, по которому решается, кто есть кто.
- Назначение. Каждое найденное лицо сопоставляется с исходным: либо общий источник по умолчанию, либо ближайшее совпадение среди сопоставленных личностей.
- Замена. Модель выполняется по разу на каждую пару «источник — цель», результат накладывается на кадр.
- Необязательное восстановление. Если улучшение включено и среда выполнения поддерживает его в живом режиме, на каждое лицо выполняется проход восстановления.
- Вывод. Готовый кадр кодируется и передаётся в окно приложения по локальному loopback-соединению.
Отсюда сразу два следствия. Первое: конвейер считается на лицо, а не на кадр — два человека в кадре примерно удваивают работу замены и восстановления. Второе: видимая частота кадров задаётся самым медленным этапом, поэтому более быстрая камера не поможет, если узкое место — улучшение.
2. Захват камеры: что приложение просит и что получает
Deep Face Cam открывает камеру с запросом 960×540 при 60 FPS в MJPG, а затем считывает то, что устройство выдало на самом деле. Этот запрос сделан осознанно: 540p — разумное рабочее разрешение для живого режима, а запрос MJPG при открытии особенно важен в Windows, где веб-камера, оставшаяся в несжатом формате, может упереться в пропускную способность и выдавать единицы кадров в секунду.
В Windows приложение сначала пробует DirectShow, затем Media Foundation и только потом общий запасной вариант, потому что эти бэкенды перечисляют камеры в разном порядке и не каждое устройство одинаково работает с каждым из них. В macOS используется AVFoundation с общим запасным вариантом.
Реальная частота кадров измеряется эмпирически, а не берётся из отчёта драйвера, потому что в DirectShow это значение ненадёжно: камера, выдающая 60 FPS, часто сообщает 30. Чтобы увидеть измеренное значение, включите Show FPS в панели настроек.
3. Execution provider: настройка, которая решает всё остальное
Инференс идёт через ONNX Runtime, и выбранный execution provider — крупнейший отдельный фактор живой производительности. Бэкенд определяет доступное при запуске и предпочитает в таком порядке:
| Провайдер | Платформа | Примечания |
|---|---|---|
| CUDA | Windows, видеокарты NVIDIA | Лучшая производительность на NVIDIA, но чувствителен к совместимости драйвера, CUDA и cuDNN. |
| ROCm | Вычислительный стек AMD | При наличии предпочитается перед CoreML и DirectML. |
| CoreML | macOS, Apple silicon | Используется вместо PyTorch MPS; может работать на CPU, GPU и Neural Engine в зависимости от разбиения модели. |
| DirectML | Windows | Широкая поддержка видеокарт NVIDIA, AMD и Intel. |
| CPU | Все платформы | Максимальная совместимость, минимальная скорость. Пригоден для экспорта, тяжелее всего в живом режиме. |
Windows поставляется отдельными сборками CPU, DirectML и CUDA из разных наборов зависимостей, поэтому выбор правильного установщика — часть этого решения, а не переключатель, который меняют потом. На Apple silicon приложение дополнительно пишет кэш-файлы CoreML в ваш каталог моделей, из-за чего первый запуск модели может быть медленнее последующих.
Отдельно стоит помнить: живое восстановление лица включается только при CUDA или DirectML. На других провайдерах живой конвейер выполняет лишь замену, тогда как экспорт изображений и видео по-прежнему может использовать любое улучшение. Подробности — в сравнении GFPGAN и GPEN.
4. Куда уходят ваши FPS
Если живой предпросмотр тормозит, идите по списку сверху вниз. Он отсортирован по тому, сколько времени обычно стоит каждый пункт относительно того, насколько легко его изменить.
| Фактор | Влияние | Что попробовать первым |
|---|---|---|
| Улучшение лица | Наибольшее. Полный проход восстановления на каждое лицо в каждом кадре. | Выключить или перейти на модель 256. |
| Число лиц | Высокое. И замена, и восстановление считаются на лицо. | Скомпонуйте кадр так, чтобы в нём были только нужные лица. |
| Execution provider | Высокое. Живой режим только на CPU — самый тяжёлый случай. | Поставьте сборку под вашу видеокарту. |
| Разрешение захвата | Среднее. Влияет на стоимость детекции и композитинга. | Держите живое разрешение умеренным: это не экспорт. |
| Формат камеры | Среднее и часто незаметное. Несжатый формат душит само устройство. | Проверьте измеренную частоту через Show FPS. |
| Другая нагрузка на GPU | Переменное. Игры, энкодеры и браузеры делят то же устройство. | Закройте тяжёлые для GPU приложения на время сеанса. |
| Тепловые ограничения | Постепенное. Ноутбуки снижают частоты через несколько минут. | Оценивайте устойчивый FPS, а не первые тридцать секунд. |
Различайте частоту кадров и задержку. Предпросмотр может идти с комфортной частотой и всё равно ощущаться запаздывающим, потому что каждый кадр проходит несколько этапов и буфер. Если мешает именно задержка, снижайте работу на кадр, а не только разрешение.
Бюджет кадра, разрешение захвата и что фиксировать
Живой режим — это сначала арифметика и только потом настройка. Бюджет кадра задаётся целевой частотой, и захват, детекция, назначение, замена, необязательное восстановление и вывод должны уложиться в него.
| Целевая частота кадров | Время на кадр | Остаётся на детекцию, замену и восстановление |
|---|---|---|
| 15 FPS | 66.7 ms | ≈ 61 ms |
| 24 FPS | 41.7 ms | ≈ 37 ms |
| 30 FPS | 33.3 ms | ≈ 28 ms |
| 60 FPS | 16.7 ms | ≈ 12 ms |
Третий столбец предполагает около 5 мс на захват и вывод. Это допущение, а не измерение на вашей машине — воспринимайте его как форму задачи, а не как спецификацию.
| Разрешение захвата | Пикселей в кадре | Относительно значения по умолчанию 960 × 540 |
|---|---|---|
| 640 × 360 | 230,400 | 0.44× |
| 960 × 540 | 518,400 | 1.00× |
| 1280 × 720 | 921,600 | 1.78× |
| 1920 × 1080 | 2,073,600 | 4.00× |
Детекция и композитинг растут вместе с числом пикселей в кадре, а замена и восстановление — вместе с числом лиц. Поэтому повышение разрешения и появление второго человека стоят по-разному.
Что записывать при измерении
| Поле | Почему это важно |
|---|---|
| ОС и вариант сборки | CPU, DirectML и CUDA — разные сборки для Windows; macOS различается по архитектуре. |
| Execution provider | Крупнейший отдельный фактор, а также условие доступности живого восстановления. |
| GPU и версия драйвера | Производительность CUDA чувствительна к совместимости драйвера, CUDA и cuDNN. |
| Разрешение захвата | Задаёт стоимость детекции и композитинга на кадр. |
| Заявленный и измеренный FPS | В DirectShow камера, выдающая 60 кадров, часто сообщает 30. |
| Число лиц в кадре | Замена и восстановление считаются на лицо, поэтому работа умножается. |
| Настройка улучшения | Off / GPEN-256 / GPEN-512 / GFPGAN по устройству различаются по цене на лицо. |
| Устойчивый FPS через 5 минут | Ноутбуки снижают частоту; первые тридцать секунд — не реальная цифра. |
5. Как получить живой результат, который выдержит эфир
Живой режим прощает меньше, чем рендер файла, потому что вернуться и починить кадр нельзя. Большая часть качества задаётся до старта:
- Исходный портрет. Резкий, с ровным светом, близко к анфас. Те же правила, что и для видео, но здесь они важнее.
- Освещение. Ровный фронтальный свет лучше яркого окна за спиной. Контровой свет — самая частая причина того, что живая замена постоянно разваливается.
- Дистанция и кадрирование. Слишком мелкое лицо даёт детекции меньше материала.
- Движение. Быстрые повороты головы и рука поперёк лица — те самые кадры, где всё ломается; проверьте их намеренно, прежде чем полагаться на схему.
- Зеркалирование. Предпросмотр можно отразить по горизонтали: это влияет на естественность ваших движений, но не на геометрию результата.
Когда перед камерой больше одного человека, живое назначение — непрерывное решение по схожести, а не заранее разобранное сопоставление, поэтому оно по своей природе менее стабильно, чем размеченный видеофайл. Разницу объясняет руководство по нескольким лицам.
6. Что такое локальный предпросмотр и чем он не является
Об этом стоит сказать прямо, потому что это самое частое ошибочное предположение о живых инструментах замены лиц. Deep Face Cam показывает живой результат в собственном окне предпросмотра. Он не регистрируется как виртуальная веб-камера уровня системы, поэтому Zoom, Discord, OBS и браузеры не увидят его в списке камер.
Если вывод нужен внутри другого приложения, маршрутизировать его придётся отдельным ПО для захвата экрана или окна — со всеми оговорками по качеству, задержке и платформе. Не считайте, что это работает, пока не проверите конкретную цепочку сами. И помните: выдавать изменённое изображение с камеры за свою настоящую внешность на встрече или при проверке личности — ровно тот сценарий, который запрещают правила ответственного использования.
7. Приватность: что остаётся локальным, а что нет
«Локально» и «офлайн» — не одно и то же утверждение, и эта разница важнее всего именно для живой камеры.
- Основная обработка на устройстве. Кадры камеры, замену и предпросмотр обслуживает бэкенд, работающий на вашей машине.
- Предпросмотр идёт через loopback. Встроенный бэкенд отдаёт обработанные кадры в окно приложения по локальному соединению на 127.0.0.1 — это внутренний канал вашего компьютера, а не загрузка.
- Модели скачиваются один раз и с подтверждением. Крупные файлы моделей не входят в репозиторий; они загружаются в ваш каталог после подтверждения и проверяются по опубликованной контрольной сумме.
- Сетевая активность остаётся. Установщики, загрузка моделей, ссылки на документацию и проверки обновлений используют сеть.
- Созданные файлы остаются на диске. Модели, результаты, временные файлы и настройки лежат в пользовательском каталоге данных приложения.
Честная рекомендация одинакова для любого инструмента с такими заявлениями: протестируйте именно ту сборку, которой собираетесь пользоваться, доведите до конца первую загрузку моделей и понаблюдайте за поведением, прежде чем направлять её на что-то чувствительное. См. замечания о приватности.
Диагностика живого режима
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Камера не открывается | Устройство занято другим приложением или не подходит бэкенд. | Закройте другие приложения камеры; в Windows выполняется откат DirectShow → Media Foundation → общий вариант. |
| Очень низкая частота захвата | Камера согласовала несжатый формат. | Включите Show FPS и сравните с паспортной частотой камеры. |
| Улучшение недоступно в живом режиме | Среда выполнения не CUDA и не DirectML. | Проверьте провайдер; при экспорте изображений и видео улучшение работает. |
| Лицо пропадает при повороте | Детекция теряет лицо, сильно отклонённое от анфас. | Улучшите свет и кадрирование; проверьте диапазон движений заранее. |
| Лицо попадает не на того человека | Живое назначение — покадровое решение по схожести. | Уменьшите число людей в кадре или используйте работу через файл. |
| FPS падает через несколько минут | Тепловое троттлинг-ограничение. | Измеряйте устойчивую частоту, а не первые секунды. |
| Первый запуск заметно медленнее | Загрузка моделей и, на Apple silicon, генерация кэша CoreML. | Прогрейте один раз, затем измеряйте. |
Частые вопросы
Нужна ли видеокарта для замены лиц в реальном времени?
Путь через CPU выполнит конвейер, но именно в живом режиме ускорение важнее всего, потому что у каждого кадра фиксированный бюджет. По этой причине для Windows есть отдельные сборки CPU, DirectML и CUDA; на Apple silicon используется провайдер CoreML.
Можно ли использовать это как камеру в Zoom, Discord или OBS?
Напрямую нет. Приложение показывает результат в собственном окне и не регистрирует системную виртуальную камеру, поэтому другие приложения не увидят его как источник видео.
Почему живой FPS ниже паспортного значения камеры?
Потому что захват — только первый этап. Детекция, назначение, замена, необязательное восстановление и вывод должны уложиться в тот же бюджет, а темп задаёт самый медленный этап.
Какое разрешение выбрать для живого режима?
Ниже, чем для экспорта. По умолчанию приложение нацелено на захват 960×540 — разумная рабочая точка для предпросмотра; прогонять 4K через конвейер реального времени смысла нет.
Загружает ли живая замена лиц изображение с камеры куда-либо?
Основная обработка идёт на вашей машине, а предпросмотр передаётся по локальному loopback-соединению. Сеть по-прежнему используется для подтверждённых загрузок моделей и ссылок, поэтому проверьте поведение установленной сборки.
Могут ли два человека пользоваться живым режимом одновременно?
Могут, но назначение определяется по схожести в каждом кадре, а не по заранее разобранной карте, поэтому оно менее стабильно, чем размеченный рендер. Относитесь к этому как к предпросмотру.
Настройте живой режим один раз, а дальше измеряйте
Выберите сборку под свою видеокарту, включите Show FPS и протестируйте с выключенным улучшением, прежде чем решать, что ваша машина способна держать.