修复 SadTalker 无法在新版本 Stable Diffusion WebUI 中运行的问题,你学会了吗?

开发 前端
简单介绍下SadTalker:SadTalker 可以说是比较早的开源数字人生产工具,只需要一张人物的照片和语音,我们就可以生成一个人物说话的视频。虽然现在已经有效果更好、更丰富的各种数字人产品,不过SadTalker还是有一些用处的。

大家好,我是每天分享AI应用的萤火君!

使用 Stable Diffusion WebUI 的同学可能会发现一个问题,升级到新版本之后(大约是1.9.0之后的版本),原本可以正常使用的 SadTalker 生成时报错了,用不了了。本文就来分析和解决这个问题。

简单介绍下SadTalker:SadTalker 可以说是比较早的开源数字人生产工具,只需要一张人物的照片和语音,我们就可以生成一个人物说话的视频。虽然现在已经有效果更好、更丰富的各种数字人产品,不过SadTalker还是有一些用处的。

言归正传,SadTalker在新版 Stable Diffusion WebUI 中到底发生了什么问题呢?

分析问题

即然它能运行在老版本的 Stable Diffusion WebUI 中,我猜就是程序兼容性的问题了。

那么到底哪里不兼容呢?程序出了问题,我们一般要先看看错误信息是什么。

前端页面中只显示了一个 Error,具体的错误还得看控制台中输出的日志,我这里给大家粘贴出来:

File "/root/SDWebUI/program/extensions/SadTalker/src/face3d/util/my_awing_arch.py", line 18, in calculate_points
    preds = preds.astype(np.float, copy=False)
  File "/root/miniconda3/envs/SDWebUI/lib/python3.10/site-packages/numpy/__init__.py", line 324, in __getattr__
    raise AttributeError(__former_attrs__[attr])
AttributeError: module 'numpy' has no attribute 'float'.
`np.float` was a deprecated alias for the builtin `float`. To avoid this error in existing code, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
    https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations. Did you mean: 'cfloat'?

看不懂英文的同学不要害怕,可以找个工具自行翻译下。

这个错误从上往下看是SadTalk中的这个文件报错了,位置是第18行:

SadTalker/src/face3d/util/my_awing_arch.py

继续往下看是 Python3.10 中的 numpy 包抛出的错误:

python3.10/site-packages/numpy/__init__.py

再往下是详细的错误说明,大概是说程序使用了 numpy 包中不存在的属性 float,np.float 是一个过期的别名:

AttributeError: module 'numpy' has no attribute 'float'.

`np.float` was a deprecated alias for the builtin `float`.

而且错误说明还给了一个明确的解决方案,直接使用 float 或者使用 np.float64。

To avoid this error in existing code, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.

我们做个总结:SadTalk使用了 numpy 中的一个被过期删除的属性,然后程序报错了,解决方案是换个用法。

另外,这个问题仅在新版本的 Stable Diffusion WebUI 中出现,可以猜测是新版 SD WebUI 依赖的 numpy 版本升级了,而 SadTalker 没有同步升级,还在使用旧的 numpy。

解决问题

既然问题说的这么明白了,解决起来就很简单了。

我们不能将 numpy 降低到旧的版本,因为有的程序需要新版本,那就只能修改 SadTalker 使用新的方式了。

找到 src/face3d/util/my_awing_arch.py 第18行:

preds = preds.astype(np.float, copy=False)

修改为:

preds = preds.astype(float, copy=False)

除了这个地方,还有一处需要修改:

src/face3d/util/preprocess.py 第101行

trans_params = np.array([w0, h0, s, t[0], t[1]])

修改为:

trans_params = np.array([w0, h0, s, t[0][0], t[1][0]])

这个问题也是 numpy 版本升级导致的,t[0] 和 t[1] 是两个序列,不能直接作为数组中的元素。根据上下文我们使用索引取其中的第一个元素就可以了。

修改了这两处代码,SadTalker 又能正确的生成视频了。

安装插件

修改后的 SadTalker 我也发布在 Github上了,大家也可以直接使用下面这个链接来安装插件:

https://github.com/bosima/SadTalker

图片图片

安装成功之后别忘了重启 Stable Diffusion WebUI。

责任编辑:武晓燕 来源: 萤火架构
相关推荐

2023-06-05 08:36:04

SQL函数RANK()

2023-12-12 08:02:10

2022-11-09 07:20:43

调用日志502报错nginx

2023-10-13 09:04:09

2023-09-06 11:31:24

MERGE用法SQL

2024-10-16 11:28:42

2024-02-02 11:03:11

React数据Ref

2023-06-27 07:21:51

前端开发坑点

2024-09-30 09:05:46

Linux网络延迟

2022-07-08 09:27:48

CSSIFC模型

2024-01-02 12:05:26

Java并发编程

2023-08-01 12:51:18

WebGPT机器学习模型

2024-02-04 00:00:00

Effect数据组件

2024-01-19 08:25:38

死锁Java通信

2023-07-26 13:11:21

ChatGPT平台工具

2023-01-10 08:43:15

定义DDD架构

2023-12-07 07:23:39

APIsSDKs

2024-03-04 07:41:18

SpringAOPOOP​

2023-12-26 10:12:19

虚拟DOM数据

2024-01-05 07:46:15

JS克隆对象JSON
点赞
收藏

51CTO技术栈公众号