Настройка системы spoofing call
Информация несёт исключительно ознакомительный характер.
Для установки системы потребуется:
1) Основной ПК на котором будет запущен Deepfake софт
2) Пк/Ноутбук на котором будет проходить звонок
3) 2 телефона (Лучше всего подойдут Pixel)
4) 2 кабеля USB/TYPEC (поддерживающие передачу данных)
Программы
В системе Spoofing call используются программы:
1) DeepLiveCam (https://github.com/hacksider/Deep-Live-Cam)
2) BlueStacks (https://www.bluestacks.com/)
Система
Суть системы/общая картина/объяснение
В нашей системе есть ПК на котором запускается софт (Далее ПК1), который считывает лицо реального человека и подменяет его на нужное лицо в реальном времени. Есть ПК/Ноутбук на котором происходит звонок с оператором (Далее ПК2). В качестве веб камер будут использоваться телефоны Pixel (т.к. их удобно подключать и они выдают нужное качество картинки). Так же, в работе с ПК2 потребуется внешний микрофон, для того что бы в BlueStacs корректно передавался наш голос. Ну и для более удобного позиционирования и установки всей системы нужны будут держатели смартфонов.
На рисунке 1 представлено схематическое отображение построения системы.
Синим показан смартфон Pixel, который будет снимать лицо реального человека и передавать его в DeepLiveCam. Затем, на мониторе ПК1 будет на весь экран растянут вывод DeepLiveCam с уже изменённым лицом. Красным показан смартфон Pixel, который снимает монитор ПК1 и передаёт его на ПК2. Зелёным показан микрофон, подключенный к ПК2.
Рисунок 2 демонстрирует функционал системы.
Пояснение по оборудованию и настройке системы
Для получения оптимального результата работы системы требуется мощный ПК с производительной видео картой. Наши тесты были проведены на видеокартах 3060 и 4090, и на обеих этих картах получалось на выходе 25-35 фпс на стандартном режиме программы DeepFaceLive. Запуск DeepFaceLive в режиме улучшенного качества (Face Enhancer) на данных видеокартах выдавал, к сожалению, максимум 20 фпс. Однако, как показала практика, для выполнения рядовых задач подходят и такие качество и скорость картинки.
При выборе монитора главный показатель который стоит учитывать - PPI (количество пикселей на дюйм). Из-за того что мы снимаем камерой телефона экран монитора, при использовании обычного монитора с низким PPI будет виднеться сетка пикселей. Лучше всего подойдут мониторы с показателем PPI от 250 и выше, лучше всего 300-350. Вторым фактором который сильно облегчил бы работу системы является матовость монитора - если он будет матовым - вам не придётся бороться с лишними бликами путём выставления правильного света.
Почему для передачи изображения используются камеры? Дело в том что совершенного софта для создания дипфейков пока не существует - выходное изображение в любом случае будет содержать какие то неровности, баги наложения маски. Софт, который мы будем рассматривать в данном примере - оптимален на момент написания мануала, он выдаёт лучшую картинку из ныне существующих софтов. И тем не менее, в его выводе всё равно встречаются небольшие недочёты. Если передавать в звонок вывод DeepLiveCam напрямую - собеседник сможет разглядеть признаки наложения маски.
Камеры решают эту проблему: Камера, которой мы снимаем вывод DeepLiveCam(ПК1) специально подбирается не самого лучшего качества для скрытия дефектов наложения маски.
В качестве камер мы используем в своей системе смартфоны Pixel потому что они удобны в настройке и за свои деньги обладают хорошими камерами. Для того что бы снимать человека и его лицо используется Pixel 7,8 и т.д. (Синий телефон на рисунке 2). Для того что бы снимать монитор используется Pixel 6,6a (Красный телефон на рисунке 2). "Синий" Pixel, который снимает человека должен обладать хорошей камерой для того, что бы при появлении в кадре бумажки с текстом или пластика (который обычно сильно бликует) было видно каждую букву. "Красный" Pixel - наоборот, должен обладать худшей камерой для того что бы скрыть дефекты съёмки монитора (сетка пикселей, блики).
Тем не менее - если вам нужно передавать оригинальный вывод DeepLiveCam в звонок в BlueStacks - я подготовил альтернативный способы передачи картинки с ПК1 на ПК2, с которыми вы можете ознакомиться ниже.
Микрофон используется лишь для того, что бы программа BlueStacks не брала звук с устройства Pixel, т.к. если в программе не указать отдельный микрофон - по итогу в звонке ваш собеседник будет слышать шум и треск. Подойдёт любой, удовлетворяющий ваши ожидания о качестве звука.
Настройка системы
Настройка системы включает в себя:
- Установка DeepLiveCam на основной ПК
- Установка BlueStacks на ПК/ноутбук для звонков
- Подключение телефонов Pixel к компьютерам
- Настройка DeepLiveCam
- Настройка Bluestacks
Установка DeepLiveCam на основной ПК
На странице GitHub (https://github.com/hacksider/Deep-Live-Cam) Есть быстрая установка под Windows и пошаговая инструкция для ручной установки. Оба способа абсолютно рабочие - тут выбирайте что вам удобнее.
Я использую Chocolatey для установки этого софта, так что ещё прикладываю инструкцию по установке софта через него:
Открываем Powershell как администратор и запускаем:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
2- Устанавливаем Python, git, ffmpeg
choco install python --version=3.10.0
choco install git
choco install ffmpeg
3- Устанавливаем Visual Studio из https://visualstudio.microsoft.com/visual-cpp-build-tools/
4- "git clone https://github.com/hacksider/Deep-Live-Cam.git" и "cd Deep-Live-Cam"
5- Скачиваем 2 модели из https://huggingface.co/hacksider/deep-live-cam/tree/main и помещаем их в Deep-Live-Cam\models folder
6- "cd Deep-Live-Cam" и "pip install -r requirements.txt"
7- Если запускаете на CPU - запускаем python run.py
Для GPU:
8- Устанавливаем CUDA Toolkit 11.8 из https://developer.nvidia.com/cuda-11-8-0-download-archive
9- Устанавливаем зависимости:
pip uninstall onnxruntime onnxruntime-gpupip install onnxruntime-gpu==1.16.3
10- Запускаем:
python run.py --execution-provider cuda
Установка BlueStacks на ПК/ноутбук для звонков
Заходим на официальный сайт BlueStacks (https://www.bluestacks.com/) и устанавливаем любую версию программы.
Подключение телефонов Pixel к компьютерам
Теперь отвечу на вопрос - почему именно Pixel? В смартфонах Pixel есть встроенный режим веб камеры. Т.е. смартфоны пиксель, базово, на заводских настройках и без дополнительных программ можно использовать как веб камеры. Ну и немаловажный пункт - качество самих камер смартфонов Pixel, они выдают лучшую среди аналогов картинку. Вы можете использовать в своей работе и другие смартфоны, и веб камеры и обычные камеры, если хотите. Просто конкретно в данном гайде будет рассматриваться работа с устройствами Pixel.
Для того, что бы подключить смартфон Pixel как веб камеру к ПК, нужен провод TypeC. Будьте внимательны при выборе провода TypeC, они бывают с функцией передачи файлов и без. Нам нужен именно провод, поддерживающий функцию передачи файлов. Обычно провода, которые идут в комплекте с телефонами обладают этой функцией.
1) Подключаем Pixel к ПК проводом TypeC
3) Открываем появившуюся вкладку "Charging via USB" (эта вкладка появится только если вы используете провод поддерживающий функцию передачи файлов)
4) В списке выбираем режим "WebCam"
5) После этого смартфон сам переподключится к ПК, и, вызвав верхнее меню вы увидите новую вкладку "WebCam"
6) Нажимаем на вкладку "WebCam" и теперь наш смартфон используется как Веб Камера, Готово!
Как я уже говорил ранее - на мониторе ПК1 нам нужно вывести полноэкранное изображение DeepFake. В программе DeepLiveCam есть встроенная функция растягивания изображения на весь экран, для того что бы эту функцию включить, нужно запустить программу с дополнительным параметром: "--live-resizable"
Т.е. если обычный запуск программы выглядит как:
"python run.py --execution-provider cuda"
То запуск с включенной функцией выглядит как:
"python run.py --execution-provider cuda --live-resizable"
Более подробно можете ознакомиться на официальной странице GitHub.
После запуска программы вы увидите окно:
Выбираем нужное лицо и, для начала, рекомендую выставить такие настройки:
Перед запуском убедитесь что вебкамера/Pixel подключен к ПК1, после нажимаем кнопку "Live":
Перед нами появляется вывод камеры с уже изменённым лицом, которое мы можем растянуть на весь экран. Для того что бы закрыть - просто нажимаем крестик.
Но в таком случае если в кадре появится второе, третье и т.д. Лица - маска будет сбоить и перепрыгивать то на одно то на другое лицо. В каких ситуациях это не удобно?
Например вы - Ди Каприо и хотите провести звонок от лица Илона Маска, и у вас есть "документы" с лицом Илона Маска. В таком случае как только в кадр с вашим лицом попадёт второе лицо (даже карточка с вашим или другим лицом) - Маска начнёт сбоить.
Для того что бы решить эту проблему есть функция MapFaces, в которой можно задать для каждого отдельного лица замену на отдельное лицо.
Ставим галочку и нажимаем Live:
Перед нами открывается окно, в котором мы можем добавить лица, используемые в кадре. Итак, настроим программу для ситуации, описанной выше. Нажимаем Add:
В правой колонке выбираем "лицо которое будем заменять" а в левой "лицо которым будем заменять"
Так же, помним что у нас есть "документ" с лицом Илона и нам нужно что бы маска на его лице не сбоила. Так что добавляем новую строку по кнопке Add и с обеих сторон добавляем лицо Илона:
В таком случае программа будет заменять наше лицо на лицо Илона, А лицо Илона на карточке будет заменять на него же (Т.е. не будет).
Для улучшения качества картинки есть функция Face Enhancer:
Но эта функция невероятно требовательная и для неё нужен очень производительный ПК.
Подсоединяем Микрофон и Pixel к ПК2, открываем Bluestacks app player, открываем настройки:
Во вкладке "Devices" в пункте "Микрофон" указываем наш внешний микрофон, в пункте "Камера" указываем наш Pixel (он отобразится как Android Webcam).
"Save changes" и Готово! Теперь открыв на BlueStacks любое приложение использующее камеру - будет выводиться наше изображение из DeepLiveCam.
Альтернативный способ передачи картинки из DeepLiveCam(ПК1) в BlueStacks(ПК2)
Как я упоминал выше, данный подход не будет скрывать дефекты наложения маски. Однако в некоторых задачах, не требующих скрытия дефектов - такой способ, возможно, будет удобнее.
В данном, альтернативном способе мы будем использовать передачу изображения с помощью сторонних программ по сети. Так же способ во многом удобен тем, что ПК1, на котором запущен DeepLiveCam может находиться хоть на другом конце света от ПК2, и всё ещё передавать нужное изображение в BlueStacks на ПК2.
В данном способе рассматривается два подхода: первый - подходит только для ПК2 на NVIDIA, второй - для ПК2 и на NVIDIA и на AMD.
Подход для ПК2 на NVIDIA:
1) Logitech Capture (https://www.logitech.com/en-gb/software/capture.html)
2) OBS (последняя версия) (https://obsproject.com/)
3) BlueStacks (любая версия) (https://www.bluestacks.com/)
4) DeepLiveCam (https://github.com/hacksider/Deep-Live-Cam)
5) Vdo Ninja (https://vdo.ninja/)
1) Устанавливаем и настраиваем на ПК1 DeepLiveCam как объяснялось в предыдущих пунктах
2)Установка и настройка OBS на ПК1
Устанавливаем на ПК1 OBS последней версии с официального сайта (https://obsproject.com/)
При первом запуске, OBS спросит вас о желаемой настройке. Выбираем пункт "Я буду использовать только виртуальную камеру" Т.к. Дополнительные настройки качества картинки/параметров записи и т.д. нам не нужны.
Запускаем DeepLiveCam и выбираем окно вывода DeepLiveCam как источник изображения в обс (выбираем захват окна):
На окне предпросмотра OBS растягиваем выбранное окно так, что бы скрыть рамки по бокам:
Открываем настройки виртуальной камеры OBS:
Выбираем Тип Вывода - Источник, Средство Вывода - Захват Окна:
Запускаем Виртуальную камеру OBS:
Теперь OBS использует выходное изображение DeepLiveCam, а ПК видит наш OBS как Виртуальную камеру.
После того как включили виртуальную камеру OBS - открываем официальный сайт Vdo Ninja (https://vdo.ninja/) и добавляем нашу камеру:
Здесь в можете настроить качество передаваемого изображения, выбрать используемые устройства и задать пароль для потока. (Передачу аудио можно не включать, т.к. в итоге в звонке будет использоваться звук с другого микрофона)
После нажимаем "Start" и копируем ссылку на прямой поток:
Открыв эту ссылку на любом девайсе в любой точке мира мы будем получать транслируемый поток из OBS на ПК1.
4) Установка и настройка Logitech Capture на ПК2
Устанавливаем программу Logitech Capture на ПК2 с официального сайта (https://www.logitech.com/en-gb/software/capture.html)
Открываем ссылку из VDO ninja в браузере ПК2 и разворачиваем изображение на весь экран:
Открываем Logitech Capture и выбираем Источник для захвата 1:
Выбираем окно браузера с Прямым потоком из Vdo Ninja:
Для того что бы убрать водяной знак Logitech переходим на третью вкладку и убираем галочку:
5) Установка и настройка BlueStacks на ПК2
Устанавливаем любую версию Bluestacks с официального сайта (https://www.bluestacks.com/)
Открываем программу и настраиваем точно так же как объяснялось раньше, но в качестве камеры выбираем не Android Webcam, а Logi Capture
Теперь открываем любое приложение использующее камеру в BlueStacks, опять открываем Страницу Браузера с Прямым Потоком из Vdo Ninja, разворачиваем изображение на весь экран и ПОВЕРХ ЭТОГО ОКНА открываем BlueStacks:
Теперь в качестве изображения с камеры BlueStacks на ПК2 используется вывод изображения DeepLiveCam на ПК1.
Подход для ПК2 на NVIDIA/AMD:
1) OBS (последняя версия) (для ПК1) (https://obsproject.com/)
2) OBS 27.2.4 (для ПК2) (https://github.com/obsproject/obs-studio/releases/tag/27.2.4)
3) OBS Virtualcam 2.0.5 Plugin (для ПК2(https://obsproject.com/forum/resources/obs-virtualcam.949/)
3) BlueStacks 5.10 (https://support.bluestacks.com/hc/en-us/articles/10877586285197-BlueStacks-5-10-Release-Notes)
4) DeepLiveCam (https://github.com/hacksider/Deep-Live-Cam)
5) Vdo Ninja (https://vdo.ninja/)
Скачиваем OBS 27.2.4 с официальной страницы GitHub(https://github.com/obsproject/obs-studio/releases/tag/27.2.4)
Листаем вниз, скачиваем подходящую для ПК конфигурацию
Устанавливаем, открываем OBS 27.2.4, при первом открытии появится окно выбра настроек - выбираем пункт "буду использовать только виртуальную камеру" Т.к. дополнительные настройки нам не нужны.
Скачиваем, устанавливаем OBS Virtualcam 2.0.5 Plugin(https://obsproject.com/forum/resources/obs-virtualcam.949/)
Скачиваем его, устанавливаем, затем перезапускаем OBS 27.2.4.
После перезапуска OBS 27.2.4, в верхней панели выбираем вкладку "инструменты", а в ней "виртуальная камера".
Ставим галочку "автоматический старт" и нажимаем "Старт"
В окне "Источники" добавляем источник "Браузер":
В вызванном окне вставляем ссылку на поток из сайта VDO Ninja (как получить эту ссылку - показано в предыдущих шагах):
После этого растягиваем изображение:
Скачиваем и устанавливаем BlueStacks 5.10 (https://support.bluestacks.com/hc/en-us/articles/10877586285197-BlueStacks-5-10-Release-Notes)
Открываем BlueStacks 5.10, открываем настройки:
На этот раз в устройствах в качестве веб камеры
выбираем OBS-CAMERA а НЕ OBS Virtual Camera:
Запускаем любую программу, использующую веб камеру и видим наше изображение, транслируемое с Vdo Ninja: