[AI学习:SPIN -win-安装SPIN-工具过程 SPIN win 电脑安装=accoda 环境-第三篇:解决报错]
[AI学习:SPIN -win-安装SPIN-工具过程 SPIN win 电脑安装=accoda 环境-第三篇:解决报错])
- 1-概述
- (1)概述
- (2)操作流程-解决问题
- 1-问题:ImportError: cannot import name 'int' from 'numpy'
- 1)-问题原因
- 2)-解决方式
- 2-问题:ImportError: cannot import name 'bool' from 'numpy'
- 1)-问题原因
- 2)-解决方式
- 3-问题:TypeError: hmr() missing 1 required positional argument: 'smpl_mean_params'
- 1)-问题原因
- 2)-解决方式
- 4-问题:TypeError: hmr() missing 1 required positional argument: 'smpl_mean_params'
- 1)-问题原因
- 2)-解决方式
- (3)操作流程-安装工具
- 1-运行脚本
- 2-确认文件
- 3-下载问题
- 1)-问题原因
- 2)-解放方式
- 4-下载wget工具
- 4-继续解问题
- 1-问题:model=hmr.hmr(SMPL_MEAN_PARAMS).to(DEVICE).eval()
- 1)-问题原因
- 2)-解决方式
- (4)总结
1-概述
(1)概述
上篇已经说了,最近学习AI,看到了SPIN这个工具,可以将图片转换位3D模型,我们继续来尝试,并且将问题记录。
前篇文章:[AI学习:SPIN -win-安装SPIN-工具过程 SPIN win 电脑安装=accoda 环境-第二篇:解决报错]
我们之前布置了环境,之后往后遇到很多问题,今天来继续操作。
(2)操作流程-解决问题
1-问题:ImportError: cannot import name ‘int’ from ‘numpy’
1)-问题原因
NumPy 版本太新 导致的兼容性问题。
早期的 smplx / chumpy 库在加载 .pkl 时会用到:
from numpy import bool, int, float, complex, object, unicode, str, nan, inf
2)-解决方式
尝试解决:直接安装兼容版本 NumPy
pip install numpy==1.23.5
之后在尝试
python demo_norender.py --checkpoint data/model_checkpoint.pt --img examples\front.jpg
如下图:这张截图显示出目前的 NumPy 降级操作 部分成功,但仍然版本不够低。
SPIN + SMPL + Chumpy 组合必须在 NumPy < 1.24 才能正常工作。
日志显示如下:
Successfully uninstalled numpy-2.0.2
Successfully installed numpy-1.26.4
ERROR: opencv-python 4.12.0.88 requires numpy<2.3.0,>=2; python_version >= "3.9"
说明还是太新了:
ImportError: cannot import name 'int' from 'numpy'
2-问题:ImportError: cannot import name ‘bool’ from ‘numpy’
1)-问题原因
chumpy/smplx 还在用 numpy.bool / numpy.int 这些旧别名,当前的 NumPy=1.26.4 已把它们删除了。
2)-解决方式
尝试解决:
pip uninstall -y numpy opencv-python opencv-contrib-python
pip install numpy==1.23.5 opencv-python==4.7.0.72
验证加载SMPL是否陈功
python - << "PY"
import os, sys
sys.path.insert(0, os.getcwd())
from models import SMPL
m = SMPL(model_path="data/smpl", gender="neutral")
print("✅ Loaded SMPL:", m.faces.shape)
PY
如下图:<class ‘numpy.ndarray’> (13776, 3)
<class 'numpy.ndarray'> (13776, 3)
也就是说明库安装成功了
3-问题:TypeError: hmr() missing 1 required positional argument: ‘smpl_mean_params’
1)-问题原因
SPIN 的 hmr() 函数定义在 models/hmr.py 文件里,函数原型是:
def hmr(smpl_mean_params):...
也就是说,它必须传入一个参数——smpl_mean_params 的路径。
这个路径告诉模型去哪里加载 SMPL 的平均姿态和形状参数(data/smpl_mean_params.npz)。
2)-解决方式
修改 demo_norender.py
找到你文件里这行(大约第 37 行):
model = hmr().to(DEVICE).eval()
把它改成:
from constants import SMPL_MEAN_PARAMS
model = hmr(SMPL_MEAN_PARAMS).to(DEVICE).eval()
如果 constants.py 没有定义 SMPL_MEAN_PARAMS,就在它末尾加上一行:
SMPL_MEAN_PARAMS = 'data/smpl_mean_params.npz'
4-问题:TypeError: hmr() missing 1 required positional argument: ‘smpl_mean_params’
1)-问题原因
脚本已经能跑到构建 HMR 网络这一步了,报的两个错分别是:
AttributeError: ‘function’ object has no attribute ‘get_hmr’
TypeError: hmr() missing 1 required positional argument: ‘smpl_mean_params’
这两行把问题说得很清楚:导入方式不对 + 少了 smpl_mean_params 文件。
2)-解决方式
尝试和测试:
C:\Users\Admin\SPIN\constants.py
在文件末尾 添加这一行:
SMPL_MEAN_PARAMS = 'data/smpl_mean_params.npz'
保存后,确认在路径:
C:\Users\Admin\SPIN\data\
中间存在:
smpl_mean_params.npz
(3)操作流程-安装工具
1-运行脚本
如下图所示:这是SPIN 项目自带的 fetch_data.sh 脚本内容,它的作用是下载并准备运行 SPIN 所需的全部数据文件。
脚本整体作用:这是一个 Bash 脚本,用于自动下载 SPIN 的模型参数、预训练权重、初始拟合结果和 SMPL 相关数据。
这里挺尴尬的,其实中间很多工具后来发没有必要自己一个个下。
2-确认文件
如下图所示:现在这张图显示的文件结构说明,已经下载到了几乎 全部 SMPL 模型必要文件,只差一个文件:
文件名 | 说明 | 状态 |
---|---|---|
model_checkpoint.pt | SPIN 预训练模型权重 ✅ | ✅ 已有 |
SMPL_FEMALE.pkl / SMPL_MALE.pkl / SMPL_NEUTRAL.pkl | SMPL三种体型模型 ✅ | ✅ 已有 |
smpl 文件夹 | 存放模型文件的目录 | ✅ 有 |
SMPL_python_v1.1.0.zip | 官方SMPL Python SDK | ✅ 可选,不影响demo |
❌ 缺少 data/smpl_mean_params.npz | HMR初始化用的平均姿态参数 | ❌ 缺失 |
现在运行 demo_norender.py 报错的真正原因
TypeError: hmr() missing 1 required positional argument: ‘smpl_mean_params’
其实就是因为 SPIN 的 hmr() 需要读取的平均参数文件还没放进来。
3-下载问题
1)-问题原因
tarfile.ReadError: not a gzip file
gzip.BadGzipFile: Not a gzipped file (b'<!')
这里以为下载的是 data.tar.gz,但实际上保存下来的是 HTML/错误页面(开头是 <!),所以 tarfile 解不出来。
2)-解放方式
这里我们要下载一个win的工具>> wget工具.
4-下载wget工具
这张截图可以看到:已经把 wget.exe 成功放进了 C:\Windows\System32。这意味着:
现在在任意路径的命令行中都能直接使用 wget 命令,不需要再额外安装。
(它在 PATH 环境变量下全局可用。)
这里同时需要 下载git 工具 ,之后如下图所示,终于 成功地从官方服务器下载了真正的 data.tar.gz 文件。关键点:
-
返回 HTTP 200 OK ✅
-
Content-Type 是 application/x-gzip ✅
-
文件大小约 14 MB (14960640 bytes) ✅
这就是 SPIN 官方完整数据包。
SPIN 运行所需的全部关键文件已经齐全
文件/文件夹 | 作用 | 状态 |
---|---|---|
smpl/ | 存放 SMPL 模型(含 Male/Female/Neutral pkl) | ✅ 存在 |
SMPL_NEUTRAL.pkl | 中性 SMPL 模型 | ✅ |
SMPL_MALE.pkl | 男性 SMPL 模型 | ✅ |
SMPL_FEMALE.pkl | 女性 SMPL 模型 | ✅ |
smpl_mean_params.npz | SMPL 参数均值文件(模型初始化必需) | ✅ |
model_checkpoint.pt | 预训练的 HMR/SPIN 模型权重 | ✅ |
data.tar.gz | 原始下载压缩包,可保留以备份 | ✅ |
static_fits/ , dataset_extras/ | 训练前对齐文件(非必须运行 demo,但属于完整数据) | ✅ |
gmm_08.pkl 、J_regressor_h36m.npy 等 | HMR 的人体先验文件 | ✅ |
train.h5 、vertex_texture.npy | SMPL 训练和纹理数据 | ✅ |
4-继续解问题
1-问题:model=hmr.hmr(SMPL_MEAN_PARAMS).to(DEVICE).eval()
1)-问题原因
这表示在文件 demo_norender.py 中,这一行:
model = hmr(SMPL_MEAN_PARAMS_PATH).to(DEVICE).eval()
或者
model = hmr.hmr(SMPL_MEAN_PARAMS).to(DEVICE).eval()
中,hmr 被识别成了一个 函数对象(function),而不是类(class)。
换句话说,Python 现在认为你导入的 hmr 是一个函数,而不是模型类。
2)-解决方式
打开文件:
C:\Users\Admin\SPIN\demo_norender.py
找到大约第 20~40 行的导入部分,修改为如下
from models.hmr import hmr # ✅ 确保是这样导入的
from utils.imutils import preprocess_image
from utils.renderer import Renderer
from utils.smpl import SMPL
from utils.eval_utils import compute_similarity_transform
from utils.geometry import batch_rodrigues, perspective_projection
import constants
(4)总结
问题还是太多了,这也是最折磨人地方,准备再分开写吧。