3DMM模型
目录
- BFM
- BFM_2009
- 01_MorphableModel.mat
- exp_pca.bin
- topology_info.npy
- exp_info.npy
BFM
BFM_2009
01_MorphableModel.mat
from scipy.io import loadmat
original_BFM = loadmat("01_MorphableModel.mat")
# dict_keys: ['__header__', '__version__', '__globals__',
# 'tl',
# 'shapeMU', 'shapePC', 'shapeEV',
# 'texMU', 'texPC', 'texEV',
# 'segbin', 'segMM', 'segMB']
这个mat文件是通过MATLAB创建的,所有的index都是从1开始,需要特别注意。这个文件里主要存了3DMM mesh的几何(shape)和纹理(tex)相关的PCA参数。
__header__ \text{\_\_header\_\_} __header__: MATLAB 5.0 MAT-file, Platform: GLNX86, Created on: Wed Jul 23 15:09:28 2008
__version__ \text{\_\_version\_\_} __version__: 1.0
__globals__ \text{\_\_globals\_\_} __globals__: []
tl \text{tl} tl: [106466, 3],106466个面片,每个面片的顶点序号。
shapeMU \text{shapeMU} shapeMU:这个字段存的是mean shape。维度 [160470, 1], 53490个3D顶点reshape成了[160470, 1]的维度,数值范围[-114062.2, 131943.88],实际使用时,一般会除以1e5,将单位统一到分米。
shapePC \text{shapePC} shapePC: 这个字段存的是 principle shape components,shape的主成分基。维度[160470, 199],基的维度为199维。数值范围[-0.041886166,0.046161193]。
shapeEV \text{shapeEV} shapeEV: 这个字段存的是shape eigen value,表征shape每个主成分分量的标准差。维度[199, 1], 数值范围[3750.5396, 884336.25]。
texMU \text{texMU} texMU: mean texture,维度[160470, 1],数值范围[14.414997, 239.3551]。
texPC \text{texPC} texPC: principle texture components,维度[160470, 199],数值范围[-0.050797794, 0.055871148]。
texEV \text{texEV} texEV: texture eigen value,维度[199, 1],数值范围[127.32297, 4103.179]。
segbin \text{segbin} segbin:维度[53490, 4],以one-hot的形式定义了每个3D点所属的语义类别,如下图所示总计分为4类。
segMM \text{segMM} segMM: 维度[53490, 53490],稀疏矩阵。
segMB \text{segMB} segMB: 维度[53490, 213960],稀疏矩阵。
shape或者texture的计算公式为:
obj = mu + pc * (coef * ev)
shape还会叠加上表情系数带来的顶点偏移量。因此更具化的计算过程如下:
texture = tex_mu + tex_pc * (tex_coef * tex_ev)
shape = shape_mu + shape_pc * (tex_coef * shape_ev) + exp_pc * (exp_coef * exp_ev)
shape /= 1e5
原生的BFM2009只有shape和texture,没有提供表情相关的PCA参数。表情相关的PCA参数用的是下述的exp_pca.bin。

exp_pca.bin
原始的BFM2009模型包含53490个顶点。
CNN-based Real-time Dense Face Reconstruction with Inverse-rendered Photo-realistic Face Images中提供的表情基包含了53215个顶点。真的是说来话长,这里的53215个顶点是借鉴了Face Alignment Across Large Poses: A 3D Solution这篇论文的处理方式,删掉了inner mouth vertices,具体从原始的53490个顶点中取了哪53215个点构成新的mesh,可以看model_info[‘trimIndex’]字段。那又为什么要删掉口腔内部顶点呢?
D3DFaceRecon又在53215的基础上沿着face landmarks裁剪,新的mesh包含35709个顶点。
topology_info.npy
topology = np.load("topology_info.npy", allow_pickle=True).item()
# dict_keys: ['tris', 'vert_tris', 'sub_inds']
这个npy文件定义了顶点数为34650,面片数为68746的 mesh \text{mesh} mesh拓扑结构。
tris \text{tris} tris: [68746, 3],每个面片由3个顶点组成,这个字段存储了68746个面片的每个面片的顶点序号。
vert_tris \text{vert\_tris} vert_tris: [34650, 8], 每个顶点会连接8个三角面片,这字段存储了34650个顶点的每个顶点连接的面片序号,面片从0开始编号。
sub_inds \text{sub\_inds} sub_inds: [34650,], 顶点序号从0开始,排到了53423,但实际只使用了34650个顶点,这个字段存储了这34650个顶点的序号。
这里有个问题, sub_inds \text{sub\_inds} sub_inds最大序号是53423,合计53424个点,01_MorphableModel中定义的mesh是53490个点。少掉的具体是哪66个点?
exp_info.npy
exp_info = np.load("exp_info.npy", allow_pickle=True).item()
# dict_keys: ['mu_exp', 'base_exp', 'sig_exp']
mu_exp \text{mu\_exp} mu_exp:表情均值,维度[103950,],34650个3D点reshape成了[103950,]维度,数值范围[-607.75006, 725.0776]。
base_exp \text{base\_exp} base_exp:表情基,维度[79, 103950], 表情基维度为79维,数值范围[-0.028425552, 0.07618008]。
sig_exp \text{sig\_exp} sig_exp:表情基的方差,维度[79,],数值范围[1587.7286, 285403.94]。
相关文章:
3DMM模型
目录 BFMBFM_200901_MorphableModel.matexp_pca.bintopology_info.npyexp_info.npy BFM BFM_2009 01_MorphableModel.mat from scipy.io import loadmat original_BFM loadmat("01_MorphableModel.mat") # dict_keys: [__header__, __version__, __globals__, # …...
Python 3 使用 write()、writelines() 函数写入文件
1 使用 write() 函数,将字符串(或字节串,仅适用写入二进制文件中)写入文件中。 with open(example.txt,w,encodingutf-8) as f:f.write(春夜喜雨\n)f.write(杜甫 [唐代]\n)f.write(好雨知时节,当春乃发生。\n)f.write(…...
鸿蒙(HarmonyOS)应用开发——管理组件状态
状态管理 在应用中,界面通常都是动态的。 #mermaid-svg-DrPNsglFkyLqn7Lw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-DrPNsglFkyLqn7Lw .error-icon{fill:#552222;}#mermaid-svg-DrPNsglFkyLqn7Lw …...
倚天屠龙:Github Copilot vs Cursor
武林至尊,宝刀屠龙。号令天下,莫敢不从。倚天不出,谁与争锋! 作为开发人员吃饭的家伙,一款好的开发工具对开发人员的帮助是无法估量的。还记得在学校读书的时候,当时流行CS架构的RAD,Delphi和V…...
【web安全】RCE漏洞原理
前言 菜某的笔记总结,如有错误请指正。 RCE漏洞介绍 简而言之,就是代码中使用了可以把字符串当做代码执行的函数,但是又没有对用户的输入内容做到充分的过滤,导致可以被远程执行一些命令。 RCE漏洞的分类 RCE漏洞分为代码执行…...
EI论文复现:基于组合双向拍卖的共享储能机制研究程序代码!
本程序参考EI期刊论文《基于组合双向拍卖的共享储能机制研究》,文中的组合双向拍卖交易机制较为新颖,本质上属于博弈范畴,共享储能是目前的研究热点,牵涉到共享储能参与者的投标策略和收益函数,文中所提模型可为电力市…...
ThinkPHP 5 中,你可以使用定时任务调度器(TaskScheduler)来执行其他定时任务
在 ThinkPHP 5 中,你可以使用定时任务调度器(TaskScheduler)来执行其他定时任务。以下是一个示例代码,演示如何在一个定时任务中执行另一个定时任务: 首先,你需要创建一个继承自 think\console\Command 的…...
mysql:免费的GUI客户端工具推荐并介绍常用的操作
给大家推荐几个常用的 mysql 数据库客户端 sequel-pro sequel-ace 官网下载地址 免费 sequel-ace 可以理解为 Sequel Pro 的升级版,由于Sequel Pro官方不维护了,特别是对 MySQL 8.0 支持不好,所以现在由社区维护了新分支 sequel-ace&#x…...
[Unity数据管理]自定义菜单创建Unity内部数据表(ScriptableObject)
Unity 在开发的时候如果数据量比较大,或者一部分数据需要存在云端,那么就需要一些数据库 轻量型到大型的包括: 数组-内存存储读取 列表-内存存储读取 List<T> tList new List<T>(); XML-硬盘存储读取 JSON-硬盘存储读取 …...
使用JAVA语言写一个排队叫号的小程序
以下是一个简单的排队叫号的小程序,使用JAVA语言实现。 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class NumberingSystem {public static void main(String[] args) {Queue<String> queue new LinkedList<…...
openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表
文章目录 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表140.1 相关概念140.2 操作步骤140.3 维护建议 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表 为了保证数据库的有效运行,数据库必须在插入/删除操作后,基于…...
ubuntu20.04使用LIO-SAM对热室空间进行重建
一、安装LIO-SAM 1.环境配置 默认已经安装过ros sudo apt-get install -y ros-Noetic-navigation sudo apt-get install -y ros-Noetic-robot-localization sudo apt-get install -y ros-Noetic-robot-state-publisher 安装 gtsam(如果是18.04的ubuntu直接按照官网配置&…...
如何选学生用的台灯?眼科专家都说好的学生台灯分享!
根据中国眼健康白皮书显示,我国儿童青少年近视总体发生率为53.6%,由此可见如今青少年学生近视的发病率非常高的,且越来越向低龄化发展,不少还在小学阶段的孩子也存在近视的现象。 而造成这个现象的主要原因就是长时间的用眼导致的…...
Linux4.8、环境变量续
个人主页:Lei宝啊 愿所有美好如期而遇 前言 如果对环境变量没有基本的理解,那么建议先看完这篇文章:环境变量https://blog.csdn.net/m0_74824254/article/details/134661113?spm1001.2014.3001.5501 环境变量与本地变量区别 使用export设…...
PTA 7-231 买文具
某小学要购置文具。批发市场中 A 牌的铅笔卖 5 元一支,C 牌的铅笔卖 2 元一支,D 牌的简易铅笔卖1元2只(捆绑销售,只能买偶数只)。 如果想用n元买n支笔,问有多少种买法?(题目保证 n …...
GPTs每日推荐--生化危机【典藏版】
今天给大家推荐一个游戏性质的GPTs,叫做生化危机典藏版,国内点击可玩。 开篇:玩家从末日中醒来。 选择:玩家会遇到各种资源、任务、剧情,需要自行选择相关的分支剧情,一旦选错,无法重选。 结局…...
jenkins-cicd基础操作
1.先决条件 1.首先我个人势在k8s集群中创建的jenkins,部署方法搭建 k8s部署jenkins-CSDN博客 2.安装指定插件. 1.Gitlab plugin 用于调用gitlab-api的插件 2.Kubernetes plugin jenkins与k8s进行交互的插件,可以用来自动化的构建和部署 3.Build Authorizatio…...
ctfhub技能树_web_信息泄露
目录 二、信息泄露 2.1、目录遍历 2.2、Phpinfo 2.3、备份文件下载 2.3.1、网站源码 2.3.2、bak文件 2.3.3、vim缓存 2.3.4、.DS_Store 2.4、Git泄露 2.4.1、log 2.4.2、stash 2.4.3、index 2.5、SVN泄露 2.6、HG泄露 二、信息泄露 2.1、目录遍历 注࿱…...
使用Docker本地部署chatgpt
GitHub上有一个开源的工程ChatGPT-Next-Web,这个工程已经封装好了UI以及和OpenAI的API之间的交互,你要做的事情就是把他部署到本地,并配置好你的OpenAI的sk,然后就可以使用了。那么接下来的文章里,我会手把手教你如何C…...
SpringBoot 集成Netty、WebSocket,5分钟搭建聊天通信系统
文章目录 前言Netty简介使用Netty开发WebSocket应用程序开始项目一、添加依赖二、自定义处理器三、初始化通道加载器四、配置启动器五、添加启动监听器六、启动项目七、演示效果1. 客户端1看到其他客户端上线2. 客户端3收到客户端1发送的消息3. 客户端1收到客户端2下线前言 在…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
