Deepfakes 简介

Deepfakes 是人工智能生成的任何人或名人的合成视频,它冒充真实的人,并让他们采取行动或说出他们从未做过的任何事情。

Deepfake 的创建过程在技术上很复杂,通常需要大量数据,然后将这些数据输入神经网络以训练和生成合成视频。

Deepfakes 的影响

Deepfakes 和 AI 虚拟形象可能会产生不同的影响,具体取决于其使用方式。虽然 deepfake 的负面影响可能令人恐惧,但它在其他情况下会很有用。

Deepfakes 的优点

  • Deepfakes 可以作为一种艺术形式,让过去的人们重获新生。例如,一幅蒙娜丽莎的画可以用来生成一个会说话的蒙娜丽莎的合成图像。

  • Deepfake 技术可用于在训练视频中创建 AI 头像。在疫情期间,总部位于伦敦的 Synthesia 等初创公司越来越受到企业界的关注,因为封锁和健康问题使涉及真人的视频拍摄变得更加困难。

  • Deepfakes 可用于创建个人头像,可以用于试穿衣服或新发型。

Deepfakes 还可用于调查新闻报道、金融等各个领域的身份保护和匿名化。

Deepfakes 的缺点

  • Deepfakes 可用于通过名人的换脸视频传播假新闻。

  • Deepfakes 也可能被误用于在社交媒体上发起错误信息宣传活动,从而改变公众舆论并导致负面后果。

创建 Deepfakes

尽管可以通过多种方式使用或误用Deepfakes,但随着 AI 日新月异的进步,创建它们变得越来越容易。

我们现在可以用一个人的小视频源创建一个Deepfakes。是的,随着神经网络的最新进展,这现在很容易实现。

让我们将解决方案分解为两部分

  • 声音克隆

  • 视频口型同步

Deepfakes 的语音克隆部分 

SV2TTS 是一个深度学习框架,可以通过训练将音频量化并以数字和参数的形式表现出来,这些数字和参数的基础是一个人的声音的一小段音频。

语音样本的这种数字描述可用于指导和训练一个从文本到语音的模型,以使用任何文本数据作为输入,生成具有相同语音的新音频。因此,使用从样本源视频中提取的音频,可以使用 SV2TTS 轻松创建语音克隆。

图:SV2TTS 工作流程

SV2TTS 工作流程

  • 扬声器编码器接收从源视频中提取的目标人物的音频,并将带有嵌入的编码输出传递给合成器。

  • 合成器根据目标音频和成对的文本记录进行训练,并合成输入

  • 神经声码器将合成器产生的频谱图转换为输出波形

Deepfakes 的视频口形同步部分

Wav2lip 是一种口型同步 GAN,它以人说话的音频样本和等长视频样本作为输入,并将人的口型与输入音频同步。因此,它会生成同一个人说出输入音频的合成视频,而不是原始样本视频中的实际音频。

图:Wav2Lip 工作流程

视频口型同步工作流程

  • 生成器使用身份编码器、语音编码器和面部解码器来生成视频帧

  • 判别器在训练过程中因生成不准确而惩罚生成器

  • 生成器-鉴别器的对抗训练导致最终输出视频具有尽可能高的准确度

示例合成视频

这是我制作的奥巴马与我们交谈的合成视频!用于创建语音克隆音频的文字记录显示:“Hey guys, this is Barack Obama. As you can see, this is not a real video. My creator, Suvojit, generated this synthetic video with Generative Adversarial Networks….”

  • https://youtu.be/5BpxgU-0vbc

深入了解 SV2TTS 的步骤和代码

让我们深入了解 SV2TTS 和 Wav2Lip 的步骤和代码。

源视频

选择源视频——视频可以是任意长度,并且应该只有目标角色在前面发言,并尽可能少的中断。

请注意,生成的最终合成视频将与输入视频的大小相同,因此你可以根据需要裁剪视频。

音频提取

从源视频中提取音频。该音频将作为 SV2TTS 生成语音克隆的训练数据。

导入库

对于 SV2TTS,在Notebook中导入必要的库。

# importing all the necessary libraries
import os
from os.path import exists, join, basename, splitext
import sys
from IPython.display import display, Audio, clear_output
from IPython.utils import io
import ipywidgets as widgets
import numpy as np
from dl_colab_notebooks.audio import record_audio, upload_audio
from synthesizer.inference import Synthesizer
from encoder import inference as encoder
from vocoder import inference as vocoder
from pathlib import Path

克隆 SV2TTS 存储库

克隆基于SV2TTS的实时语音克隆repo并安装requirements。

sys.path.append(name_of_proj)
#url of svt2tts
git_repo_url = 'https://github.com/CorentinJ/Real-Time-Voice-Cloning.git'
name_of_proj = splitext(basename(git_repo_url))[0]
# clone repo recursively and install dependencies
if not exists(name_of_proj):# clone and install!git clone -q --recursive {git_repo_url}# install dependencies!cd {name_of_proj}
!pip install -q -r requirements.txt!pip install -q gdown!apt-get install -qq libportaudio2!pip install -q https://github.com/tugstugi/dl-colab-notebooks/archive/colab_utils.zip

加载预训练模型

下载并加载预训练的模型和合成器。

# load pretrained modelencoder.load_model(project_name / Path("encoder/saved_models/pretrained.pt"))# create synthesizer objectsynthesizer = Synthesizer(project_name / Path("synthesizer/saved_models/pretrained/pretrained.pt"))# load model to vocodervocoder.load_model(project_name / Path("vocoder/saved_models/pretrained/pretrained.pt"))

上传音频和计算嵌入

设置采样率,编码器嵌入,以及上传或记录音频的选项。在这种情况下,我们将上传音频。

# choose appropriate sample rate
SAMPLE_RATE = 22050
# create option to upload or record audio, enter audio duration
rec_upl = "Upld (.mp3 or .wav)" #@param ["Recrd", "Upld (.mp3 or .wav)"]
record_seconds =   600#@param {type:"number", min:1, max:10, step:1}
embedding = None
# compute embeddings
def _compute_embedding(audio):display(Audio(audio, rate=SAMPLE_RATE, autoplay=True))global embeddingembedding = Noneembedding = encoder.embed_utterance(encoder.preprocess_wav(audio, SAMPLE_RATE))
#function for recording your own voice and computing embeddings
def _record_audio(b):clear_output()audio = record_audio(record_seconds, sample_rate=SAMPLE_RATE)_compute_embedding(audio)
#function for uploading audio and computing embeddings
def _upload_audio(b):clear_output()audio = upload_audio(sample_rate=SAMPLE_RATE)_compute_embedding(audio)
if record_or_upload == "Record":button = widgets.Button(description="Record Your Voice")button.on_click(_record_audio)display(button)
else:#button = widgets.Button(description="Upload Voice File")#button.on_click(_upload_audio)_upload_audio("")

生成语音克隆

最后,合成音频并生成输出波形

# text for the voice clone to read out in the synthetically generated audio
text = "Hey guys this is Barack Obama. As you can see, this is not a real video. My creator, Suvojit generated this synthetic video with Generative Adversarial Networks. Like and share this video, and message Suvojit if you want to know more details. Bye" #@param {type:"string"}
def synthesize(embed, text):print("Synthesizing new audio...")# synthesize the spectrogramsspecs = synthesizer.synthesize_spectrograms([text],
)generated_wav = vocoder.infer_waveform(specs[0])# generate output waveformgenerated_wav = np.pad(generated_wav, (0, synthesizer.sample_rate), mode="constant")clear_output()display(Audio(generated_wav, rate=synthesizer.sample_rate, autoplay=True))
if embedding is None:
print(“upload the audio”)
else:
synthesize(embedding, text)

唇形同步:克隆 Wav2Lip Repo

现在是生成口型同步视频的时候了。克隆 Wav2Lip 存储库并下载预训练模型以实现高度准确的唇形同步。挂载 Google 驱动器并上传和复制内容。

#download:  https://github.com/Rudrabha/Wav2Lip#training-on-datasets-other-than-lrs2
!git clone https://github.com/Rudrabha/Wav2Lip.git
# copy checkpoints from google drive to session storage
!cp -ri "/content/gdrive/MyDrive/Files/Wav2lip/wav2lip_gan.pth" /content/Wav2Lip/checkpoints/
!cp -ri "/content/gdrive/MyDrive/Files/Wav2lip/wav2lip.pth" /content/Wav2Lip/checkpoints/
!cd Wav2Lip && pip install -r requirements.txt
!wget "https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth" -O "Wav2Lip/face_detection/detection/sfd/s3fd.pth"

预处理音频和视频数据

现在设置要处理的文件。

%cd sample_data/
%rm input_audio.wav
%rm input_video.mp4
from google.colab import files
uploaded = files.upload()
%cd ..
!cd Wav2Lip && python inference.py --checkpoint_path checkpoints/wav2lip_gan.pth --face "/content/sample_data/input_video.mp4" --audio "/content/sample_data/input_audio.wav"
from google.colab import files
# download the voice generated in previous steps to session storage
files.download('/content/Wav2Lip/results/result_voice.mp4')
from IPython.display import HTML
from base64 import b64encode
# read binary of the audio file
mp4 = open('/content/Wav2Lip/results/result_voice.mp4','rb').read()
data_url = "data:video/mp4;base64," + b64encode(mp4).decode()
HTML(f"""
<video width="50%" height="50%" controls><source src="{data_url}" type="video/mp4">
</video>
""")

上传 Wav2Lip 的输入文件

上传 input_vide o.mp4 & input_audio.wav 文件。输入音频是在上一步从 SV2TTS 生成的。

%cd sample_data/
from google.colab import files
uploaded = files.upload()
%cd ..

生成口型同步视频

使用预训练模型创建 wav2lip 视频。

# set the args for checkpoint and input files and generate the lip sync video
!cd Wav2Lip && python inference.py --checkpoint_path checkpoints/wav2lip_gan.pth

将 Deepfake 下载到你的 PC

就是这样!现在你可以将 deepfake 下载到你的谷歌驱动器和你的电脑上。

files.download('/content/Wav2Lip/results/result_voice.mp4')

因此,音频克隆和唇形同步 GAN 的组合可用于制作一个deepfake ,从一个人的 10 秒短视频中生成任何人所说的任意内容(自定义内容)。

参考

SV2TTS 论文: https://arxiv.org/pdf/1806.04558.pdf

Wav2Lip 论文: https://arxiv.org/pdf/2008.10010.pdf

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

只有一个源视频的Deepfakes简介相关推荐

  1. 实现一个直播视频app源码的邀请码功能

    最近做一个直播视频app源码的邀请码功能,一直没找到感觉很完美的方法,然后自己造了一个轮子,当然效果还不是很完善. 首先我认为直播视频app源码的邀请码需要有以下特性: 1.唯一性,不能出现两个场景下 ...

  2. 音视频SDP协议简介

    音视频SDP协议简介 SDP:会话描述协议,是一种会话描述格式,为描述多媒体数据而设计. SDP协议介绍 SDP 完全是一种会话描述格式(对应的RFC2327 , RFC4566).它不属于传输协议 ...

  3. SPDIF 色差输出 视频输出 S-Video YUV YCbCr YPbPr RGB VGA WXGA 分别的详细介绍 视频方式接口简介

    SPDIF 色差输出 视频输出 S-Video YUV YCbCr YPbPr RGB VGA WXGA 分别的详细介绍 视频方式接口简介 2008年04月05日 星期六 00:27 SPDIF 数字 ...

  4. python网络爬虫_Python网络爬虫——爬取视频网站源视频!

    原标题:Python网络爬虫--爬取视频网站源视频! 学习前提 1.了解python基础语法 2.了解re.selenium.BeautifulSoup.os.requests等python第三方库 ...

  5. 第一个Mybatis程序示例 Mybatis简介(一)

    在JDBC小结中(可以参阅本人JDBC系列文章),介绍到了ORM,其中Mybatis就是一个不错的ORM框架 MyBatis由iBatis演化而来 iBATIS一词来源于"internet& ...

  6. 一个简单视频网站开发小记

    前言 视频格式转换,视频图片截取,视频存储设计,大文件上传处理以及相关配置,前端视频播放,视频播放流畅度,每一个都不简单,都需要花心思思考解决方法!基本上每个问题,都是使用相应的开源库! 需求背景 手 ...

  7. python网络爬虫爬取视频_Python网络爬虫——爬取小视频网站源视频!自己偷偷看哦!...

    学习前提1.了解python基础语法 2.了解re.selenium.BeautifulSoup.os.requests等python第三方库 1.引入库 爬取网站视频需要引入的第三方库: impor ...

  8. PyQt+moviepy音视频剪辑实战2:一个剪裁视频文件精华内容留存工具的实现

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.引言 ...

  9. pyqt tablewidget 设置一行的背景_PyQt+moviepy音视频剪辑实战2:一个剪裁视频文件精华内容留存工具的实现...

    一.引言 最近网上会议很多,网上会议工具大多提供了录播的功能,有些会议内容比较精彩,但中间穿插有些无用的内容,或者有些只有几段精彩,大部分内容可以去除.这就需要对该录播文件进行剪辑,取其精华留存,这样 ...

  10. Chromium源码目录结构简介

    Chromium源码目录结构简介入门必备. High-level overview 高级概述 Chromium is separated into two main parts (excluding ...

最新文章

  1. 【PP生产订单】入门介绍(七)
  2. oracle外表日期,三步教会您掌握oracle外表(external table)
  3. 飞鸽传书2007很给力
  4. .net 特性 Attribute
  5. PyTorch 1.0 中文官方教程:torch.nn 到底是什么?
  6. python列表add用法_使用add_edge_list()方法创建图形的最佳方法是什么?
  7. MySQL按日期分组统计(按天统计,按月统计)
  8. 考满分软件测试工程师(实习)面试软达启航面试
  9. 进化计算中基于分类的预处理代理模型
  10. Unity3D数字孪生笔记——Unity脚本篇
  11. 手机上好用的java编译器_手机上好用的java编译器
  12. Java多线程系列--“JUC集合”07之 ArrayBlockingQueue
  13. 世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。
  14. 低多边形,通过PS制作低多边形图形
  15. java 计算百分比_java前后台计算百分比(保留2位小数)
  16. 苹果听天由命 未雇佣游说公司处理欧盟补税案
  17. 程序员该如何学习技术
  18. CISP-PTE靶机练习(me-and-my-girlfriend)
  19. mac卸载python3.7_工具安装-Mac 卸载python3
  20. 蓝桥杯练习系统-基础练习

热门文章

  1. git cherry-pick 教程
  2. uniapp 引入外部链接js
  3. 马斯克的“圣战”:阻止人工智能毁灭人类
  4. 洛阳九县八取名字_洛阳市地图(洛阳市九县六区地图)
  5. Adversarial Attack的粗略总结
  6. python计算方位角_python实现两个经纬度点之间的距离和方位角的方法
  7. 如何搭建DNS--域名系统
  8. 亲测win10安装mac虚拟机+网络配置完整过程
  9. JZOJ 3337. 【NOI2013模拟】wyl8899的TLE
  10. 一键清除系统垃圾文件的bat批处理命令