/avatarify

Avatars for Zoom, Skype and other video-conferencing apps.

Primary LanguagePythonOtherNOASSERTION

▶️ Demo

▶️ AI-generated Elon Musk

Avatarify

Photorealistic avatars for video-conferencing apps. Democratized.

Based on First Order Motion Model.

Created by: Ali Aliev and Karim Iskakov.

Disclaimer: This project is unrelated to Samsung AI Center.

News

  • 24 April 2020. Added Windows installation tutorial.
  • 17 April 2020. Created Slack community. Please join via invitation link.
  • 15 April 2020. Added StyleGAN-generated avatars. Just press Q and now you drive a person that never existed. Every time you push the button – new avatar is sampled.
  • 13 April 2020. Added Windows support (kudos to 9of9).

Table of Contents

Requirements

To run Avatarify smoothly you need a CUDA-enabled (NVIDIA) video card. Otherwise it will fallback to the central processor and run very slowly. These are performance metrics for some hardware:

  • GeForce GTX 1080 Ti: 33 fps
  • GeForce GTX 1070: 15 fps
  • Mac OSX (MacBook Pro 2018; no GPU): very slow ~1 fps

Of course, you also need a webcam!

Install

Download network weights

Download model's weights from Dropbox, Mega, Yandex.Disk or Google Drive [716 MB, md5sum 46b26eabacbcf1533ac66dc5cf234c5e]

Linux

Linux uses v4l2loopback to create virtual camera.

  1. Download Miniconda Python 3.7 and install using command:
bash Miniconda3-latest-Linux-x86_64.sh
  1. Clone avatarify and install its dependencies (sudo privelege is required):
git clone https://github.com/alievk/avatarify.git
cd avatarify
bash scripts/install.sh
  1. Download network weights and place vox-adv-cpk.pth.tar file in the avatarify directory (don't unpack it).

Mac

(!) Note: we found out that in versions after v4.6.8 (March 23, 2020) Zoom disabled support for virtual cameras on Mac. To use Avatarify in Zoom you can choose from 2 options:

  • Install Zoom v4.6.8 which is the last version that supports virtual cameras
  • Use latest version of Zoom, but disable library validation:
codesign --remove-signature /Applications/zoom.us.app

For Mac it's quite difficult to create a virtual camera, so we'll use CamTwist app.

  1. Install Miniconda Python 3.7 or use Homebrew Cask: brew cask install miniconda.
  2. Clone avatarify and install its dependencies:
git clone https://github.com/alievk/avatarify.git
cd avatarify
bash scripts/install_mac.sh
  1. Download network weights and place vox-adv-cpk.pth.tar file in the avatarify directory (don't unpack it).
  2. Download and install CamTwist from here. It's easy.

Windows

▶️ Video tutorial

This guide is tested for Windows 10.

  1. Install Miniconda Python 3.7.
  2. Install Git.
  3. Press Windows button and type "miniconda". Run suggested Anaconda Prompt.
  4. Download and install Avatarify (please copy-paste these commands and don't change them):
git clone https://github.com/alievk/avatarify.git
cd avatarify
scripts\install_windows.bat
  1. Download network weights and place vox-adv-cpk.pth.tar file in the avatarify directory (don't unpack it).
  2. Run run_windows.bat. If installation was successful, two windows "cam" and "avatarify" will appear. Leave these windows open for the next installation steps. If there are multiple cameras (including virtual ones) in the system, you may need to select the correct one. Open scripts/settings_windows.bat and edit CAMID variable. CAMID is an index number of camera like 0, 1, 2, ...
  3. Install OBS Studio for capturing Avatarify output.
  4. Install VirtualCam plugin. Choose Install and register only 1 virtual camera.
  5. Run OBS Studio.
  6. In the Sources section, press on Add button ("+" sign), select Windows Capture and press OK. In the appeared window, choose "[python.exe]: avatarify" in Window drop-down menu and press OK. Then select Edit -> Transform -> Fit to screen.
  7. In OBS Studio, go to Tools -> VirtualCam. Check AutoStart, set Buffered Frames to 0 and press Start.
  8. Now OBS-Camera camera should be available in Zoom (or other videoconferencing software).

The steps 10-11 are required only once during setup.

Setup avatars

Avatarify comes with a standard set of avatars of famous people, but you can extend this set simply copying your avatars into avatars folder.

Follow these advices for better visual quality:

  • Make square crop of your avatar picture.
  • Crop avatar's face so that it's not too close not too far. Use standard avarars as reference.
  • Prefer pictures with uniform background. It will diminish visual artifacts.

Run

Your web cam must be plugged-in.

Note: run your video-conferencing app only after Avatarify is started.

Linux

It is supposed that there is only one web cam connected to the computer at /dev/video0. The run script will create virtual camera /dev/video9. You can change these settings in scripts/settings.sh.

You can use command v4l2-ctl --list-devices to list all devices in your system. For example, if the web camera is /dev/video1 then the device id is 1.

Run:

bash run.sh

cam and avatarify windows will pop-up. The cam window is for controlling your face position and avatarify is for the avatar animation preview. Please follow these recommendations to drive your avatars.

Mac

  1. Run:
bash run_mac.sh
  1. Go to CamTwist.
  2. Choose Desktop+ and press Select.
  3. In the Settings section choose Confine to Application Window and select python (avatarify) from the drop-down menu.

cam and avatarify windows will pop-up. The cam window is for controlling your face position and avatarify is for the avatar animation preview. Please follow these recommendations to drive your avatars.

Windows

If there are multiple cameras (including virtual ones) in your system, you may need to select the correct one in scripts/settings_windows.bat. Open this file and edit CAMID variable. CAMID is an index number of camera like 0, 1, 2, ...

  1. In Anaconda Prompt:
cd C:\path\to\avatarify
run_windows.bat
  1. Run OBS Studio. It should automaitcally start streaming video from Avatarify to OBS-Camera.

cam and avatarify windows will pop-up. The cam window is for controlling your face position and avatarify is for the avatar animation preview. Please follow these recommendations to drive your avatars.

Note: To reduce video latency, in OBS Studio right click on the preview window and uncheck Enable Preview.

Controls

Keys Controls
1-9 These will immediately switch between the first 9 avatars.
Q Turns on StyleGAN-generated avatar. Every time you push the button – new avatar is sampled.
0 Toggles avatar display on and off.
A/D Previous/next avatar in folder.
W/S Zoom camera in/out.
U/H/J/K Translate camera. H - left, K - right, U - up, J - Down by 5 pixels. Add Shift to adjust by 1 pixel.
Shift-Z Reset camera zoom and translation
Z/C Adjust avatar target overlay opacity.
X Reset reference frame.
F Toggle reference frame search mode.
R Mirror reference window.
T Mirror output window.
I Show FPS
ESC Quit

Driving your avatar

These are the main principles for driving your avatar:

  • Align your face in the camera window as closely as possible in proportion and position to the target avatar. Use zoom in/out function (W/S keys) and camera left, right, up, down translation (U/H/J/K keys). When you have aligned, hit 'X' to use this frame as reference to drive the rest of the animation
  • Use the overlay function (Z/C keys) to match your and avatar's face expressions as close as possible

Alternatively, you can hit 'F' for the software to attempt to find a better reference frame itself. This will slow down the framerate, but while this is happening, you can keep moving your head around: the preview window will flash green when it finds your facial pose is a closer match to the avatar than the one it is currently using. You will see two numbers displayed as well: the first number is how closely you are currently aligned to the avatar, and the second number is how closely the reference frame is aligned.

You want to get the first number as small as possible - around 10 is usually a good alignment. When you are done, press 'F' again to exit reference frame search mode.

You don't need to be exact, and some other configurations can yield better results still, but it's usually a good starting point.

Configure video meeting app

Avatarify supports any video-conferencing app where video input source can be changed (Zoom, Skype, Hangouts, Slack, ...). Here are a few examples how to configure particular app to use Avatarify.

Skype

Go to Settings -> Audio & Video, choose avatarify (Linux), CamTwist (Mac) or OBS-Camera (Windows) camera.

Zoom

Go to Settings -> Video and choose avatarify (Linux), CamTwist (Mac) or OBS-Camera (Windows) from Camera drop-down menu.

Teams

Go to your profile picture -> Settings -> Devices and choose avatarify (Linux), CamTwist (Mac) or OBS-Camera (Windows) from Camera drop-down menu.

Slack

Make a call, allow browser using cameras, click on Settings icon, choose avatarify (Linux), CamTwist (Mac) or OBS-Camera (Windows) in Video settings drop-down menu.

Uninstall

To remove Avatarify and its related programs follow the instructions in the Wiki.

Contribution

Our goal is to democratize photorealistic avatars for video-conferencing. To make the technology even more accessible, we have to tackle the following problems:

  1. Add support for more platforms (Linux and Mac are already supported).
  2. Remote GPU support. This is a work in progress.
  3. Porting to non-CUDA GPUs (Intel integrated GPUs, AMD GPUs, etc) and optimization. The goal is to run Avatarify real-time (at least 10FPS) on modern laptops.

Please make pull requests if you have any improvements or bug-fixes.

FAQ

Q: Do I need any knowledge of programming to run Avatarify?
A: Not really, but you need some beginner-level knowledge of the command line. For Windows we recorded a video tutorial, so it’ll be easy to install.

Q: Why does it work so slow on my Macbook?
A: The model used in Avatarify requires a CUDA-enabled NVIDIA GPU to perform heavy computations. Macbooks don’t have such GPUs, and for processing use CPU, which has much less computing power to run Avatarify smoothly.

Q: I don’t have a NVIDIA GPU, can I run it?
A: You still can run it without a NVIDIA GPU, but with drastically reduced performance (<1fps).

Q: I have an ATI GPU (e.g. Radeon). Why does it work so slow?
A: To run the neural network Avatarify uses PyTorch library, which is optimized for CUDA. If PyTorch can’t find a CUDA-enabled GPU in your system it will fallback to CPU. The performance on the CPU will be much worse.

Q: How to add a new avatar?
A: It’s easy. All you need is to find a picture of your avatar and put it in the avatars folder. More.

Q: My avatar looks distorted.
A: You need to calibrate your face position. Please follow the tips or watch the video tutorial.

Q: Can I use a cloud GPU?
A: This is work in progress. See the relevant discussion.

Q: Avatarify crashed, what to do?
A: First, try to find your error in the troubleshooting section. If it is not there, try to find it in the issues. If you couldn’t find your issue there, please open a new one using the issue template.

Q: Can I use Avatarify for commercial purposes?
A: No. Avatarify and First Order Motion Model are licensed under Creative Commons Non-Commercial license, which prohibits commercial use.

Q: What video conferencing apps does Avatarify support?
A: Avatarify creates a virtual camera which can be plugged into any app where video input source can be changed (Zoom, Skype, Hangouts, Slack, ...).

Q: Where can I discuss Avatarify-related topics with the community?
A: We have Slack. Please join:

Troubleshooting

  • My avatar is distorted: Please follow these recommendation for avatar driving.
  • Zoom/Skype doesn't see avatarify camera. Restart Zoom/Skype and try again.
  • Avatar image is frozen: In Zoom, try Stop and Start Video.
  • bash run_mac.sh crashes with "Cannot open camera": Try to change CAMID in run_mac.sh from 0 to 1, 2, ...
  • pipe:0: Invalid data found when processing input: Make sure CAMID in scripts/settings.sh is correct. Use v4l2-ctl --list-devices to query available devices.
  • ASSERT: "false" in file qasciikey.cpp, line 501. If you have several keyboard layouts, switch to English layout.
  • No such file or directory: 'vox-adv-cpk.pth.tar'. Please follow instructions Download network weights