MultiviewX
Introduction
Refer to MultiviewX_FYP for README.
需要指出的是,从原项目hou-yz/MultiviewX(644b90a)上直接clone的项目中的Image_subsets
文件夹中的图片有误导性,依据其给出的matchings
文件夹中的参数以及calibrate()中的相关代码,正确的图片应该是完整数据集(7.91GB)中的0000.png-0009.png。
下图为使用0000.png-0009.png的结果
File Structure & Flow Overview
介绍这个项目文件结构与基础运行逻辑
run_all.py
作为程序的入口,运行即可产生结果,其顺序为:
1 | from calibrateCamera import calibrate |
首先会运行calibrate()方法,也是本文着重讨论的方法。
datasetParameters.py
记录了数据集的一些参数,包括相机数量,地图宽高等等,其内容为:
1 | NUM_CAM = 6 |
CX folder
存放了相机X摄取的帧,
matchings folder
matchings 文件夹中给出本程序接受的主要变量,以相机为单位(CameraX.txt
,CameraX_3d.txt
)进行管理,理解其中各个参数的含义尤为重要。
Refer to Regarding the ground truths for MultiviewX · Issue #7 · hou-yz/MultiviewX · GitHub 可以看到一些对于参数含义的讨论,其内容如下:
the camera~.txt files provide 3d bounding boxes in both 3d coordinates and their 2d correspondences, both generated from unity.
Just in case anyone needs this for future reference, each row seems to consist of the following.
- first column: frame number (0~399)
- second column: person ID (PID)
- third column onward: 3 (or in case of 2D bounding boxes, 2) coordinates for each vertex of the cuboid 3D bounding box and the feet of a person.
CameraX.txt
其中数据如下(为了更为直观的展示,将包围立方盒的16栏参数放在了一栏中,并使用括号包标出点,原数据中均使用空格隔开,并没有括号或者逗号)
此数据的坐标系为屏幕空间。
Frame Number | Person ID(PID) | Cuboid 3D Bounding Box(8 points to define, 16 columns occupied) | 脚底点的X坐标 | 脚底点的Y坐标 |
---|---|---|---|---|
0 | -190200 | (1506.871,740.1227), (1437.122 ,740.1227), (1475.729,775.8286), (1551.121 ,775.8286), (1567.83,388.0219), (1490.307,388.0219), (1538.434, 396.1149), (1622.993,396.1149) |
1491.906 | 757.2814 |
CameraX_3d.txt
其中数据如下,可以参照上述CameraX.txt 知晓含义
此数据的坐标系为世界坐标系。
Frame Number | Person ID(PID) | Cuboid 3D Bounding Box(8 points to define, 16 columns occupied) | 脚底点坐标 |
---|---|---|---|
0 | -190200 | (9.492622 11.4601144790649 0) (9.132622 11.4601144790649 0) (9.132622 11.8201150894165 0) (9.492622 11.8201150894165 0) (9.492622 11.4601144790649 1.8) (9.132622 11.4601144790649 1.8) (9.132622 11.8201150894165 1.8) (9.492622 11.8201150894165 1.8) |
(9.312622,11.6401147842407,0) |
Unity3D(Any CG Tools)
在得到上述变量的相关含义后,就可以在对应的计算机图形学工具中准备数据(给出CameraX.txt,CameraX_3d.txt)了。
任何工具,只要能得出合理的空间坐标,图像上坐标,都是可以接受的。
工具将产出帧,以及此帧中对应的信息。
Introduction
本文中使用的是 Unity3D 2021.3.5f1c1,随后会给出相关的C#代码。思路比较简单,首先是在场景搭建中使用利于观察的方砖,其次是对每一个物体,生成一个3D的包围盒。
综合原GitHub中的项目文件来看,其产生的数据的精度是过高的,导致CameraX.txt,CameraX_3d.txt 略显臃肿。在Python代码中,其砍去了数据中小数部分,并且在标定阶段(calibrateCamera())给予了相应的补偿。
Code Practice
为了更为直观地展现流程,本文随后将关注单帧的信息生成,一些相关的代码可见于FYP_HDRP_Scripts
Bounding Box
首先为模型动态生成BoxCollider,随后获取此BoxCollider的顶点坐标
动态生成BoxCollider
见FYP_HDRP_Scripts