可视化工具
实时可视化
设计理念
这部分的设计是一个方便可视化与调试的debug的gui。使得开发者在观察某一段数据的结果的时候,不需要将结果全部渲染下来再进行每一帧的图像、渲染结果、关键点的观察,可以直接一个窗口可视化所有需要的信息。
同时承担一些实时可视化的功能,这个用途的优先级降低。
控件
Control
这部分组件的内容用于控制渲染内容。
- 控制播放与暂停
- 控制当前帧的位置
- 控制截图与保存结果
- 控制需要可视化的数据类型
- 读入结果路径
TODO: 渲染到图像上,读入相机参数
场景设置
这部分组件用于控制棋盘格与其他场景内容,从设计上这部分的重要性比较低,之所以单独拿出来作为一个窗格,是因为对整体的视角效果影响比较大。
- 光照强度、方向
- 是否开启天空盒
- 棋盘格颜色设置
- Material设置:TODO
内容设置
用于设置每个人的材质、颜色,是否可见
图像
这部分组件用于实时显示图像
可视化的内容:
- 2D图像
- 3D图像:画到空间中
- 文字
- 画线: points(N, 2, 3), color(N, 3)
- 骨架: config, [(J, 3)]
- SMPL:
- avatar:
- mesh
- 可操纵位置的物体:篮球、足球
- 辅助性mesh => 棋盘格,场景,相机
输入:
- 从socket接收
- 从文件夹中读取
这部分需要考虑,文件中总共有多少帧,这个进度条是需要可以控制的。
输出:
- 存图
其他功能:
- 清楚缓存
- filter可视化的类型
3D Annot
同时可视化3D图像,然后对有问题的地方修改2D
通讯协议:
{
"seq": 'seq0',
"nframes": 0, # 记录当前的数据是第几帧
"view": [], # 可选,用于表示相机视角,如果有,就用来设置相机的观看的角度
"scene": [
{
'type': <camera>
},
{
'type': 'ground'
},
{
'type': 'light'
},
],
"data":[
{
'id': 0,
'type': 'body25',
'keypoints': [(25, 3)]
},
{
'id': 1,
'type': 'half',
'keypoints': [(10, 3)]
},
{
'id': 2,
'type': 'bodyhand',
'keypoints': [(25+42, 3)]
},
{
'id': 3,
'type': 'bodyhandface',
'keypoints': [(25+42+65, 3)]
},
{
'id': 4,
'type': 'smpl',
'poses': [(1, 60)],
'shapes': [(1, 10)],
'Rh': [(1, 3)],
'Th': [(1, 3)],
},
{
'id': 5,
'type': 'mano',
'poses': [(1, 60)],
'shapes': [(1, 10)],
'Rh': [(1, 3)],
'Th': [(1, 3)],
},
{
'id': 6,
'type': 'smplh',
'poses': [(1, 60)],
'shapes': [(1, 10)],
'Rh': [(1, 3)],
'Th': [(1, 3)],
'handl': [(1, 3)],
'handr': [(1, 3)],
},
{
'id':1001,
'type': 'sphere',
'T': [(1, 3)]
},
{
'id':1002,
'type': 'mesh',
'name': 'meshname',
'R': [(1, 3)]
'T': [(1, 3)]
},
]
}
需要实现的函数
- body_model的可视化
这个函数用于对于一个给定配置文件的模型,可以使用控件操纵,对模型进行可视化
- 一般场景的可视化
这个函数用于可视化之前的场景,控件需要提供的功能有:
- 设置范围
- 设置地面的原点
- 设置棋盘格的参数
- 设置棋盘格的颜色
- 足球场景的可视化
- 足球场景,或者一个绿地
- 相机模型
- 人体骨架模型
- 光照、阴影
- 运动的足球模型
- 人体SMPL模型
- 驱动的其他人的模型
- 其他模型的可视化