SMPL源码实现及相关问题

article/2025/9/28 4:51:31

SMPL源码实现及相关问题

  • SMPL模型
  • 代码结构
  • SMPL实现具体步骤
    • 一、环境的配置
    • 二、相关库的安装
    • 三、运行SMPL
  • CITATION

SMPL模型

SMPL模型官网http://smpl.is.tue.mpg.de/,里面可以下载模型和观看演示视频,只不过要先注册一个账号。SMPL由Michael J. Black团队等人在2015提出,是现在人体三维重建广泛使用的模型。这个模型我也在深入理解,也发了一篇自己对SMPL源码及内容的相关理解(会持续更新),感兴趣的可以跳转看一下!所有的内容都望大家批评指正,互相交流!

代码结构

整个代码的结构:下载下来的文件名字为smpl的文件夹
@models文件夹:存放男女模型的文件夹
(1)女:basicModel_f_lbs_10_207_0_v1.0.0.pkl
(2)男:basicmodel_m_lbs_10_207_0_v1.0.0.pkl
@smpl_webuser文件夹:整体的代码文件
—README.txt: 技术手册,方便实现查阅
—lbs.py: 线性蒙皮的实现
—posemapper.py: 旋转向量和旋转矩阵之间的转换模块
—serialization.py: 对于以上男女模型的保存和导入文件,导入之后就可以直接使用了
—verts.py: 关于网格模型顶点的转换模块
—hello_world文件夹是模型测试文件:
  —hello_smpl.py 是把SMPL模型保存成.obj格式的文件,可以用三维显示软件查看的obj文件
   —render_smpl.py 显示SMPL模型的代码,通过给不同的shape pose参数就可以得到不同的SMPL模型,三维渲染显示

SMPL实现具体步骤

Ubuntu 16.04.6 LTS Linux 4.15.0-118-generic x86_64的操作系统,个人也在windows系统上用pycharm运行过模型一顿操作只跑通了hello_smpl.py,相对来说Ubuntu对于很多支持包的安装更加方便,并且以后的研究基本也是在Ubuntu上进行的,所以个人推荐使用Ubuntu.我使用MobaXterm连接服务器配置的相关环境,和运行的程序。直接在Ubuntu系统上配置,也是大同小异。然后切入正题:

一、环境的配置

我直接为运行这个程序配置了个python2.7的环境

conda create -n py2 python=2

目前大部分使用的是python3,但是源代码是python2实现的,有些命令是不兼容的。所以要么安装python2.7,要么就将代码改写。

二、相关库的安装

安装相关库的时候可以使用默认源也可以使用其他国内源我使用的清华大学源,个人推荐使用国内源,因为国内源安装不容易出错并且快上好多倍。

 pip install package -i https://pypi.tuna.tsinghua.edu.cn/simple

----(1)numpy的安装: pip install numpy
----(2)scipy的安装 : pip install scipy
----(3)chumpy的安装: pip install chumpy
----(4)opencv的安装: pip install opencv-python
----(5)opendr的安装: pip install opendr
前面安装的包都是基础的包,一般不会出问题,我在安装包的时候遇到了以下两个问题:
一、python2.7配置opencv-python报错
这是因为最新的opencv已经不再支持python 2.7了,最后一个支持 Python 2.7 的 opencv 版本是 4.2.0.32,因此执行如下命令安装 opencv:

pip install opencv-python==4.2.0.32

二、python2.7配置opendr报错
本身是因为依赖缺失的问题造成的报错,可以输入以下指令解决:

sudo apt install libosmesa6-dev
sudo apt-get install build-essential
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libglu1-mesa-dev
sudo apt-get install freeglut3-dev

但我没有服务器管理员权限,所以我直接采用了手动安装:
1.在GitHub找到 Opendr的安装包
2.再去下载OSMesa.Linux.x86_64.zip
3.这一步注意
若使用了anaconda,手动安装不是在base环境下安装,则一定要把下载的Opendr安装包移动到你 anaconda --> envs --> pythonx.x --> lib --> pythonx.x --> site-packages下,然后再继续执行;
若在base环境下手动安装则不需要移动。
4.打开终端输入:

cd xxx/opendr-master

转到opendr-master文件夹
5.python setup.py build
6.python setup.py install

三、运行SMPL

在运行的时候运行到:

from smpl_webuser.serialization import load_model

出现了报错,原因是SMPL自定义的包smpl_webuser导入错误,解决方法:
1.找到你的python安装路径,…/env/lib/python2.7
2.进入python安装路径的site-packages下
3.创建一个后缀为.pth的文件:touch xxx.pth
4.编辑该pth文件:vi xxx.pth
5.将smpl和smpl_webuser两个含有__init__.py文件的文件夹的绝对路径写入到xxx.pth文件中。(注意:一定要是绝对路径)
  例如:/home/jianping/work/smpl_webuser
然后就是正常的运行代码了!
hello_smpl.py的测试:
python hello_smpl.py-----执行成功后在该目录下生成了一个xxxx.obj文件—这个时候可以用三维软件查看,也可修改文件中的shape、pose的参数来得到不同的人体模型!

在这里插入图片描述
render_smpl.py的测试:
python render_smpl.py-----执行成功之后就可以看到渲染的smpl模型
之后就可以对这个模型理解应用了。

  在结尾感谢我上面用蓝色超链接所引到的文章的作者,是你们分享的经验让我能成功跑通这个程序!

CITATION

[1]:Matthew Loper, Naureen Mahmood, Javier Romero, Gerard Pons-Moll, and Michael J. Black. 2015. SMPL: a skinned multi-person linear model. ACM Trans. Graph. 34, 6, Article 248 (November 2015), 16 pages. DOI:https://doi.org/10.1145/2816795.2818013
[2]:https://blog.csdn.net/nbxuwentao/article/details/100177159
[3]:https://blog.zhangxiann.com/202007021817/
[4]:https://blog.csdn.net/qq_26369907/article/details/88708082
[5:]https://blog.csdn.net/qq_40659982/article/details/88071592


http://chatgpt.dhexx.cn/article/eZitxskW.shtml

相关文章

smpl-x论文学习-部分翻译

论文地址:Expressive Body Capture: 3D Hands, Face, and Body from a Single Image 知乎大佬的讲解:https://zhuanlan.zhihu.com/p/137235901 另一位大佬的讲解:https://posts.careerengine.us/p/5f23a5898988c12b4302afb6 1. 定性结果 和 …

人体动作捕捉与SMPL模型 (mocap and SMPL model)

人体动作捕捉与SMPL模型 (mocap and SMPL model) FesianXu 2020.7.5 前言 笔者最近在做和motion capture动作捕捉相关的项目,学习了一些关于人体3D mesh模型的知识,其中以SMPL模型最为常见,笔者特在此进行笔记,希望对大家有帮助&a…

blender 绘制离散顶点, SMPL骨架绘制

给定一些点,如何绘制出来,借助 blender 看下效果。纠结于 unity 还是 blender, 最终还是 blender 了。 目前还都不太满意,思路一比较靠谱,但是需要更复杂的计算 思路一,第二版,已完成&#xff…

SMPL-CN

paper-reading 为方便理解smpl文章的主要实现思想,此文为论文中文解读,资料来源zju。 日后有空,会写出论文的主要推导过程以及值得注意的重点。 摘要: 我们提出了一个人体形状和姿势相关的形状变化的学习模型,它比以前…

SMPL源码解读

这是源码的整体结构,先简单说一下各个文件里面是什么。 一、models文件 包含3个模型的.pkl文件,.pkl文件是python提供的可以以字符串的形式记录对象、变量的文件格式。这个模型里面包括了: 1.J_regressor_prior:关节回归矩阵的先验,保存形…

SMPL 人体模型简要

smpl是指2015 马普的一篇文章“SMPL: a skinned multi-person linear model”中构建的人体参数化三维模型,人体可以理解为是一个基础模型和在该模型基础上进行形变的总和,在形变基础上进行PCA,得到刻画形状的低维参数——形状参数&#xff08…

SMPL-论文解读

文章目录 创新点算法shape blend shape:pose blend shapeJoint locationSMPL model 训练过程Pose Parameter Trainingjoint regressorShape Parameter TrainingOptimization summary DMPL实验结论 论文: 《SMPL: A skinned multi-person linear model》…

SMPL模型进阶

SMPL模型是一种参数化人体模型,是马普所提出的一种人体建模方法,该方法可以进行任意的人体建模和动画驱动。这种方法与传统的LBS的最大的不同在于其提出的人体姿态影像体表形貌的方法,这种方法可以模拟人的肌肉在肢体运动过程中的凸起和凹陷。…

SMPL源代码实现和模型解读

对于SLAM的工作已经告一段落了,传统的人体动态三维重建也要告一段落了,由于课题研究的方向是基于图像\视频的人体三维重建,三维shape、pose的恢复:所以今天和大家交流的是SMPL模型,对于SMPL模型的理论部分欢迎大家交流…

SMPL简析

SMPL模型是一种参数化人体模型,是马普所提出的一种人体建模方法。这种方法可以模拟人的肌肉在肢体运动过程中的凸起和凹陷。因此可以避免人体在运动过程中的表面失真,可以精准的刻画人的肌肉拉伸以及收缩运动的形貌。 该模型可以通过身体形状参数和姿势参…

SMPL学习笔记

文章目录 前言一、SMPL概述1.形状参数( β \beta β)2.姿态参数( θ \theta θ) 二、体姿转换过程原理1.基于形状的混合成形(Shape Blend Shapes)2.基于姿态的混合成形 (Pose Blend Shapes)3.蒙皮 (Skinning) 三、具体过程分析1.基于形状的混合成形2.基于姿态的混合成形3.骨骼点…

Java的生产者消费者模型

前言 学完了线程后,我又去找了一些线程相关的练习题来练手,其中印象最深的就是生产者消费者模型这一块,为什么呢,因为它每一篇练习题里都有,开始没看懂,后面就去仔细研究了一下,哦,…

多线程之生产者消费者模型

生产者消费者模型 1.为什么要使用生产者和消费者模式2.案例 1.为什么要使用生产者和消费者模式 在线程开发中,生产者就是生产线程的线程,消费者就是消费线程的线程。在多线程开发中,如果生产者如理数据很快,消费者处理数据很慢&am…

生产者消费者模型(多线程工作)

目录 1.模型前提 2.阻塞队列(消费场所) 3. 实验 4.有关效率 1.模型前提 以单生产者对单消费者为例子: 前提一:有一个缓冲区作为消费场所。 前提二:有两种功能不同的线程分别具有消费与生产的能力。 前提三&…

生产者消费者模型的实现(线程通信)

✅作者简介:我是18shou,一名即将秋招的java实习生 🔥系列专栏:牛客刷题专栏 📃推荐一款模拟面试、刷题神器👉 [在线刷题面经模拟面试](在线面试刷题) 目录 实现一: 实现二: 实现一…

生产者消费者模型【新版】

目录 啥是生产者消费者模型? 生产者消费者模型存在问题??如何进行解决呢?? 生产者消费者模型导致的问题 什么是阻塞队列 生产者消费者模型优点 生产者消费者模型实现 Message MessageQueue 获取消息get方法 生产消息take方法 测试生产者消费者模型 啥是生产者消…

【Linux】生产者消费者模型

文章目录 一. 什么是生产者消费者模型1. 基本概念2. 三种关系3. 再次理解生产者消费者模型 二. 生产者消费者模型的优点三. 基于BlockingQueue的生产者消费者模型1. 准备工作2. 阻塞队列实现3. 测试阻塞队列4. 阻塞队列完整代码5. 关于改进阻塞队列的几点补充5.1 多生产者多消费…

生产者与消费者模型

1、【什么是生产者与消费者模型呢?】 一种重要的模型,基于等待/通知机制。生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模型关注的是以下几个点&…

生产者消费者模型——C语言代码详解

概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据…

【Java总结】生产者消费者模型

生产者消费者模型主要结构如下,是一个典型的线程同步的案例。下面就来使用java做几种线程同步的方式来实现以下该模型 确保一个生产者消费者模型的稳定运行的前提有以下几个 生成者应该具备持续生成的能力消费者应该具备持续消费的能力生产者的生成和消费消费有一定…