這是一張有關標題為 LivePortrait 安裝與使用教學:在本地合成動態人臉照片 的圖片

LivePortrait 安裝與使用教學:在本地合成動態人臉照片

本文詳細介紹如何在本地安裝 LivePortrait,操作並合成會動的人臉照片。

前言

最近在網路上發現了一個有趣的項目:LivePortrait。

這個項目是在 face-vid2vid 的基礎上進行改良,能夠將靜態照片與動態人臉圖像結合,從而產生栩栩如生的頭部動態效果。

目前可以通過 Live Demo進行線上合成。

不過考慮隱私問題,可以在本地安裝後在本地進行生成,這樣不僅速度更快,也無使用限制。

整個安裝過程需要至少約 4 GB 的本地空間,預計花費約 30 分鐘。

本文將重點介紹如何在本地進行安裝及使用、最後輸出其結果。

前置安裝

不知道什麼是 winget 請參考 安裝 winget

工具功能描述安裝指令
Git主要用來下載相關程式碼。winget install --id Git.Git
FFmpeg進行影片輸出合併與轉檔。winget install --id Gyan.FFmpeg
conda建立獨立的 Python 環境以避免不同專案間的衝突。winget install --id Anaconda.Miniconda3

安裝 LivePortrait

  1. 從開始找到 Anaconda Powershell Prompt (miniconda3) 並執行以載入 conda。

    從開始找到 conda 的終端環境

  2. 執行以下指令進行下載與安裝

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 複製程式碼
git clone https://github.com/KwaiVGI/LivePortrait
# 進入 LivePortrait 目錄
cd LivePortrait

# 建立 Python 3.9 的環境,並命名為 LivePortrait
conda create -n LivePortrait python==3.9.18
# 啟動 LivePortrait 環境
conda activate LivePortrait

# 安裝相關依賴項
pip install -r requirements.txt

# 安裝 git lfs
git lfs install

# 刪除預先複製下來的空目錄,這裡使用的是 Powershell。你也可以手動刪除這個空目錄
Remove-Item -Recurse -Force pretrained_weights

# 複製預先訓練的內容
git clone https://huggingface.co/KwaiVGI/liveportrait pretrained_weights

上述僅需要操作 1 次,僅有 conda activate LivePortrait 是在每次開啟終端機時才需要主動切換至 LivePortrait 環境。

執行完畢後,就可以開始產生影片。

合成影片

名稱路徑
靜態照片C:\Users\USER_NAME\LivePortrait\assets\examples\source
動態影片C:\Users\USER_NAME\LivePortrait\assets\examples\driving
輸出目錄C:\Users\USER_NAME\LivePortrait\animations

於終端機中進入到 LivePortrait 的目錄中,我們可以輸入 python inference.py,會載入測試圖檔、影片並進行合成輸出。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
(LivePortrait) C:\Users\wells\LivePortrait>python inference.py
[02:19:04] Load appearance_feature_extractor done.                                           live_portrait_wrapper.py:36
           Load motion_extractor done.                                                       live_portrait_wrapper.py:39
           Load warping_module done.                                                         live_portrait_wrapper.py:42
[02:19:05] Load spade_generator done.                                                        live_portrait_wrapper.py:45
           Load stitching_retargeting_module done.                                           live_portrait_wrapper.py:49
[02:19:06] LandmarkRunner warmup time: 1.006s                                                      landmark_runner.py:89
[02:19:07] FaceAnalysisDIY warmup time: 1.328s                                                   face_analysis_diy.py:79
           Load source image from                                                           live_portrait_pipeline.py:49
           C:\Users\wells\LivePortrait\src\config\../../assets/examples/source/s6.jpg
[02:19:09] Load video:                                                                      live_portrait_pipeline.py:99
           C:\Users\wells\LivePortrait\src\config\../../assets/examples/driving/d0.mp4
           The FPS of                                                                      live_portrait_pipeline.py:104
           C:\Users\wells\LivePortrait\src\config\../../assets/examples/driving/d0.mp4 is:
           25
           Load video file (mp4 mov avi etc...):                                           live_portrait_pipeline.py:106
           C:\Users\wells\LivePortrait\src\config\../../assets/examples/driving/d0.mp4
           Start making motion template...                                                 live_portrait_pipeline.py:110
Making motion templates... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
[02:19:10] Dump motion template to                                                         live_portrait_pipeline.py:127
           C:\Users\wells\LivePortrait\src\config\../../assets/examples/driving\d0.pkl
           Prepared pasteback mask done.                                                   live_portrait_pipeline.py:139
🚀Animating... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:07
Concatenating result... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Writing ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   0% -:--:--[swscaler @ 0000021de7021b80] Warning: data is not aligned! This can lead to a speed loss
[02:19:18] Animated template:                                                              live_portrait_pipeline.py:248
           C:\Users\wells\LivePortrait\src\config\../../assets/examples/driving\d0.pkl,
           you can specify `-d` argument with this template path next time to avoid
           cropping video, motion making and protecting privacy.
           Animated video: animations/s6--d0.mp4                                           live_portrait_pipeline.py:249
           Animated video with concact: animations/s6--d0_concat.mp4                       live_portrait_pipeline.py:250

(LivePortrait) C:\Users\wells\LivePortrait>

在輸出目錄中,可以看到我們的成品影片,分別為:

  • 比較影片(s6–d0_concat.mp4),原始影片、靜態圖象、合成結果三個放在一起進行輸出。
  • 成品影片(s6–d0.mp4),僅最終合成結果。

成品影片如下:

我們可以將原始照片,放到 ./assets/examples/source 底下 (或你喜歡的路徑),並套用相關的範例影片(./assets/examples/driving)以進行合成。

例如我這篇透過 DALL·E 產生一張虛擬人臉,並套用範例的一個影片(./assets/examples/driving/d10.mp4),其指令如下:

1
2
python inference.py -s assets/examples/source/dalle.webp -d assets/examples/driv
ing/d10.mp4

比較影片如下,由左到右依序為動圖、靜態、合成結果:

使用 Web GUI

於終端機中輸入 python app.py 可以在本地建立伺服器,即跟 Live Demo 的頁面一致,透過 Web GUI 的好處是不用再輸入指令了,操作上非常簡易明瞭。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
(LivePortrait) C:\Users\wells\LivePortrait>python app.py
[02:47:14] Load appearance_feature_extractor done.                                           live_portrait_wrapper.py:36
[02:47:15] Load motion_extractor done.                                                       live_portrait_wrapper.py:39
           Load warping_module done.                                                         live_portrait_wrapper.py:42
           Load spade_generator done.                                                        live_portrait_wrapper.py:45
           Load stitching_retargeting_module done.                                           live_portrait_wrapper.py:49
[02:47:16] LandmarkRunner warmup time: 1.055s                                                      landmark_runner.py:89
[02:47:18] FaceAnalysisDIY warmup time: 1.336s                                                   face_analysis_diy.py:79
Running on local URL:  http://127.0.0.1:8890

To create a public link, set `share=True` in `launch()`.

於瀏覽器中輸入 http://127.0.0.1:8890,即可透過 GUI 的方式進行產生。

網頁 GUI

心得

這個項目非常好玩且有趣,但更多僅侷限於朋友之間傳傳圖。切勿使用在公眾人物並公開以避免觸法。

此外,產圖時會消耗一定的功耗,請確保電腦性能足夠與外部電源足夠穩定。

本次使用的硬體配置為 i7-13700 + GeForce RTX™ 3060 Ti 合成 15 秒的影片共計 63 秒。

輸出影片秒數:轉換時間 = 1:4.2 (秒)

參考資料

  1. KwaiVGI/LivePortrait: Bring portraits to life!
主題 Stack 由 Jimmy 設計