多模态深度伪造技术与虚拟数字人

1/28/2024 WhisperSenseVoiceChatTTSOpenVoiceOOTDiffusionEchoMimicDeep-Live-Cam

# 1. 语音识别文本

# 1.1 Whisper语音识别文本

# 1.1.1 Whisper简介

Whisper 是一个自动语音识别系统,OpenAI 通过从网络上收集了 68 万小时的多语言(98 种语言)和多任务监督数据对 Whisper 进行了训练。OpenAI 认为使用这样一个庞大而多样的数据集,可以提高对口音、背景噪音和技术术语的识别能力。除了可以用于语音识别,Whisper 还能实现多种语言的转录,以及将这些语言翻译成英语。

它有五种模型尺寸,提供速度和准确性的平衡,下面是可用模型的名称、大致内存需求和相对速度。

Size Parameters English-only model Multilingual model
tiny 39 M
base 74 M
small 244 M
medium 769 M
large 1550 M

Whisper基本原理:一种 Transformer 序列到序列模型被训练用于各种语音处理任务,包括多语种语音识别、语音翻译、口语语言识别以及语音活动检测。这些任务共同以一个需要被解码器预测的符号序列的形式进行表示,从而使得单个模型可以替代传统语音处理管道中的多个阶段。多任务训练格式使用一系列特殊的符号作为任务指示符或分类目标。

Whisper原理

# 1.1.2 安装Whisper.cpp环境

实验环境:Macbook Pro 2021,M1 pro芯片,16G内存,macOS Ventura13.2.1系统,Python3.9环境

Whisper.cpp 是 OpenAI Whisper 模型的一个实现,可以在本地进行语音识别。

首先需要安装 ffmpeg 工具库,它是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源工具。

$ brew install ffmpeg
$ ffmpeg -version
1
2

之后拉取 Whisper.cpp 项目代码并进行编译,然后下载相应的模型。

$ git clone https://github.com/ggerganov/whisper.cpp.git
$ make
$ ./models/download-ggml-model.sh small
1
2
3

# 1.1.3 使用Whisper识别文本

可以随便找个单声道的音频进行测试,如果不满足要求,可以使用 ffmpeg 进行提取和转换。

$ ffmpeg -i ./test.mp3 -ar 16000 -ac 1 -c:a pcm_s16le ./test.wav      // 将mp3音频转换成wav音频
$ ffmpeg -i ./test.mp4 -f wav -ar 16000 ./test.wav                    // 从mp4视频中提取wav音频
1
2

执行如下命令提取音频的文本:

$ ./main -m models/ggml-small.bin --language zh -f ./test.wav
1

运行效果如下:

Whisper.cpp运行效果

注:在 Apple Silicon 设备上,编码器推理可以通过 Core ML 在 Apple Neural Engine 上执行,这可以带来显著的加速——与仅 CPU 执行相比快 3 倍以上。

# 1.1.4 Whisper效果与评价

Whisper效果及效率评价:没有区分发言人,1s-XXXs--每秒能转换的录音时间

  • small,转换很快,效果比较差----1s-15.8s
  • medium,转换挺快,效果还可以----1s-4.9s
  • large-v1,转换有点慢,效果还好----1s-2.9s
  • large-v2,转换还行,效果也不错----1s-3.1s

Whisper主要问题就是有的字转换同音,但不是当前语境,转换效率上每次也有浮动。

# 1.2 SenseVoice语音识别文本

# 1.2.1 SenseVoice简介

SenseVoice 是具有音频理解能力的音频基础模型,包括语音识别(ASR)、语种识别(LID)、语音情感识别(SER)和声学事件分类(AEC)或声学事件检测(AED)。

SenseVoice

# 1.2.2 部署SenseVoice服务

实验环境:普通的CPU服务器,Debian12(该项目可以使用CPU去部署,如果有GPU可以加快推理效率)

Github上有个现成的FastAPI封装,基于SenseVoice的funasr_onnx版本进行的API发布。

目录结构:

SenseVoice-Api/
├── Dockerfile
├── main.py
├── requirements.txt
└── iic
    └── SenseVoiceSmall
        ├── am.mvn
        ├── chn_jpn_yue_eng_ko_spectok.bpe.model
        ├── config.yaml
        ├── model.onnx
        └── model_quant.onnx
1
2
3
4
5
6
7
8
9
10
11

拉取镜像:

$ docker pull registry.cn-hangzhou.aliyuncs.com/yiminger/sensevoice:latest
$ docker pull yiminger/sensevoice:latest
1
2

部署测试:

$ docker run -itd --name sensevoice -p 8000:8000 yiminger/sensevoice:latest
$ curl --request POST \
 --url http://127.0.0.1:8000/extract_text \
 --header 'content-type: multipart/form-data' \
 --form 'file=@/root/asr_example_zh.wav'
 
{"message":"input processed successfully","results":"欢迎大家来体验打摩院推出的语音识别模型","label_result":"<|zh|><|NEUTRAL|><|Speech|><|woitn|>欢迎大家来体验打摩院推出的语音识别模型"}
1
2
3
4
5
6
7

如果需要使用GPU方式部署推理服务,详见:https://github.com/HG-ha/SenseVoice-Api/issues/7 (opens new window)

# 1.2.3 SenseVoice效果与评价

身边人已经用SenseVoice做过医疗语音识别的落地项目,给到的反馈是SenseVoice效果和速度都很不错,两方面都比Whisper要好,建议选用这个。以下摘自官方的评测与对比:

[1] 多语言语音识别

在开源基准数据集(包括 AISHELL-1、AISHELL-2、Wenetspeech、Librispeech 和 Common Voice)上比较了 SenseVoice 与 Whisper 的多语言语音识别性能和推理效率。在中文和粤语识别效果上,SenseVoice-Small 模型具有明显的效果优势。

SenseVoice官方评测_多语言语音识别

[2] 情感识别

在测试集上对多个开源情感识别模型进行对比,SenseVoice-Large 模型可以在几乎所有数据上都达到了最佳效果,而 SenseVoice-Small 模型同样可以在多数数据集上取得超越其他开源模型的效果。

SenseVoice官方评测_情感识别

[3] 事件检测

尽管 SenseVoice 只在语音数据上进行训练,它仍然可以作为事件检测模型进行单独使用。SenseVoice 模型能够在这些任务上取得较好的效果,但受限于训练数据与训练方式,其事件分类效果专业的事件检测模型相比仍然有一定的差距。

SenseVoice官方评测_事件检测

[4] 推理效率

SenseVoice-small 模型采用非自回归端到端架构,推理延迟极低。在参数量与 Whisper-Small 模型相当的情况下,比 Whisper-Small 模型推理速度快 5 倍,比 Whisper-Large 模型快 15 倍。同时 SenseVoice-small 模型在音频时长增加的情况下,推理耗时也无明显增加。

SenseVoice官方评测_推理效率

# 2. 语音合成与克隆

# 2.1 ChatTTS对话场景语音合成

# 2.1.1 ChatTTS简介

ChatTTS是专门为对话场景设计的文本转语音模型,例如LLM助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。在HuggingFace中开源的版本为4万小时的训练尚未有SFT版本。

# 2.1.2 部署ChatTTS服务

实验环境:普通的CPU服务器,Debian11,Python 3.10(该项目用CPU可以跑,但速度比较慢,最好是使用GPU来跑)

拉取代码并安装项目依赖:

$ git clone https://github.com/2noise/ChatTTS
$ cd ChatTTS
$ pip3 install -r requirements.txt
$ pip3 install gradio
$ conda install -c conda-forge pynini=2.1.5 && pip install WeTextProcessing
1
2
3
4
5

下载模型到指定位置:

# -*- coding: utf-8 -*-

import os
from huggingface_hub import snapshot_download

# 设置代理
# os.environ['http_proxy'] = 'http://127.0.0.1:7890'
# os.environ['https_proxy'] = 'http://127.0.0.1:7890'

# 模型仓库的标识
repo_id = "2Noise/ChatTTS"

# 下载模型到指定目录
local_dir = "./models"

# 检查目录是否存在,如果不存在则创建
if not os.path.exists(local_dir):
    os.makedirs(local_dir)

snapshot_download(repo_id=repo_id, local_dir=local_dir)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

部署服务:

$ python3 webui.py --local_path './models'
1

# 2.1.3 测试语音合成效果

使用体验:实际效果相当惊艳,能够精确预测并精细调控语音中的韵律特征,包括笑声、停顿及插入语等,非常接近于人声了。

ChatTTS效果

# 2.2 OpenVoice语音克隆

# 2.2.1 OpenVoice简介

自2023年5月以来,OpenVoice一直在为myshell.ai提供即时语音克隆功能。直到2023年11月,全球用户已经使用了数千万次语音克隆模型,并见证了该平台上用户数量的爆炸性增长。

OpenVoice原理图

# 2.2.2 部署OpenVoice服务

实验环境:租用的AutoDL的GPU服务器,NVIDIA A5000 / 24GB,Ubuntu20.04,Python 3.10, CUDA 11.8

Step1:拉取代码并安装依赖

$ source /etc/network_turbo   // 设置AutoDL提供的科学上网代理
$ git clone https://github.com/myshell-ai/OpenVoice.git
$ cd /root/OpenVoice
$ pip3 install -r requirements.txt
$ apt-get update && apt install ffmpeg
$ ffmpeg -version
$ ffprobe -version
1
2
3
4
5
6
7

注:Pytorch环境使用了镜像里自带的那个,这里就不重复安装了。

Step2:下载模型文件并解压到checkpoints目录

$ curl -o checkpoints_1226.zip https://myshell-public-repo-hosting.s3.amazonaws.com/checkpoints_1226.zip
$ unzip checkpoints_1226.zip -d ./
1
2

注:后面执行时还会自动下载WavMark模型,如果网络不通可手动下载,https://huggingface.co/M4869/WavMark (opens new window)

Step3:指定6006端口启动应用服务

示例源码里加了校验,Text Prompt需要在2-200之间,这个将openvoice_app.py的校验代码注释掉即可解决。

$ export GRADIO_SERVER_PORT=6006
$ python3 openvoice_app.py
1
2

之后使用AutoDL的“自定义服务”功能,使其在本地访问该应用。

# 2.2.3 测试语音克隆的效果

左侧修改Text Prompt、选择Style、上传Reference Audio,勾选Agree后,点击Send,之后右侧便会有克隆出的语音。

OpenVoice语音克隆

使用体验:英文支持所有Style,中文仅支持default Style,实际体验英文的克隆效果还可以,但中文的克隆声音太难听了,它的实际效果不如GPT-SoVITS。如果想用GPT-SoVITS来做,详见我的另一篇博客:GPT-SoVITS音频处理及语音克隆 (opens new window)

# 2.3 其他语音合成开源项目

# 2.3.1 CosyVoice简介

CosyVoice是一个大规模预训练语言模型,深度融合了文本理解和语音生成技术。它采用了超过15万小时的数据进行训练,依托先进的大模型技术进行特征提取,从而能够精准解析并诠释各类文本内容,将其转化为宛如真人般的自然语音。

CosyVoice

# 2.3.2 Spark-TTS简介

Spark-TTS 是一款高质量语音合成(TTS)系统,它不仅支持零样本语音克隆,还能进行细粒度语音控制,包括语速、音调、语气等多项参数调节,同时具备跨语言生成能力,让 AI 语音变得更加灵活、多样化。

Spark-TTS

# 3. 服装试穿与口型同步

# 3.1 OOTDiffusion服装试穿

# 3.1.1 OOTDiffusion简介

一个高度可控的虚拟模特服装试穿工具,OOTDiffusion可以根据不同性别和体型自动调整服装,可控试穿参数,自然融合与逼真效果。

OOTDiffusion

# 3.1.2 部署OOTDiffusion服务

实验环境:租用的AutoDL的GPU服务器,NVIDIA RTX 4090 / 24GB,Ubuntu20.04,Python 3.10, CUDA 11.8

Step1:安装conda环境

$ curl -O https://repo.anaconda.com/archive/Anaconda3-2019.03-Linux-x86_64.sh   // 从官网下载安装脚本
$ bash Anaconda3-2019.03-Linux-x86_64.sh           // 阅读协议确认安装,安装完成后再输入yes以便不需要手动将Anaconda添加到PATH
$ conda create -n ootd python=3.10                 // 安装虚拟环境,ootd是给虚拟环境起的别名(任意即可)
$ source /root/miniconda3/etc/profile.d/conda.sh   // conda初始化
1
2
3
4

Step2:拉取项目代码并安装依赖

$ git clone https://github.com/levihsu/OOTDiffusion.git
$ cd OOTDiffusion
$ conda activate ootd                    
$ pip3 install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2
$ pip3 install -r requirements.txt
$ pip3 install basicsr
1
2
3
4
5
6

Step3:下载模型文件

需要将 OOTDiffusion 和 clip-vit-large-patch14 模型下载到 checkpoints 目录里。

目录结构如下:

.
├── clip-vit-large-patch14
│   ├── config.json
│   ├── flax_model.msgpack
│   ├── merges.txt
│   ├── model.safetensors
│   ├── preprocessor_config.json
│   ├── pytorch_model.bin
│   ├── README.md
│   ├── special_tokens_map.json
│   ├── tf_model.h5
│   ├── tokenizer_config.json
│   ├── tokenizer.json
│   └── vocab.json
├── humanparsing
│   ├── exp-schp-201908261155-lip.pth
│   ├── exp-schp-201908301523-atr.pth
│   ├── parsing_atr.onnx
│   └── parsing_lip.onnx
├── ootd
│   ├── feature_extractor
│   ├── model_index.json
│   ├── ootd_dc
│   ├── ootd_hd
│   ├── scheduler
│   ├── text_encoder
│   ├── tokenizer
│   └── vae
└── openpose
    └── ckpts
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

注:如果AutoDL系统盘空间不够了,可以将模型下载到数据盘,然后软链接过去。

# 3.1.3 OOTDiffusion使用体验

[1] 在Gradio页面运行示例

运行 gradio_ootd.py 即可。

$ conda activate ootd  
$ cd ./run
$ python3 gradio_ootd.py
1
2
3

注意:因为租用的服务器只有一张卡,因此启动前需要修改一下 ./run/gradio_ootd.py 的代码。

$ vim ./run/gradio_ootd.py

# openpose_model_dc = OpenPose(1)
# parsing_model_dc = Parsing(1)
# ootd_model_dc = OOTDiffusionDC(1)
openpose_model_dc = OpenPose(0)
parsing_model_dc = Parsing(0)
ootd_model_dc = OOTDiffusionDC(0)
1
2
3
4
5
6
7
8

否则会报错:

Traceback (most recent call last):
  File "/root/OOTDiffusion/run/gradio_ootd.py", line 24, in <module>
    openpose_model_dc = OpenPose(1)
  File "/root/OOTDiffusion/preprocess/openpose/run_openpose.py", line 32, in __init__
    torch.cuda.set_device(gpu_id)
  File "/root/anaconda3/envs/ootd/lib/python3.10/site-packages/torch/cuda/__init__.py", line 350, in set_device
    torch._C._cuda_setDevice(device)
RuntimeError: CUDA error: invalid device ordinal
CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.
1
2
3
4
5
6
7
8
9
10
11

半身模型:

OOTDiffusion半身模型

全身模型:

OOTDiffusion全身模型

[2] 在命令行进行任意服务试穿

Gradio页面只能使用提供的那些衣服进行试穿,使用命令行方式可以使用任意模特底图与衣服底图。

半身模型:这里我把Gradio页面的模特图片下载下来,然后又从淘宝随便找了个衬衫,裁剪框出来的这部分。

$ python3 run_ootd.py --model_path ./input/half-body-model.png --cloth_path ./input/half-body-clothes.png --scale 2.0 --sample 4
1

注意:--model_path 不是指模型地址,是指虚拟模特的图片地址,--cloth_path是指衣服地址。

任意服务试穿-半身模型

全身模型:这里我把Gradio页面的模特图片下载下来,然后又从淘宝随便找了个连衣裙。

$ python3 run_ootd.py --model_path ./input/full-body-model.png --cloth_path ./input/full-body-clothes.png --model_type dc --category 2 --scale 2.0 --sample 4
1

注意:服装类别必须配对:0 = 上半身;1 = 下半身;2 = 连衣裙

任意服务试穿-全身模型

实际体验:服装试穿的效果还是非常好的,生成速度也不错,可以实际应用了。不过模特底图建议不要带有花里胡哨的背景,建议先使用 remove.bg 等工具将其去除,不然可能会识别的有问题,导致试穿的效果不好。

# 3.2 EchoMimic语音驱动对口型

# 3.2.1 EchoMimic简介

蚂蚁集团发布的 EchoMimic 开源项目是一款能够生成自然且稳定肖像视频的工具。它通过结合人像面部特征与音频,实现逼真的对口型效果,同时支持仅使用音频或面部标志点生成视频,也能将音频与人像照片结合生成匹配的面部表情与动作。EchoMimic 支持多语言和多风格,可应用于对话、演讲及唱歌等多种场景。

EchoMimic工作原理

# 3.2.2 部署EchoMimic服务

实验环境:实体GPU服务器,NVIDIA RTX A800 / 80GB,CentOS 7.9,CUDA 12.2,Anaconda 24.5.0

Step1:拉取代码安装依赖

$ git clone https://github.com/BadToBest/EchoMimic
$ cd EchoMimic
$ conda create -n echomimic python=3.8
$ conda activate echomimic
$ pip3 install -r requirements.txt
$ pip3 install accelerate
1
2
3
4
5
6

Step2:下载 ffmpeg-static

$ wget https://www.johnvansickle.com/ffmpeg/old-releases/ffmpeg-4.4-amd64-static.tar.xz
$ tar -xvf ffmpeg-4.4-amd64-static.tar.xz
$ export FFMPEG_PATH=$(pwd)/ffmpeg-4.4-amd64-static
1
2
3

Step3:下载预训练权重

$ pip3 install huggingface_hub
$ export HF_ENDPOINT=https://hf-mirror.com
$ python3 download_models.py
1
2
3

download_models.py

# -*- coding: utf-8 -*-

import os
from huggingface_hub import snapshot_download

# 模型仓库的标识
repo_id = "BadToBest/EchoMimic"

# 下载模型到当前目录下的 'pretrained_weights' 文件夹
local_dir = "./pretrained_weights"

# 检查目录是否存在,如果不存在则创建
if not os.path.exists(local_dir):
    os.makedirs(local_dir)

# 下载模型快照到指定目录
snapshot_download(repo_id=repo_id, local_dir=local_dir)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

Step4:修改webgui.py的代码并启动

webgui.py的官方代码有点儿问题,实际运行推理时会出现如下报错:

EchoMimic推理报错

将代码里的process_video函数改成这样即可正常运行。

# face_img = crop_and_pad(face_img, crop_rect)
# face_mask = crop_and_pad(face_mask, crop_rect)
# face_img = cv2.resize(face_img, (width, height))
# face_mask = cv2.resize(face_mask, (width, height))

face_img = crop_and_pad(face_img, crop_rect)
face_mask = crop_and_pad(face_mask, crop_rect)
face_img = cv2.resize( face_img[0] , (width, height))
face_mask = cv2.resize( face_mask[0], (width, height))
1
2
3
4
5
6
7
8
9

运行WebUI的启动脚本:

$ python3 -u webgui.py --server_port=3000
1

# 3.2.3 EchoMimic使用体验

EchoMimic支持音频驱动、姿势驱动、音频+姿势驱动的算法推理,我这里只尝试了音频驱动,官方目前发布的加速模型是适用于姿势驱动的,因此音频驱动的推理速度还是很慢。

使用体验:推理速度很慢,生成效果还可以,但有些挺明显的缺陷,目前不适合实际落地使用。

  • 推理速度很慢:时长4min的歌曲,在A800服务器上耗时20min才跑出来,这个推理速度太慢了。
  • 对口型不完整:时长4min的歌曲,生成出的视频里只有前50s对了口型,后面直接就是原图了。
  • 生成效果有缺陷:有些口型对的不准,与给的语音不匹配,能明显看出来是对口型,给人的感觉有些假。
  • 对于图片有要求:对于图片也有要求,可能没有人脸的用不了,我用卡通形象和猫咪照片都直接报错。

EchoMimic使用效果

# 4. 视频换脸与深度伪造

# 4.1 Roop视频换脸

# 4.1.1 Roop简介

Roop 是一个用于 Deepfake 技术的工具,它允许用户在视频中替换面孔。与传统的 Deepfake 方法不同,Roop 不需要大量的数据集或复杂的训练过程。用户只需提供一张所需脸部的图像,Roop 就可以通过计算机视觉和人脸识别技术来将该图像应用到目标视频中。

Roop视频换脸原理

Roop交换的是两张人脸,主要是提取一个人的脸部特征迁移到另一个人的照片中去,主要分为两个步骤:特征提取和特征融合。

  • 在特征提取阶段,会检测出人脸的鼻子,嘴巴,眼睛等特征点,这些特征点的位置和形状信息将成为后续图像变换的基础。
  • 在特征融合阶段,会将原图像的特征点与目标图像的特征点进行对齐,再通过一系列仿射变换操作如旋转,平移,缩放等使得两者的特征点匹配,最终实现脸部特征的变换和融合。

# 4.1.2 Roop安装配置

实验环境:Macbook Pro 2021,M1 pro芯片,16G内存,512G存储,macOS Ventura13.2.1系统,Python3.9环境

Step1:拉取代码并安装依赖

$ git clone https://github.com/s0md3v/roop.git
$ pip3 install -r requirements
1
2

Step2:准备ffmpeg环境

ffmpeg (opens new window) 官网下载了 ffmpeg、ffprobe的MacOS版可执行文件。

Step3:修改代码

./roop/processors/utilities.py 因为没有给 ffmpeg 配置环境变量,这里设置成绝对路径即可。

def run_ffmpeg(args: List[str]) -> bool:
    commands = ['/Users/xxx/ffmpeg', '-hide_banner', '-hwaccel', 'auto', '-loglevel', roop.globals.log_level]
    commands.extend(args)
    try:
        subprocess.check_output(commands, stderr=subprocess.STDOUT)
        return True
    except Exception:
        pass
    return False


def detect_fps(target_path: str) -> float:
    command = ['/Users/xxx/ffprobe', '-v', 'error', '-select_streams', 'v:0', '-show_entries', 'stream=r_frame_rate', '-of', 'default=noprint_wrappers=1:nokey=1', target_path]
    output = subprocess.check_output(command).decode().strip().split('/')
    try:
        numerator, denominator = map(int, output)
        return numerator / denominator
    except Exception:
        pass
    return 30.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

./roop/processors/ui.py 因为 update_status 这个方法有报错又没什么用,干脆直接注释掉。

def update_status(text: str) -> None:
    # status_label.configure(text=text)
    # ROOT.update()
    pass
1
2
3
4

# 4.1.3 Roop使用体验

首次执行程序时,会自动下载一个 554.3MB 的 inswapper_128.onnx 模型文件。

$ python3 run.py
1

启动成功后,会出现GUI界面,先“Select a face”选一张图,再“Select a target“选一个视频,运行前可以“Preview”预览一下,最后“Start“正式运行。

Roop视频换脸

使用体验:它只能更换真人的人脸(动漫的不行),提取了一些人脸关键特征替换(不是整个人脸替换过去),内置的检查功能(包括但不限于裸体、图形内容、战争镜头等敏感材料)。

# 4.2 Deep-Live-Cam实时视频换脸

# 4.2.1 Deep-Live-Cam简介

Deep-Live-Cam 是一款开源 AI 工具,能够使用单张图片实现实时换脸和一键生成视频深度伪造。它提供高质量的面部替换、多平台支持、伦理使用保障和优化性能,适用于各种应用场景下的初学者和经验丰富的内容创作者。

Deep-Live-Cam 与 Roop 的区别:虽然二者都涉及面部处理,但 Roop 专注于换脸且通常应用于预录制的视频或图片中,而 Deep-Live-Cam 更关注实时处理,并提供更多样化的视觉效果。

# 4.2.2 Deep-Live-Cam安装配置

实验环境:Macbook Pro 2021,M1 pro芯片,16G内存,1024G存储,macOS Sonoma 14.5 系统,Python3.10环境

Step1:拉取代码并安装依赖

$ git clone https://github.com/hacksider/Deep-Live-Cam.git
$ cd ./Deep-Live-Cam

$ conda create -n deep_live_cam python=3.10 
$ conda activate deep_live_cam  
$ pip3 install --use-pep517 -r requirements.txt

$ brew install [email protected]  // 官方文档说 macOS 必须安装或升级 python-tk 包
1
2
3
4
5
6
7
8

注:pip3 install-r requirements.txt 时遇到了报错

Deep-Live-Cam安装依赖报错

Step2:下载模型到指定位置

$ cd ./Deep-Live-Cam/models
$ wget https://huggingface.co/hacksider/deep-live-cam/resolve/main/GFPGANv1.4.pth
$ wget https://huggingface.co/hacksider/deep-live-cam/resolve/main/inswapper_128_fp16.onnx
1
2
3

Step3:准备ffmpeg环境

ffmpeg (opens new window) 官网下载了 ffmpeg、ffprobe的MacOS版可执行文件,并配置好环境变量。

$ ffmpeg -h
$ ffprobe -h
1
2

# 4.2.3 Deep-Live-Cam使用体验

[1] 使用CPU来运行

首次运行时还会再自动下载一些模型,模型文件不大,很快就下载完了。

$ python3 run.py
1

Deep-Live-Cam在CPU环境的推理速度

[2] 使用 Apple Silicon 来运行

Step1:重装指定版本的 onnxruntime-silicon 依赖

$ pip3 uninstall onnxruntime onnxruntime-silicon
$ pip3 install onnxruntime-silicon==1.13.1
1
2

Step2:使用 Apple Silicon 加速推理

$ python3 run.py --execution-provider coreml
1

Deep-Live-Cam使用效果

使用体验:它的推理效果还不错,但是在我的机器上推理速度较慢(也跟我的电脑配置不太高有关系),后台跑预录制的视频还行,实时直播流用的时候一卡一卡的。

# 5. 参考资料

[1] OOTDiffusion虚拟人物服装试穿 from Github (opens new window)

[2] Roop一键换脸 from Github (opens new window)

[3] AI又进化?能实时捕捉表情换脸了 from Bilibili (opens new window)

[4] Deep-Live-Cam实时换脸和深度伪造视频 from Github (opens new window)

[5] ChatTTS:对话式高可控的语音合成模型 from Bilibili (opens new window)

[6] 蚂蚁集团的支付宝开源的数字人技术——EchoMimic,效果比SadTalker、MuseTalk好 from Bilibili (opens new window)

[7] 蚂蚁集团开源 EchoMimic:支持为人像照片对口型、生成肖像动画视频 from oschina (opens new window)

[8] Processing image got a critical error when running this webgui.py from Github issues (opens new window)

[9] DUIX数字人智能交互平台SDK from Github (opens new window)

[10] DH_live少样本学习的实时直播数字人 from Github (opens new window)

[11] Linly-Talker数字人智能对话系统 from Github (opens new window)

[12] Hallo-用于肖像图像动画的分层音频驱动视觉合成 from Github (opens new window)

[13] LivePortrait生成逼真肖像动画 from Github (opens new window)

[14] Al Vtuber:一款由大语言模型驱动的虚拟主播 from Github (opens new window)

[15] 数字人主要技术整理 from Github (opens new window)

[16] Whisper的使用 from LI的技术笔记 (opens new window)

[17] deepseek做文案,sparktts克隆语音,musetalk合成数字 from 微信公众号 (opens new window)

[18] FunAudioLLM-SenseVoice+CosyVoice-论文阅读笔记 from 知乎 (opens new window)

[19] 最新开源tts,支持时时对话,延迟低于25ms,多规则适配多场景 from 微信公众号 (opens new window)

[20] Heygem虚拟数字人 from Github (opens new window)

Last Updated: 4/21/2025, 9:11:43 AM