0%

使用comfyUI创建一个数字人

需求介绍

这几天赋闲在家,正好想起来可以把雅思系统性的准备一下,然后赶紧考掉。正好手头有一个5060 NVIDIA gpu显卡,于是乎就打算做一个ai老师,可以让她陪我练口语+作文,这样有一个美女老师作伴,学习起来还是比较有动力和快乐的,毕竟ai情绪价值给的足,而且还有记忆,可以记录你的学习过程。

先做一个无交互版的数字人吧,也就是那种单向输出只动嘴的那种,有点像那种梳子女主播,这里面就用到了comfyUI,目前很有名的ai工作流工具。

https://github.com/Comfy-Org/ComfyUI 这里可以直接下载comfyUI,这个安装包不大,下载之后执行程序的时候会下载requirement.txt的内容,里面不少还是要翻墙下载的,所以我建议直接下载它最新的包 https://github.com/comfyanonymous/ComfyUI/releases/latest/download/ComfyUI_windows_portable_nvidia.7z 。这样就就直接把需要的python包直接下载完毕了,解压直接能用,但是这个毕竟是便携版(portable),所以很多的插件还是要自己用到的时候再下载,不过目前市场比较火热的几个面部、肢体、口型的开源算法库都支持comfyUI的插件,所以随用随下即可。

安装之后,在根目录下执行这个,把组件都装好:

1
2
.\python_embeded\python.exe -m pip install pytorch-lightning ffmpeg-python omegaconf einops diffusers
cd custom_nodes; git clone https://github.com/ltdrdata/ComfyUI-Manager.git; cd .. # 下载manager包,以后下载其他组件就可以在这里包里搜索和下载:

LivePortrait基本原理

我这里用到了LivePortrait,现在有一些更牛逼的,比如qwen最近上了一个可以语音转视频的能力,我看了一下说明文档,感觉效果很强力。不过我还是先从基础开始,先说一下LivePortrait它在comfyUI里各组件的作用:

  1. 加载图像:这里就是上传一个照片,最终生成的电子人也是图片的样子。
  2. load video:它是动作捕获源,通过上传视频,让图片的人物表情根据视频的动作“动起来”,这里如果视频是有声音的话,也可以输出audio,然后你传入的图片里的人物不但会跟视频里的人一样的表情也会说一样的话。
  3. Repeat Image Batch:处理循环动作,如果你的语音持续20秒,但是你的video只有5秒,那么这里可以选择4,避免出现“视频播完了,但是语音还没放完”的违和感。
  4. LivePortrait Load FaceAlignmentCropper:这个组件本身不干活(不裁剪),它负责把一套 专门用于人脸对齐和检测的算法模型(通常是基于 face-alignment 库或 SFD 算法)加载到显存里。它决定了“用什么算法、在哪个硬件跑”。它会分配gpu,你会看到它这里有”face detecter device:cuda”这样的字样,它提供一种算法给LivePortrait Cropper。
  5. (Down)Load LivePortraitModels:它是整个流程的“预加载中心”。LivePortrait 不是一个简单的算法,它包含了几个子模型(如特征提取器、运动预测器等)。这个节点负责把这些几百 MB 甚至上 GB 的 .safetensors 或 .pth 模型文件从硬盘加载到显存里。这个节点会自动去 HuggingFace 下载模型。如果报错,通常是网络不通,需要手动把模型包丢进 ComfyUI/models/liveportrait 文件夹。
  6. LivePortrait Cropper:这个组件会分析你上传的图片,主要是分析出来嘴巴、鼻子、眉毛、眼神等等信息把这些信息按照 LivePortrait Load FaceAlignmentCropper 拆解出来。它不仅分析你的照片(Source),还会分析你的视频(Driving),它把照片和视频里的五官坐标都归一化到同一个512 乘以 512的空间里,然后把加工之后的图片信息crop_image 和 crop_info 传递给LivePortrait Process.
  7. LivePortrait Process:它负责执行复杂的数学运算(即 Warp 变形和生成对抗推理),是“高性能推理引擎”,它产出的不是最终视频,而是每一帧处理好的图像流。它把“动作数据包”拆开,一帧一帧地应用到你的照片脸上。
  8. Load Audio (Path):这里可以上传语音文件mp3,给电子人加上声音,不过这里是固定的语音文件mp3,如果想要达到随机的对话,我们要引入ollama chat 和 edge TTS 这俩组件,让ai去思考然后生成文本,tts把文本再变成声音。
  9. Video Combine:这一步就是最后的产出,是“封装与渲染器”,它接收声音和LivePortrait Process加工后的图片,得到最终的电子人的效果。这里要注意frame_rate,保持 FPS 与你的 Load Video 源视频一致。如果你用的是手机拍的,通常是 30 或 60。不然就是快进or 慢动作。
  10. Queue Prompt:最后的输出。

如果输出有问题,可以看具体有问题的组件以及对应的输出文案再找到万能的ai来排错就好啦~

图片搭配动作and声音

关于数字人的外貌,你可以自己去下载一个checkpoint搭配lora去生成一个图片,也可以直接拿别人现成的来用,我就是选择了 https://civitai.com/models/1142645/lorabld-futa 这里的随便一张图片。

有了基础的图片之后,就需要选择一个说话的视频,这样你选择的图片也会跟着视频的样子说话。

这些说话的视频可能就要去素材网站上下载了,我用的是 https://www.vjshi.com/so/285409.html ,绝大部分素材网站都是需要付费的,不然就只能靠video downloadhelper来下载有水印的。这里要注意一下,因为我们要做的是说话的效果,水印如果遮挡住了嘴部。 LivePortrait Load FaceAlignmentCropper 加载的模型会去寻找人脸的 68 个关键点时就会发生错误,只能乱猜,猜出来的结果大概率就是“鬼脸”。LivePortrait Models是一个极其挑食的质检员,你给它的“动作素材”越干净,它吐出来的“电子人视频”就越像真人,而不像是一个中了病毒的数字幻影。

然后还要找一个mp3音频,这里我个人推荐 https://fish.audio/zh-CN/app/text-to-speech/ ,它有一些免费的额度可以供你使用,而且声线很丰富。你输入预定好的文字,然后转换成mp3,下载这个mp3,就可以把这个文件添加到comfyUI的load audio里,这样就可以让video combine来产出一个mp4,效果就是:这个数字人长的你传入的图片的脸,但是做着load video的面部表情,然后说出来这个mp3的话。

如果想搞更精细的效果,可以使用hellomeme,但是它更吃内存,我用了几次,OOM的概率不低…

用了几天LivePortrait,发现它其实限制蛮多的。因为它的功能比较简单:就是弄面部的表情,所以手上或者扭头这些都做不到,如果你给它的视频还涉及镜头的拉近和拉远,那更完蛋了。所以它对传入的图片和load video的要求很高:

  1. 两个最好都是大脸,面部器官比较明显易分别。
  2. 图片和load video也都是直挺挺的站着,比如你的图片是歪头,那么最后产出的mp4不是歪头,而是会正头,但是整个图片是歪的。
  3. 图片的分辨率不易太大,最好是1024乘以1024,再大就失真很严重了。

入门视频可以看:https://www.bilibili.com/video/BV1BH1zYcEt2/?vd_source=5fc229d37e0f67862fcd1c8359f81da6

参考资料

https://aigcreative.feishu.cn/wiki/VTqgwLTziiK8H9kJuUXcH0kMnTh
https://github.com/stavsap/comfyui-ollama
https://github.com/HelloVision/ComfyUI_HelloMeme/blob/main/example_workflows/hellomeme_video_workflow.jpg
https://civitai.com/images/104597685
https://civitai.com/models/4201/realistic-vision-v60-b1
https://www.bilibili.com/video/BV1wy411i7Du/?vd_source=5fc229d37e0f67862fcd1c8359f81da6
https://waytoagi.feishu.cn/wiki/QJyUwzvW7iXbQhkSCuVc08aTnFg
https://github.com/HelloVision/ComfyUI_HelloMeme?tab=readme-ov-file

感谢你请我喝咖啡~

欢迎关注我的其它发布渠道