让照片开口说话:LivePortrait 本地部署玩法详解

0 阅读7分钟

image.png

照片秒变视频,表情完美复刻!LivePortrait 横空出世,秒杀一众动图工具。本文手把手教你从 0 到 1 搭建环境。

在过去的几年里,我们见证了 AI 视频领域的“军备竞赛”。Sora 的横空出世让我们看到了扩散模型的暴力美学,Runway Gen-2 和 Pika 让我们拥有了更多创作的可能。然而,对于大多数普通创作者而言,这些顶级的 AI 视频工具依然高不可攀:昂贵的订阅费用、漫长的生成等待时间、以及对云端算力的极度依赖。

更重要的是,在“人像动画”这个细分赛道上,我们一直面临着一个尴尬的“不可能三角”:高质量、高速度、强控制,似乎永远无法兼得。

传统的 GAN(生成对抗网络)方法,如 FaceSwap 或 FOMM(First Order Motion Model),虽然速度极快,能够实现实时驱动,但生成的画质往往惨不忍睹。人物面部经常会出现严重的“面具感”,表情僵硬、眼神空洞,甚至出现身份特征丢失——明明驱动的是 A,动起来的却像是一个长了 A 的脸的 B。这种“恐怖谷效应”,让无数短视频创作者在深夜里对着屏幕抓狂。

而另一边,基于 Stable Diffusion 等扩散模型的方法(如 Halo、DreamTalk),虽然在画质和光影上实现了质的飞跃,却牺牲了效率。生成一段短短几秒的视频,往往需要在显卡上燃烧数分钟甚至更久。对于需要快速出片、批量生产的创作者来说,这种“奢侈品”级的效率,显然无法满足日常需求。

就在我们以为这种僵局将长期持续时,KlingAI 团队用 LivePortrait 给出了一记响亮的耳光。

LivePortrait 到底强在哪

在动手之前,我们先简单聊聊这玩意儿的核心优势,这样你在后面调参的时候才能心里有数。

LivePortrait 的核心技术在于它采用了“隐式关键点”和“ stitching 机制”。用人话解释就是:

  1. 它更懂“美颜”:  它在提取特征的时候,把“长相”(ID特征)和“动作”(运动特征)分得很开。这意味着,不管驱动视频里的人动作多夸张,你的照片绝对不会变形。
  2. 它更会“缝合”:  它在生成视频的最后一帧,会做一次精细的缝合处理,把生成的人脸完美地贴回原图,边缘几乎看不出破绽。

所以,它的实战应用场景非常广:做数字人播报、搞表情包制作、甚至是让老照片里的亲人动起来,效果都是 T0 级别的。

硬软件环境准备

别急着去 Git 代码,我们先看看你手里的“武器”合不合格。

1. 硬件要求(重要!)
很多新手翻车就翻车在显卡上。

  • 显卡:  必须是 N 卡(NVIDIA)。A 卡或者 Mac 的 M 系列芯片虽然也能跑,但配置起来能让你掉层头发,且速度感人。推荐显存 8GB 起步,如果你有 16GB 或者 24GB 的 4090,那简直是丝滑流畅。如果是 6GB 显存的 1060,也不是不能跑,但生成速度会像蜗牛,且可能爆显存。
  • 内存:  建议 16GB 以上,系统+模型加载一下就占不少了。
  • 系统:  强烈推荐 Windows 11 或者 Linux (Ubuntu)

2. 软件环境

  • Python:  推荐 3.10 。
  • Git:  用来拉取代码。
  • Conda:  用来管理虚拟环境,这是玩 AI 的基本功,我就不教怎么安装 Anaconda 或 Miniconda 了,默认大家都有。

本地安装全流程

这部分是最容易劝退新手的,但我把每一个坑都给你们标出来了。跟着操作,别跳步。

获取代码

打开你的终端(Terminal 或 CMD),找一个空间大的盘符(模型文件很大,预留至少 20G 空间),输入以下命令:

# 克隆项目
git clone https://github.com/KlingAIResearch/LivePortrait
# 进入目录
cd LivePortrait

如果 Github 连不上,建议大家使用镜像站或者 Gitee 导入,这里就不展开说了,大家各显神通。

创建虚拟环境

这一步是为了防止 LivePortrait 的依赖把你电脑上其他 AI 软件(比如 Stable Diffusion)的环境搞崩。

# 创建一个名为 liveportrait 的环境,指定 python 版本为 3.10
conda create -n liveportrait python=3.10 -y

# 激活环境
conda activate liveportrait

激活成功后,你的命令行前面应该会显示 (liveportrait) 字样。

安装 PyTorch

这是最容易出错的一步!显卡驱动版本不对,CUDA 版本不匹配,全在这里爆发。

建议先去 PyTorch 官网查看适合你显卡的版本。对于大多数 RTX 3060/4060 及以上的用户,建议安装 CUDA 11.8 或 12.1 版本的 PyTorch。为了稳妥,我给出一个通用的 CUDA 11.8 安装指令:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

注:这一步可能需要下载 2GB 左右的文件,网慢的可以去喝杯茶。安装完成后,建议输入 python -c "import torch; print(torch.cuda.is_available())",如果输出 True,恭喜你,显卡点亮成功!

安装项目依赖

PyTorch 搞定后,再把其他的库补全:

pip install -r requirements.txt

下载权重文件

这是 LivePortrait 的核心,没有这些文件,代码就是一堆废字。

你需要下载的权重文件主要分为两部分:

  1. LivePortrait 模型权重:  用于生成视频。
  2. InsightFace 权重:  用于人脸检测和特征提取(用来“对齐”人脸)。

下载地址:  官方 Github 项目的 README 里都有 HuggingFace 的链接。如果下载慢,建议使用国内镜像站。

# !pip install -U "huggingface_hub[cli]"
export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download KlingTeam/LivePortrait --local-dir pretrained_weights --exclude "*.git*" "README.md" "docs"

启动与基础使用

当所有的准备工作都完成后,就是激动人心的时刻了。

启动 WebUI 界面
在终端输入:

python app.py

当你看到一堆跳动的日志,最后出现类似 Running on local URL: http://127.0.0.1:8890 的字样时,恭喜,你的 LivePortrait 已经在本地运行了!直接用浏览器打开这个链接。

image.png

第一次生成
界面非常简洁,不用教大家也会用:

  1. Source Image(源图像):  上传一张清晰的正面人脸照片。记住,五官越清晰、光线越均匀,效果越好。  别传那种侧脸、遮脸、或者光线昏暗的照片,神仙也救不了。
  2. Driving Video(驱动视频):  官方在 assets/examples 目录下给了一些示例视频,你可以先拿这些练手。上传一段有人说话或转头动作的视频。
  3. 点击“Animate” :稍等几秒钟(取决于你的显卡),下方就会生成一段视频。

怎么样?是不是感觉照片里的人“活”过来了?

Python 脚本批量处理

如果你是做自媒体的,需要一次性处理 100 张照片,用 WebUI 一张张点鼠标,那得点到猴年马月。这时候,Python 脚本就派上用场了。

import cv2
import os.path as osp
from src.config.argument_config import ArgumentConfig
from src.config.inference_config import InferenceConfig
from src.config.crop_config import CropConfig
from src.live_portrait_pipeline import LivePortraitPipeline


def partial_fields(target_class, kwargs):
    return target_class(**{k: v for k, v in kwargs.items() if hasattr(target_class, k)})


# 1. 设置参数
args = ArgumentConfig(
    source='assets/examples/source/s5.jpg',
    driving='assets/examples/driving/d0.mp4',
    output_dir='animations/',
)

# 2. 初始化 pipeline(只加载一次)
inference_cfg = partial_fields(InferenceConfig, args.__dict__)
crop_cfg = partial_fields(CropConfig, args.__dict__)
pipeline = LivePortraitPipeline(inference_cfg=inference_cfg, crop_cfg=crop_cfg)

# 3. 执行推理
result = pipeline.execute(args)
print(f"Done! Output saved to {osp.abspath(args.output_dir)}")

实战中的坑:  批量处理时,显存会占用越来越高。如果你的显存不够,记得在循环里加上 torch.cuda.empty_cache() 来手动清理缓存,否则程序跑一半会闪退。

结语

虽然安装过程有点折腾,但当你看到自己收藏的静态照片变成动态视频,发朋友圈被疯赞的时候,你会发现这一切折腾都是值得的。