孙燕姿果然不愧是孙燕姿,不愧为南洋理工大学的高材生,近日她在个人官方媒体博客上写了一篇英文版的长文,正式回应现在满城风雨的“AI孙燕姿”现象,流行天后展示了超人一等的智识水平,行文优美,绵恒隽永,对AIGC艺术表现得极其克制,又相当宽容,充满了语言上的古典之美,表现出了“任彼如泰山压顶,我只当清风拂面”的博大胸怀。

本次我们利用edge-tts和Sadtalker库让AI孙燕姿朗诵本尊的博文,让流行天后念给你听。

Sadtalker配置

之前我们曾经使用百度开源的PaddleGAN视觉效果模型中一个子模块Wav2lip实现了人物口型与输入的歌词语音同步,但Wav2lip的问题是虚拟人物的动态效果只能局限在嘴唇附近,事实上,音频和不同面部动作之间的连接是不同的,也就是说,虽然嘴唇运动与音频的联系最强,但可以通过不同的头部姿势和眨眼来反作用于音频。

和Wav2lip相比,SadTaker是一种通过隐式3D系数调制的风格化音频驱动Talking头部视频生成的库,一方面,它从音频中生成逼真的运动系数(例如,头部姿势、嘴唇运动和眨眼),并单独学习每个运动以减少不确定性。对于表达,通过从的仅嘴唇运动系数和重建的渲染三维人脸上的感知损失(唇读损失,面部landmark loss)中提取系数,设计了一种新的音频到表达系数网络。

对于程序化的头部姿势,通过学习给定姿势的残差,使用条件VAE来对多样性和逼真的头部运动进行建模。在生成逼真的3DMM系数后,通过一种新颖的3D感知人脸渲染来驱动源图像。并且通过源和驱动的无监督3D关键点生成扭曲场,并扭曲参考图像以生成最终视频。

Sadtalker可以单独配置,也可以作为Stable-Diffusion-Webui的插件而存在,这里推荐使用Stable-Diffusion插件的形式,因为这样Stable-Diffusion和Sadtalker可以共用一套WebUI的界面,更方便将Stable-Diffusion生成的图片做成动态效果。

进入到Stable-Diffusion的项目目录:

cd stable-diffusion-webui

启动服务:

python3.10 webui.py

程序返回:

Python 3.10.11 (tags/v3.10.11:7d4cc5a, Apr  5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]
Version: v1.3.0
Commit hash: 20ae71faa8ef035c31aa3a410b707d792c8203a3
Installing requirements
Launching Web UI with arguments: --xformers --opt-sdp-attention --api --lowvram
Loading weights [b4d453442a] from D:\work\stable-diffusion-webui\models\Stable-diffusion\protogenV22Anime_protogenV22.safetensors
load Sadtalker Checkpoints from D:\work\stable-diffusion-webui\extensions\SadTalker\checkpoints
Creating model from config: D:\work\stable-diffusion-webui\configs\v1-inference.yaml
LatentDiffusion: Running in eps-prediction mode
DiffusionWrapper has 859.52 M params.
Running on local URL: http://127.0.0.1:7860

代表启动成功,随后http://localhost:7860

选择插件(Extensions)选项卡

点击从url安装,输入插件地址:github.com/Winfredy/SadTalker

安装成功后,重启WebUI界面。

接着需要手动下载相关的模型文件:

https://pan.baidu.com/s/1nXuVNd0exUl37ISwWqbFGA?pwd=sadt

随后将模型文件放入项目的stable-diffusion-webui/extensions/SadTalker/checkpoints/目录即可。

接着配置一下模型目录的环境变量:

set SADTALKER_CHECKPOINTS=D:/stable-diffusion-webui/extensions/SadTalker/checkpoints/

至此,SadTalker就配置好了。

edge-tts音频转录

之前的歌曲复刻是通过So-vits库对原歌曲的音色进行替换和预测,也就是说需要原版的歌曲作为基础数据。但目前的场景显然有别于歌曲替换,我们首先需要将文本转换为语音,才能替换音色。

这里使用edge-tts库进行文本转语音操作:

import asyncio  

import edge_tts  

TEXT = '''  

As my AI voice takes on a life of its own while I despair over my overhanging stomach and my children's every damn thing, I can't help but want to write something about it.  

My fans have officially switched sides and accepted that I am indeed 冷门歌手 while my AI persona is the current hot property. I mean really, how do you fight with someone who is putting out new albums in the time span of minutes.  

Whether it is ChatGPT or AI or whatever name you want to call it, this "thing" is now capable of mimicking and/or conjuring,  unique and complicated content by processing a gazillion chunks of information while piecing and putting together in a most coherent manner the task being asked at hand. Wait a minute, isn't that what humans do? The very task that we have always convinced ourselves; that the formation of thought or opinion is not replicable by robots, the very idea that this is beyond their league, is now the looming thing that will threaten thousands of human conjured jobs. Legal, medical, accountancy, and currently, singing a song.   

You will protest, well I can tell the difference, there is no emotion or variance in tone/breath or whatever technical jargon you can come up with. Sorry to say, I suspect that this would be a very short term response.  

Ironically, in no time at all, no human will be able to rise above that. No human will be able to have access to this amount of information AND make the right calls OR make the right mistakes (ok mayyyybe I'm jumping ahead). This new technology will be able to churn out what exactly EVERYTHING EVERYONE  needs. As indie or as warped or as psychotic as you can get, there's probably a unique content that could be created just for you. You are not special you are already predictable and also unfortunately malleable.  

At this point, I feel like a popcorn eater with the best seat in the theatre. (Sidenote: Quite possibly in this case no tech is able to predict what it's like to be me, except when this is published then ok it's free for all). It's like watching that movie that changed alot of our lives Everything Everywhere All At Once, except in this case, I don't think it will be the idea of love that will save the day.   

In this boundless sea of existence, where anything is possible, where nothing matters, I think it will be purity of thought, that being exactly who you are will be enough.   

With this I fare thee well.  

'''  

VOICE = "en-HK-YanNeural"
OUTPUT_FILE = "./test_en1.mp3" async def _main() -> None:
communicate = edge_tts.Communicate(TEXT, VOICE)
await communicate.save(OUTPUT_FILE) if __name__ == "__main__":
asyncio.run(_main())

音频使用英文版本的女声:en-HK-YanNeural,关于edge-tts,请移步:口播神器,基于Edge,微软TTS(text-to-speech)文字转语音免费开源库edge-tts语音合成实践(Python3.10),这里不再赘述。

随后再将音频文件的音色替换为AI孙燕姿的音色即可:AI天后,在线飙歌,人工智能AI孙燕姿模型应用实践,复刻《遥远的歌》,原唱晴子(Python3.10)

本地推理和爆显存问题

准备好生成的图片以及音频文件后,就可以在本地进行推理操作了,访问 localhost:7860

这里输入参数选择full,如此会保留整个图片区域,否则只保留头部部分。

生成效果:

SadTalker会根据音频文件生成对应的口型和表情。

这里需要注意的是,音频文件只支持MP3或者wav。

除此以外,推理过程中Pytorch库可能会报这个错误:

torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 6.00 GiB total capacity; 5.38 GiB already allocated; 0 bytes free; 5.38 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

这就是所谓的"爆显存问题"。

一般情况下,是因为当前GPU的显存不够了所导致的,可以考虑缩小torch分片文件的体积:

set PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:60

如果音频文件实在过大,也可以通过ffmpeg对音频文件切片操作,分多次进行推理:

ffmpeg -ss 00:00:00 -i test_en.wav -to 00:30:00 -c copy test_en_01.wav

藉此,就解决了推理过程中的爆显存问题。

结语

和Wav2Lip相比,SadTalker(Stylized Audio-Driven Talking-head)提供了更加细微的面部运动细节(如眼睛眨动)等等,可谓是细致入微,巨细靡遗,当然随之而来的是模型数量和推理成本以及推理时间的增加,但显然,这些都是值得的。

南洋才女,德艺双馨,孙燕姿本尊回应AI孙燕姿(基于Sadtalker/Python3.10)的更多相关文章

  1. 吾剑未尝不利,国内Azure平替,科大讯飞人工智能免费AI语音合成(TTS)服务Python3.10接入

    微软Azure平台的语音合成(TTS)技术确实神乎其技,这一点在之前的一篇:含辞未吐,声若幽兰,史上最强免费人工智能AI语音合成TTS服务微软Azure(Python3.10接入),已经做过详细介绍, ...

  2. 人工智能,丹青圣手,全平台(原生/Docker)构建Stable-Diffusion-Webui的AI绘画库教程(Python3.10/Pytorch1.13.0)

    世间无限丹青手,遇上AI画不成.最近一段时间,可能所有人类画师都得发出一句"既生瑜,何生亮"的感叹,因为AI 绘画通用算法Stable Diffusion已然超神,无需美术基础,也 ...

  3. 笔精墨妙,妙手丹青,微软开源可视化版本的ChatGPT:Visual ChatGPT,人工智能AI聊天发图片,Python3.10实现

    说时迟那时快,微软第一时间发布开源库Visual ChatGPT,把 ChatGPT 的人工智能AI能力和Stable Diffusion以及ControlNet进行了整合.常常被互联网人挂在嘴边的& ...

  4. 人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10)

    图像风格迁移(Style Transfer)是一种计算机视觉技术,旨在将一幅图像的风格应用到另一幅图像上,从而生成一幅新图像,该新图像结合了两幅原始图像的特点,目的是达到一种风格化叠加的效果,本次我们 ...

  5. 含辞未吐,声若幽兰,史上最强免费人工智能AI语音合成TTS服务微软Azure(Python3.10接入)

    所谓文无第一,武无第二,云原生人工智能技术目前呈现三足鼎立的态势,微软,谷歌以及亚马逊三大巨头各擅胜场,不分伯仲,但目前微软Azure平台不仅仅只是一个PaaS平台,相比AWS,以及GAE,它应该是目 ...

  6. 闻其声而知雅意,基于Pytorch(mps/cpu/cuda)的人工智能AI本地语音识别库Whisper(Python3.10)

    前文回溯,之前一篇:含辞未吐,声若幽兰,史上最强免费人工智能AI语音合成TTS服务微软Azure(Python3.10接入),利用AI技术将文本合成语音,现在反过来,利用开源库Whisper再将语音转 ...

  7. 登峰造极,师出造化,Pytorch人工智能AI图像增强框架ControlNet绘画实践,基于Python3.10

    人工智能太疯狂,传统劳动力和内容创作平台被AI枪毙,弃尸尘埃.并非空穴来风,也不是危言耸听,人工智能AI图像增强框架ControlNet正在疯狂地改写绘画艺术的发展进程,你问我绘画行业未来的样子?我只 ...

  8. 好饭不怕晚,Google基于人工智能AI大语言对话模型Bard测试和API调用(Python3.10)

    谷歌(Google)作为开源过著名深度学习框架Tensorflow的超级大厂,是人工智能领域一股不可忽视的中坚力量,旗下新产品Bard已经公布测试了一段时间,毁誉参半,很多人把Google的Bard和 ...

  9. 任务拆解,悠然自得,自动版本的ChatGPT,AutoGPT自动人工智能AI任务实践(Python3.10)

    当我们使用ChatGPT完成某些工作的时候,往往需要多轮对话,比如让ChatGPT分析.翻译.总结一篇网上的文章或者文档,再将总结的结果以文本的形式存储在本地.过程中免不了要和ChatGPT" ...

  10. AI从业者需要应用的10种深度学习方法

    https://zhuanlan.zhihu.com/p/43636528 https://zhuanlan.zhihu.com/p/43734896 摘要:想要了解人工智能,不知道这十种深度学习方法 ...

随机推荐

  1. Maven 的仓库、周期和插件

    一.Maven 仓库 在 Maven 的世界中,任何一个依赖.插件或者项目构建的输出,都可以称为构建.Maven 在某个统一的位置存储所有项目的共享的构建,这个统一的位置,我们就称之为仓库.任何的构建 ...

  2. 机器学习基础05DAY

    分类算法之k-近邻 k-近邻算法采用测量不同特征值之间的距离来进行分类 优点:精度高.对异常值不敏感.无数据输入假定 缺点:计算复杂度高.空间复杂度高 使用数据范围:数值型和标称型 一个例子弄懂k-近 ...

  3. STM32 HAL库学习(F407ZGT6) (1)-晶振/时钟树

    时钟树(以F407为例)   对于 STM32F4 系列的芯片,正常工作的主频可以达到 168Mhz,但并不是所有外设都需要系统时钟这么高的频率,比如看门狗以及RTC只需要几十Khz的时钟即可.同一个 ...

  4. 在smt贴片加工中手工焊接和机器焊接的区别

    在smt贴片加工领域,都需要将电子元件贴装在pcb板表面并进行焊接的,常用的焊接方式分为两种:手动焊接和全自动机器焊接,而常用的焊接机器有回流焊机和波峰焊机,那你知道他们的区别是什么吗?安徽英特丽带你 ...

  5. 聊聊Redis sentinel 机制

    Redis 的哨兵机制自动完成了以下三大功能,从而实现了主从库的自动切换,可以降低 Redis 集群的运维开销: 监控主库运行状态,并判断主库是否客观下线: 在主库客观下线后,选取新主库: 选出新主库 ...

  6. 13-css兼容性处理(添加前缀)

    const { resolve } = require('path') const HtmlWebpackPlugin = require('html-webpack-plugin') const M ...

  7. Hugging News #0428: HuggingChat 来啦

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  8. 案例:自来水厂项目PM编制问题-检查记录

    1.策划书部分 选择错误.缺失数据 编的太假了 工期对不上.就算按合同实际也没这么长 合同才210天,当然你算上现在可以编远点,但是编合理点 一些瞎编 这瞎编我信了 但是后面空的表是干啥捏?而且数也不 ...

  9. 基于.Net5+Vue+iView前后端分离通用权限开源系统

    在Github上,.Net通用的权限框架非常多,功能也都比较强大,但是对于很多初学者来说,想要从零学习框架的搭建,就比较困难了. 所以,今天给大家推荐一套比较简单的前后端分离通用权限系统. 项目简介 ...

  10. C# 实现窗体启动时隐藏

    在某些时候需要实现一个界面的后台程序,程序自动运行,但起初不显示窗体,在满足触发条件时显示,此时需要在运行程序时先自动隐藏窗体. 修改窗体对应的Program.cs: using System; us ...