wzhouxiff commited on
Commit
f1df74a
·
0 Parent(s):
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +35 -0
  2. .gitignore +6 -0
  3. LICENSE +201 -0
  4. README.md +83 -0
  5. app.py +1079 -0
  6. assets/traj_layout.png +0 -0
  7. configs/inference/config_both.yaml +104 -0
  8. configs/inference/run.sh +52 -0
  9. examples/camera_poses/test_camera_018f7907401f2fef.json +1 -0
  10. examples/camera_poses/test_camera_088b93f15ca8745d.json +1 -0
  11. examples/camera_poses/test_camera_1424acd0007d40b5.json +1 -0
  12. examples/camera_poses/test_camera_D.json +226 -0
  13. examples/camera_poses/test_camera_I.json +226 -0
  14. examples/camera_poses/test_camera_I_0.2x.json +226 -0
  15. examples/camera_poses/test_camera_I_0.4x.json +226 -0
  16. examples/camera_poses/test_camera_I_1.0x.json +226 -0
  17. examples/camera_poses/test_camera_I_2.0x.json +226 -0
  18. examples/camera_poses/test_camera_L.json +226 -0
  19. examples/camera_poses/test_camera_O.json +226 -0
  20. examples/camera_poses/test_camera_O_0.2x.json +226 -0
  21. examples/camera_poses/test_camera_O_0.4x.json +226 -0
  22. examples/camera_poses/test_camera_O_1.0x.json +226 -0
  23. examples/camera_poses/test_camera_O_2.0x.json +226 -0
  24. examples/camera_poses/test_camera_R.json +226 -0
  25. examples/camera_poses/test_camera_Round-RI-120.json +226 -0
  26. examples/camera_poses/test_camera_Round-RI.json +226 -0
  27. examples/camera_poses/test_camera_Round-RI_90.json +226 -0
  28. examples/camera_poses/test_camera_Round-ZoomIn.json +226 -0
  29. examples/camera_poses/test_camera_SPIN-ACW-60.json +226 -0
  30. examples/camera_poses/test_camera_SPIN-CW-60.json +226 -0
  31. examples/camera_poses/test_camera_U.json +226 -0
  32. examples/camera_poses/test_camera_b133a504fc90a2d1.json +1 -0
  33. examples/camera_poses/test_camera_d9642c8efc01481d.json +1 -0
  34. examples/camera_poses/test_camera_d971457c81bca597.json +1 -0
  35. examples/trajectories/curve_1.txt +59 -0
  36. examples/trajectories/curve_2.txt +80 -0
  37. examples/trajectories/curve_3.txt +150 -0
  38. examples/trajectories/curve_4.txt +137 -0
  39. examples/trajectories/horizon_2.txt +48 -0
  40. examples/trajectories/shake_1.txt +205 -0
  41. examples/trajectories/shake_2.txt +156 -0
  42. examples/trajectories/shaking_10.txt +373 -0
  43. gradio_utils/camera_utils.py +146 -0
  44. gradio_utils/flow_utils.py +69 -0
  45. gradio_utils/traj_utils.py +104 -0
  46. gradio_utils/utils.py +175 -0
  47. lvdm/basics.py +106 -0
  48. lvdm/common.py +142 -0
  49. lvdm/distributions.py +95 -0
  50. lvdm/ema.py +76 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ # main/evaluation
2
+ .vscode/
3
+
4
+ *.pyc
5
+ gradio_temp
6
+ *.pth
LICENSE ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
README.md ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ <div align="center">
3
+ <!-- <h1>AnimateZero</h1> -->
4
+ <h3><b>MotionCtrl</b>: A Unified and Flexible
5
+ Motion Controller
6
+ for Video Generation</h3>
7
+
8
+ <!-- [![ Paper](https://img.shields.io/badge/Paper-MotionCtrl-red
9
+ )](https://wzhouxiff.github.io/projects/MotionCtrl/assets/paper/MotionCtrl.pdf) &ensp; [![ arXiv](https://img.shields.io/badge/arXiv-2312.03641-red
10
+ )](https://arxiv.org/pdf/2312.03641.pdf) &ensp; [![Porject Page](https://img.shields.io/badge/Project%20%20Page-MotionCtrl-red)
11
+ ](https://wzhouxiff.github.io/projects/MotionCtrl/) &ensp; [![Demo](https://img.shields.io/badge/Demo-MotionCtrl-orange
12
+ )]() -->
13
+
14
+ [![ Paper](https://img.shields.io/badge/Paper-gray
15
+ )](https://wzhouxiff.github.io/projects/MotionCtrl/assets/paper/MotionCtrl.pdf) &ensp; [![ arXiv](https://img.shields.io/badge/arXiv-red
16
+ )](https://arxiv.org/pdf/2312.03641.pdf) &ensp; [![Porject Page](https://img.shields.io/badge/Project%20Page-green
17
+ )
18
+ ](https://wzhouxiff.github.io/projects/MotionCtrl/) &ensp; [![Demo](https://img.shields.io/badge/Gradio%20Demo-orange
19
+ )]()
20
+
21
+ [Zhouxia Wang](https://vvictoryuki.github.io/website/)<sup>1,2</sup>, [Ziyang Yuan](https://github.com/jiangyzy)<sup>1,4</sup>, [Xintao Wang](https://xinntao.github.io/)<sup>1,3</sup>, [Tianshui Chen](http://tianshuichen.com/)<sup>6</sup>, [Menghan Xia](https://menghanxia.github.io/)<sup>3</sup>, [Ping Luo](http://luoping.me/)<sup>2,5</sup>, [Ying Shan](https://scholar.google.com/citations?hl=zh-CN&user=4oXBp9UAAAAJ)<sup>1,3</sup>
22
+
23
+ <sup>1</sup> ARC Lab, Tencent PCG, <sup>2</sup> The University of Hong Kong, <sup>3</sup> Tencent AI Lab, <sup>4</sup> Tsinghua University, <sup>5</sup> Shanghai AI Laboratory, <sup>6</sup> Guangdong University of Technology
24
+
25
+
26
+ </div>
27
+
28
+ <!-- ## Results of MotionCtrl -->
29
+
30
+ Our proposed <b>MotionCtrl</b> is capable of independently controlling the complex camera motion and object motion of the generated videos, with <b>only a unified</b> model.
31
+ There are some results attained with <b>MotionCtrl</b> and more results are showcased in our [Project Page](https://wzhouxiff.github.io/projects/MotionCtrl/).
32
+
33
+ <!-- </br>
34
+ <video poster="" id="steve" autoplay controls muted loop playsinline height="100%" width="100%">
35
+ <source src="https://wzhouxiff.github.io/projects/MotionCtrl/assets/videos/teasers/camera_d971457c81bca597.mp4" type="video/mp4">
36
+ </video>
37
+ <video poster="" id="steve" autoplay controls muted loop playsinline height="100%" width="100%">
38
+ <source src="https://wzhouxiff.github.io/projects/MotionCtrl/assets/videos/teasers/camera_Round-R_ZoomIn.mp4" type="video/mp4">
39
+ </video>
40
+ <video poster="" id="steve" autoplay controls muted loop playsinline height="100%" width="100%">
41
+ <source src="https://wzhouxiff.github.io/projects/MotionCtrl/assets/videos/teasers/shake_1.mp4" type="video/mp4">
42
+ </video>
43
+ <video poster="" id="steve" autoplay controls muted loop playsinline height="100%" width="100%">
44
+ <source src="https://wzhouxiff.github.io/projects/MotionCtrl/assets/videos/teasers/s_curve_3_v1.mp4" type="video/mp4">
45
+ </video> -->
46
+
47
+ <div align="center">
48
+ <img src="assets/hpxvu-3d8ym.gif", width="600">
49
+ <img src="assets/w3nb7-9vz5t.gif", width="600">
50
+ <img src="assets/62n2a-wuvsw.gif", width="600">
51
+ <img src="assets/ilw96-ak827.gif", width="600">
52
+ </div>
53
+
54
+
55
+ ## Updating
56
+ - [x] Release MotionCtrl depolyed on *LVDM/VideoCrafter*
57
+ - [ ] Gradio Demo Available
58
+
59
+ <!-- ## training
60
+ sh configs/training/train_cmcm.sh
61
+ sh configs/training/train_omcm_dense.sh
62
+ sh configs/training/train_omcm_sparse.sh -->
63
+
64
+ ## Inference
65
+
66
+ 1. Download the weights of MotionCtrl from [weipan](https://drive.weixin.qq.com/s?k=AJEAIQdfAAogLtIAPh) to `./checkpoints`.
67
+ 2. Go into `configs/inference/run.sh` and set `condtype` as 'camera_motion', 'object_motion', or 'both'.
68
+ - `condtype=camera_motion` means only control the **camera motion** in the generated video.
69
+ - `condtype=object_motion` means only control the **object motion** in the generated video.
70
+ - `condtype=both` means control the camera motion and object motion in the generated video **simultaneously**.
71
+ 3. sh configs/inference/run.sh
72
+
73
+ ## Citation
74
+ If you make use of our work, please cite our paper.
75
+ ```bibtex
76
+ @inproceedings{wang2023motionctrl,
77
+ title={MotionCtrl: A Unified and Flexible Motion Controller for Video Generation},
78
+ author={Wang, Zhouxia and Yuan, Ziyang and Wang, Xintao and Chen, Tianshui and Xia, Menghan and Luo, Ping and Shan, Yin},
79
+ booktitle={arXiv preprint arXiv:2312.03641},
80
+ year={2023}
81
+ }
82
+ ```
83
+
app.py ADDED
@@ -0,0 +1,1079 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import argparse
2
+ import os
3
+ import tempfile
4
+ from functools import partial
5
+
6
+ import cv2
7
+ import gradio as gr
8
+ import imageio
9
+ import numpy as np
10
+ import torch
11
+ import torchvision
12
+ from omegaconf import OmegaConf
13
+ from PIL import Image
14
+ from pytorch_lightning import seed_everything
15
+
16
+ from gradio_utils.camera_utils import CAMERA_MOTION_MODE, process_camera
17
+ from gradio_utils.traj_utils import (OBJECT_MOTION_MODE, get_provided_traj,
18
+ process_points, process_traj)
19
+ from gradio_utils.utils import vis_camera
20
+ from lvdm.models.samplers.ddim import DDIMSampler
21
+ from main.evaluation.motionctrl_inference import (DEFAULT_NEGATIVE_PROMPT,
22
+ load_model_checkpoint,
23
+ post_prompt)
24
+ from utils.utils import instantiate_from_config
25
+
26
+ os.environ['KMP_DUPLICATE_LIB_OK']='True'
27
+
28
+
29
+ #### Description ####
30
+ title = r"""<h1 align="center">MotionCtrl: A Unified and Flexible Motion Controller for Video Generation</h1>"""
31
+
32
+ description = r"""
33
+ <b>Official Gradio demo</b> for <a href='https://github.com/TencentARC/MotionCtrl' target='_blank'><b>MotionCtrl: A Unified and Flexible Motion Controller for Video Generation</b></a>.<br>
34
+ 🔥 MotionCtrl is capable of independently and flexibly controling the camera motion and object motion of a generated video, with only a unified model.<br>
35
+ 🤗 Try to control the motion of the generated videos yourself!<br>
36
+ ❗❗❗ Please note that current version of **MotionCtrl** is deployed on **LVDM/VideoCrafter**. The versions that depolyed on **AnimateDiff** and **SVD** will be released soon.<br>
37
+ """
38
+ article = r"""
39
+ If MotionCtrl is helpful, please help to ⭐ the <a href='https://github.com/TencentARC/MotionCtrl' target='_blank'>Github Repo</a>. Thanks!
40
+ [![GitHub Stars](https://img.shields.io/github/stars/TencentARC%2FMotionCtrl
41
+ )](https://github.com/TencentARC/MotionCtrl)
42
+
43
+ ---
44
+
45
+ 📝 **Citation**
46
+ <br>
47
+ If our work is useful for your research, please consider citing:
48
+ ```bibtex
49
+ @inproceedings{wang2023motionctrl,
50
+ title={MotionCtrl: A Unified and Flexible Motion Controller for Video Generation},
51
+ author={Wang, Zhouxia and Yuan, Ziyang and Wang, Xintao and Chen, Tianshui and Xia, Menghan and Luo, Ping and Shan, Yin},
52
+ booktitle={arXiv preprint arXiv:2312.03641},
53
+ year={2023}
54
+ }
55
+ ```
56
+
57
+ 📧 **Contact**
58
+ <br>
59
+ If you have any questions, please feel free to reach me out at <b>wzhoux@connect.hku.hk</b>.
60
+
61
+ """
62
+ css = """
63
+ .gradio-container {width: 85% !important}
64
+ .gr-monochrome-group {border-radius: 5px !important; border: revert-layer !important; border-width: 2px !important; color: black !important;}
65
+ span.svelte-s1r2yt {font-size: 17px !important; font-weight: bold !important; color: #d30f2f !important;}
66
+ button {border-radius: 8px !important;}
67
+ .add_button {background-color: #4CAF50 !important;}
68
+ .remove_button {background-color: #f44336 !important;}
69
+ .clear_button {background-color: gray !important;}
70
+ .mask_button_group {gap: 10px !important;}
71
+ .video {height: 300px !important;}
72
+ .image {height: 300px !important;}
73
+ .video .wrap.svelte-lcpz3o {display: flex !important; align-items: center !important; justify-content: center !important;}
74
+ .video .wrap.svelte-lcpz3o > :first-child {height: 100% !important;}
75
+ .margin_center {width: 50% !important; margin: auto !important;}
76
+ .jc_center {justify-content: center !important;}
77
+ """
78
+
79
+
80
+ T_base = [
81
+ [1.,0.,0.], ## W2C x 的正方向: 相机朝左 left
82
+ [-1.,0.,0.], ## W2C x 的负方向: 相机朝右 right
83
+ [0., 1., 0.], ## W2C y 的正方向: 相机朝上 up
84
+ [0.,-1.,0.], ## W2C y 的负方向: 相机朝下 down
85
+ [0.,0.,1.], ## W2C z 的正方向: 相机往前 zoom out
86
+ [0.,0.,-1.], ## W2C z 的负方向: 相机往前 zoom in
87
+ ]
88
+ radius = 1
89
+ n = 16
90
+ # step =
91
+ look_at = np.array([0, 0, 0.8]).reshape(3,1)
92
+ # look_at = np.array([0, 0, 0.2]).reshape(3,1)
93
+
94
+ T_list = []
95
+ base_R = np.array([[1., 0., 0.],
96
+ [0., 1., 0.],
97
+ [0., 0., 1.]])
98
+ res = []
99
+ res_forsave = []
100
+ T_range = 1.8
101
+
102
+
103
+
104
+ for i in range(0, 16):
105
+ # theta = (1)*np.pi*i/n
106
+
107
+ R = base_R[:,:3]
108
+ T = np.array([0.,0.,1.]).reshape(3,1) * (i/n)*2
109
+ RT = np.concatenate([R,T], axis=1)
110
+ res.append(RT)
111
+
112
+ fig = vis_camera(res)
113
+
114
+ # MODE = ["camera motion control", "object motion control", "camera + object motion control"]
115
+ MODE = ["control camera poses", "control object trajectory", "control both camera and object motion"]
116
+ BASE_MODEL = ['LVDM/VideoCrafter', 'AnimateDiff', 'SVD']
117
+
118
+
119
+ traj_list = []
120
+ camera_dict = {
121
+ "motion":[],
122
+ "mode": "Customized Mode 1: First A then B", # "First A then B", "Both A and B", "Custom"
123
+ "speed": 1.0,
124
+ "complex": None
125
+ }
126
+
127
+ def fn_vis_camera(info_mode):
128
+ global camera_dict
129
+ RT = process_camera(camera_dict) # [t, 3, 4]
130
+ if camera_dict['complex'] is not None:
131
+ # rescale T to [-2,2]
132
+ for i in range(3):
133
+ min_T = np.min(RT[:,i,-1])
134
+ max_T = np.max(RT[:,i,-1])
135
+ if min_T < -2 or max_T > 2:
136
+ RT[:,i,-1] = RT[:,i,-1] - min_T
137
+ RT[:,i,-1] = RT[:,i,-1] / (np.max(RT[:,:,-1]) + 1e-6)
138
+ RT[:,i,-1] = RT[:,i,-1] * 4
139
+ RT[:,i,-1] = RT[:,i,-1] - 2
140
+
141
+ fig = vis_camera(RT)
142
+
143
+ if info_mode == MODE[0]:
144
+ vis_step3_prompt_generate = True
145
+ vis_prompt = True
146
+ vis_num_samples = True
147
+ vis_seed = True
148
+ vis_start = True
149
+ vis_gen_video = True
150
+
151
+ vis_object_mode = False
152
+ vis_object_info = False
153
+
154
+ else:
155
+ vis_step3_prompt_generate = False
156
+ vis_prompt = False
157
+ vis_num_samples = False
158
+ vis_seed = False
159
+ vis_start = False
160
+ vis_gen_video = False
161
+
162
+ vis_object_mode = True
163
+ vis_object_info = True
164
+
165
+ return fig, \
166
+ gr.update(visible=vis_object_mode), \
167
+ gr.update(visible=vis_object_info), \
168
+ gr.update(visible=vis_step3_prompt_generate), \
169
+ gr.update(visible=vis_prompt), \
170
+ gr.update(visible=vis_num_samples), \
171
+ gr.update(visible=vis_seed), \
172
+ gr.update(visible=vis_start), \
173
+ gr.update(visible=vis_gen_video, value=None)
174
+
175
+ def fn_vis_traj():
176
+ global traj_list
177
+ xy_range = 1024
178
+ points = process_points(traj_list)
179
+ imgs = []
180
+ for idx in range(16):
181
+ bg_img = np.ones((1024, 1024, 3), dtype=np.uint8) * 255
182
+ for i in range(15):
183
+ p = points[i]
184
+ p1 = points[i+1]
185
+ cv2.line(bg_img, p, p1, (255, 0, 0), 2)
186
+
187
+ if i == idx:
188
+ cv2.circle(bg_img, p, 2, (0, 255, 0), 20)
189
+
190
+ if idx==(15):
191
+ cv2.circle(bg_img, points[-1], 2, (0, 255, 0), 20)
192
+
193
+ imgs.append(bg_img.astype(np.uint8))
194
+
195
+ # size = (512, 512)
196
+ fps = 10
197
+ path = tempfile.NamedTemporaryFile(suffix='.mp4', delete=False).name
198
+ writer = imageio.get_writer(path, format='mp4', mode='I', fps=fps)
199
+ for img in imgs:
200
+ writer.append_data(img)
201
+
202
+ writer.close()
203
+
204
+ vis_step3_prompt_generate = True
205
+ vis_prompt = True
206
+ vis_num_samples = True
207
+ vis_seed = True
208
+ vis_start = True
209
+ vis_gen_video = True
210
+ return path, gr.update(visible=vis_step3_prompt_generate), \
211
+ gr.update(visible=vis_prompt), \
212
+ gr.update(visible=vis_num_samples), \
213
+ gr.update(visible=vis_seed), \
214
+ gr.update(visible=vis_start), \
215
+ gr.update(visible=vis_gen_video, value=None)
216
+
217
+ def display_camera_info(camera_dict, camera_mode=None):
218
+ if camera_dict['complex'] is not None:
219
+ res = f"complex : {camera_dict['complex']}. "
220
+ else:
221
+ res = ""
222
+ res += f"motion : {[_ for _ in camera_dict['motion']]}. "
223
+ res += f"speed : {camera_dict['speed']}. "
224
+ if camera_mode == 'Custom Camera Poses':
225
+ res += f"mode : {camera_dict['mode']}. "
226
+ return res
227
+
228
+ def add_traj_point(evt: gr.SelectData, ):
229
+ global traj_list
230
+ traj_list.append(evt.index)
231
+ traj_str = [f"{traj}" for traj in traj_list]
232
+ return ", ".join(traj_str)
233
+
234
+ def add_provided_traj(traj_name):
235
+ global traj_list
236
+ traj_list = get_provided_traj(traj_name)
237
+ traj_str = [f"{traj}" for traj in traj_list]
238
+ return ", ".join(traj_str)
239
+
240
+ def add_camera_motion(camera_motion, camera_mode):
241
+ global camera_dict
242
+ if camera_dict['complex'] is not None:
243
+ camera_dict['complex'] = None
244
+ if camera_mode == 'Custom Camera Poses' and len(camera_dict['motion']) <2:
245
+ camera_dict['motion'].append(camera_motion)
246
+ else:
247
+ camera_dict['motion']=[camera_motion]
248
+
249
+ return display_camera_info(camera_dict, camera_mode)
250
+
251
+ def add_complex_camera_motion(camera_motion):
252
+ global camera_dict
253
+ camera_dict['complex']=camera_motion
254
+ return display_camera_info(camera_dict)
255
+
256
+ def change_camera_mode(combine_type, camera_mode):
257
+ global camera_dict
258
+ camera_dict['mode'] = combine_type
259
+
260
+ return display_camera_info(camera_dict, camera_mode)
261
+
262
+ def change_camera_speed(camera_speed):
263
+ global camera_dict
264
+ camera_dict['speed'] = camera_speed
265
+ return display_camera_info(camera_dict)
266
+
267
+ def reset_camera():
268
+ global camera_dict
269
+ camera_dict = {
270
+ "motion":[],
271
+ "mode": "Customized Mode 1: First A then B",
272
+ "speed": 1.0,
273
+ "complex": None
274
+ }
275
+ return display_camera_info(camera_dict)
276
+
277
+
278
+ def fn_traj_droplast():
279
+ global traj_list
280
+
281
+ if traj_list:
282
+ traj_list.pop()
283
+
284
+ if traj_list:
285
+ traj_str = [f"{traj}" for traj in traj_list]
286
+ return ", ".join(traj_str)
287
+ else:
288
+ return "Click to specify trajectory"
289
+
290
+ def fn_traj_reset():
291
+ global traj_list
292
+ traj_list = []
293
+ return "Click to specify trajectory"
294
+
295
+ ###########################################
296
+ model_path='./checkpoints/motionctrl.pth'
297
+ config_path='./configs/inference/config_both.yaml'
298
+
299
+ config = OmegaConf.load(config_path)
300
+ model_config = config.pop("model", OmegaConf.create())
301
+ model = instantiate_from_config(model_config)
302
+ model = model.cuda()
303
+
304
+ model = load_model_checkpoint(model, model_path)
305
+ model.eval()
306
+
307
+
308
+ def model_run(prompts, infer_mode, seed, n_samples):
309
+ global traj_list
310
+ global camera_dict
311
+
312
+ RT = process_camera(camera_dict).reshape(-1,12)
313
+ traj_flow = process_traj(traj_list).transpose(3,0,1,2)
314
+ print(prompts)
315
+ print(RT.shape)
316
+ print(traj_flow.shape)
317
+
318
+ noise_shape = [1, 4, 16, 32, 32]
319
+ unconditional_guidance_scale = 7.5
320
+ unconditional_guidance_scale_temporal = None
321
+ # n_samples = 1
322
+ ddim_steps= 50
323
+ ddim_eta=1.0
324
+ cond_T=800
325
+
326
+ if n_samples < 1:
327
+ n_samples = 1
328
+ if n_samples > 4:
329
+ n_samples = 4
330
+
331
+ seed_everything(seed)
332
+
333
+ if infer_mode == MODE[0]:
334
+ camera_poses = RT
335
+ camera_poses = torch.tensor(camera_poses).float().cuda()
336
+ camera_poses = camera_poses.unsqueeze(0)
337
+ trajs = None
338
+ elif infer_mode == MODE[1]:
339
+ trajs = traj_flow
340
+ trajs = torch.tensor(trajs).float().cuda()
341
+ trajs = trajs.unsqueeze(0)
342
+ camera_poses = None
343
+ else:
344
+ camera_poses = RT
345
+ trajs = traj_flow
346
+ camera_poses = torch.tensor(camera_poses).float().cuda()
347
+ trajs = torch.tensor(trajs).float().cuda()
348
+ camera_poses = camera_poses.unsqueeze(0)
349
+ trajs = trajs.unsqueeze(0)
350
+
351
+ ddim_sampler = DDIMSampler(model)
352
+ batch_size = noise_shape[0]
353
+ ## get condition embeddings (support single prompt only)
354
+ if isinstance(prompts, str):
355
+ prompts = [prompts]
356
+
357
+ for i in range(len(prompts)):
358
+ prompts[i] = f'{prompts[i]}, {post_prompt}'
359
+
360
+ cond = model.get_learned_conditioning(prompts)
361
+ if camera_poses is not None:
362
+ RT = camera_poses[..., None]
363
+ else:
364
+ RT = None
365
+
366
+ if trajs is not None:
367
+ traj_features = model.get_traj_features(trajs)
368
+ else:
369
+ traj_features = None
370
+
371
+ if unconditional_guidance_scale != 1.0:
372
+ # prompts = batch_size * [""]
373
+ prompts = batch_size * [DEFAULT_NEGATIVE_PROMPT]
374
+ uc = model.get_learned_conditioning(prompts)
375
+ if traj_features is not None:
376
+ un_motion = model.get_traj_features(torch.zeros_like(trajs))
377
+ else:
378
+ un_motion = None
379
+ uc = {"features_adapter": un_motion, "uc": uc}
380
+ else:
381
+ uc = None
382
+
383
+ batch_variants = []
384
+ for _ in range(n_samples):
385
+ if ddim_sampler is not None:
386
+ samples, _ = ddim_sampler.sample(S=ddim_steps,
387
+ conditioning=cond,
388
+ batch_size=noise_shape[0],
389
+ shape=noise_shape[1:],
390
+ verbose=False,
391
+ unconditional_guidance_scale=unconditional_guidance_scale,
392
+ unconditional_conditioning=uc,
393
+ eta=ddim_eta,
394
+ temporal_length=noise_shape[2],
395
+ conditional_guidance_scale_temporal=unconditional_guidance_scale_temporal,
396
+ features_adapter=traj_features,
397
+ pose_emb=RT,
398
+ cond_T=cond_T
399
+ )
400
+ ## reconstruct from latent to pixel space
401
+ batch_images = model.decode_first_stage(samples)
402
+ batch_variants.append(batch_images)
403
+ ## variants, batch, c, t, h, w
404
+ batch_variants = torch.stack(batch_variants, dim=1)
405
+ batch_variants = batch_variants[0]
406
+
407
+ # file_path = save_results(batch_variants, "MotionCtrl", "gradio_temp", fps=10)
408
+ file_path = save_results(batch_variants, fps=10)
409
+ print(file_path)
410
+
411
+ return gr.update(value=file_path, width=256*n_samples, height=256)
412
+
413
+ # return file_path
414
+
415
+ def save_results(video, fps=10):
416
+
417
+ # b,c,t,h,w
418
+ video = video.detach().cpu()
419
+ video = torch.clamp(video.float(), -1., 1.)
420
+ n = video.shape[0]
421
+ video = video.permute(2, 0, 1, 3, 4) # t,n,c,h,w
422
+ frame_grids = [torchvision.utils.make_grid(framesheet, nrow=int(n)) for framesheet in video] #[3, 1*h, n*w]
423
+ grid = torch.stack(frame_grids, dim=0) # stack in temporal dim [t, 3, n*h, w]
424
+ grid = (grid + 1.0) / 2.0
425
+ grid = (grid * 255).to(torch.uint8).permute(0, 2, 3, 1) # [t, h, w*n, 3]
426
+
427
+ path = tempfile.NamedTemporaryFile(suffix='.mp4', delete=False).name
428
+
429
+ writer = imageio.get_writer(path, format='mp4', mode='I', fps=fps)
430
+ for i in range(grid.shape[0]):
431
+ img = grid[i].numpy()
432
+ writer.append_data(img)
433
+
434
+ writer.close()
435
+
436
+ return path
437
+
438
+ def visualized_step2(infer_mode):
439
+
440
+ # reset
441
+ reset_camera()
442
+ fn_traj_reset()
443
+
444
+ # camera motion control
445
+ vis_basic_camera_motion = False
446
+ vis_basic_camera_motion_des = False
447
+ vis_custom_camera_motion = False
448
+ vis_custom_run_status = False
449
+ vis_complex_camera_motion = False
450
+ vis_complex_camera_motion_des = False
451
+ vis_U = False
452
+ vis_D = False
453
+ vis_L = False
454
+ vis_R = False
455
+ vis_I = False
456
+ vis_O = False
457
+ vis_ACW = False
458
+ vis_CW = False
459
+ vis_combine1 = False
460
+ vis_combine2 = False
461
+ vis_speed = False
462
+
463
+ vis_Pose_1, vis_Pose_2, vis_Pose_3, vis_Pose_4 = False, False, False, False
464
+ vis_Pose_5, vis_Pose_6, vis_Pose_7, vis_Pose_8 = False, False, False, False
465
+
466
+ vis_camera_args = False
467
+ vis_camera_reset = False
468
+ vis_camera_vis = False
469
+ vis_vis_camera = False
470
+
471
+ # object motion control
472
+ vis_provided_traj = False
473
+ vis_provided_traj_des = False
474
+ vis_draw_yourself = False
475
+ vis_draw_run_status = False
476
+
477
+ vis_traj_1, vis_traj_2, vis_traj_3, vis_traj_4 = False, False, False, False
478
+ vis_traj_5, vis_traj_6, vis_traj_7, vis_traj_8 = False, False, False, False
479
+
480
+ traj_args = False
481
+ traj_droplast, traj_reset = False, False
482
+ traj_vis = False
483
+ traj_input, vis_traj = False, False
484
+
485
+
486
+ # generate video
487
+ vis_step3_prompt_generate = False
488
+ vis_prompt = False
489
+ vis_num_samples = False
490
+ vis_seed = False
491
+ vis_start = False
492
+ vis_gen_video = False
493
+
494
+ if infer_mode == MODE[0]:
495
+ vis_step2_camera_motion = True
496
+ vis_step2_camera_motion_des = True
497
+ vis_camera_mode = True
498
+ vis_camera_info = True
499
+
500
+ vis_step2_object_motion = False
501
+ vis_step2_object_motion_des = False
502
+ vis_traj_mode = False
503
+ vis_traj_info = False
504
+
505
+ step2_camera_object_motion = False
506
+ step2_camera_object_motion_des = False
507
+
508
+ elif infer_mode == MODE[1]:
509
+ vis_step2_camera_motion = False
510
+ vis_step2_camera_motion_des = False
511
+ vis_camera_mode = False
512
+ vis_camera_info = False
513
+
514
+ vis_step2_object_motion = True
515
+ vis_step2_object_motion_des = True
516
+ vis_traj_mode = True
517
+ vis_traj_info = True
518
+
519
+ step2_camera_object_motion = False
520
+ step2_camera_object_motion_des = False
521
+ else: #infer_mode == MODE[2]:
522
+ vis_step2_camera_motion = False
523
+ vis_step2_camera_motion_des = False
524
+ vis_camera_mode = False
525
+ vis_camera_info = False
526
+
527
+ vis_step2_object_motion = False
528
+ vis_step2_object_motion_des = False
529
+ vis_traj_mode = False
530
+ vis_traj_info = False
531
+
532
+ step2_camera_object_motion = True
533
+ step2_camera_object_motion_des = True
534
+
535
+ vis_basic_camera_motion = True
536
+ vis_basic_camera_motion_des = True
537
+ vis_U = True
538
+ vis_D = True
539
+ vis_L = True
540
+ vis_R = True
541
+ vis_I = True
542
+ vis_O = True
543
+ vis_ACW = True
544
+ vis_CW = True
545
+ vis_speed = True
546
+
547
+ vis_camera_args = True
548
+ vis_camera_reset = True
549
+ vis_camera_vis = True
550
+ vis_vis_camera = True
551
+
552
+
553
+ return gr.update(visible=vis_step2_camera_motion), \
554
+ gr.update(visible=vis_step2_camera_motion_des), \
555
+ gr.update(visible=vis_camera_mode), \
556
+ gr.update(visible=vis_camera_info), \
557
+ gr.update(visible=vis_basic_camera_motion), \
558
+ gr.update(visible=vis_basic_camera_motion_des), \
559
+ gr.update(visible=vis_custom_camera_motion), \
560
+ gr.update(visible=vis_custom_run_status), \
561
+ gr.update(visible=vis_complex_camera_motion), \
562
+ gr.update(visible=vis_complex_camera_motion_des), \
563
+ gr.update(visible=vis_U), gr.update(visible=vis_D), gr.update(visible=vis_L), gr.update(visible=vis_R), \
564
+ gr.update(visible=vis_I), gr.update(visible=vis_O), gr.update(visible=vis_ACW), gr.update(visible=vis_CW), \
565
+ gr.update(visible=vis_combine1), gr.update(visible=vis_combine2), \
566
+ gr.update(visible=vis_speed), \
567
+ gr.update(visible=vis_Pose_1), gr.update(visible=vis_Pose_2), gr.update(visible=vis_Pose_3), gr.update(visible=vis_Pose_4), \
568
+ gr.update(visible=vis_Pose_5), gr.update(visible=vis_Pose_6), gr.update(visible=vis_Pose_7), gr.update(visible=vis_Pose_8), \
569
+ gr.update(visible=vis_camera_args, value=None), \
570
+ gr.update(visible=vis_camera_reset), gr.update(visible=vis_camera_vis), \
571
+ gr.update(visible=vis_vis_camera, value=None), \
572
+ gr.update(visible=vis_step2_object_motion), \
573
+ gr.update(visible=vis_step2_object_motion_des), \
574
+ gr.update(visible=vis_traj_mode), \
575
+ gr.update(visible=vis_traj_info), \
576
+ gr.update(visible=vis_provided_traj), \
577
+ gr.update(visible=vis_provided_traj_des), \
578
+ gr.update(visible=vis_draw_yourself), \
579
+ gr.update(visible=vis_draw_run_status), \
580
+ gr.update(visible=vis_traj_1), gr.update(visible=vis_traj_2), gr.update(visible=vis_traj_3), gr.update(visible=vis_traj_4), \
581
+ gr.update(visible=vis_traj_5), gr.update(visible=vis_traj_6), gr.update(visible=vis_traj_7), gr.update(visible=vis_traj_8), \
582
+ gr.update(visible=traj_args), \
583
+ gr.update(visible=traj_droplast), gr.update(visible=traj_reset), \
584
+ gr.update(visible=traj_vis), \
585
+ gr.update(visible=traj_input), gr.update(visible=vis_traj, value=None), \
586
+ gr.update(visible=step2_camera_object_motion), \
587
+ gr.update(visible=step2_camera_object_motion_des), \
588
+ gr.update(visible=vis_step3_prompt_generate), \
589
+ gr.update(visible=vis_prompt), \
590
+ gr.update(visible=vis_num_samples), \
591
+ gr.update(visible=vis_seed), \
592
+ gr.update(visible=vis_start), \
593
+ gr.update(visible=vis_gen_video)
594
+
595
+ def visualized_camera_poses(step2_camera_motion):
596
+ reset_camera()
597
+
598
+ # generate video
599
+ vis_step3_prompt_generate = False
600
+ vis_prompt = False
601
+ vis_num_samples = False
602
+ vis_seed = False
603
+ vis_start = False
604
+ vis_gen_video = False
605
+
606
+ if step2_camera_motion == CAMERA_MOTION_MODE[0]:
607
+ vis_basic_camera_motion = True
608
+ vis_basic_camera_motion_des = True
609
+ vis_custom_camera_motion = False
610
+ vis_custom_run_status = False
611
+ vis_complex_camera_motion = False
612
+ vis_complex_camera_motion_des = False
613
+ vis_U = True
614
+ vis_D = True
615
+ vis_L = True
616
+ vis_R = True
617
+ vis_I = True
618
+ vis_O = True
619
+ vis_ACW = True
620
+ vis_CW = True
621
+ vis_combine1 = False
622
+ vis_combine2 = False
623
+ vis_speed = True
624
+
625
+ vis_Pose_1, vis_Pose_2, vis_Pose_3, vis_Pose_4 = False, False, False, False
626
+ vis_Pose_5, vis_Pose_6, vis_Pose_7, vis_Pose_8 = False, False, False, False
627
+
628
+ elif step2_camera_motion == CAMERA_MOTION_MODE[1]:
629
+ vis_basic_camera_motion = False
630
+ vis_basic_camera_motion_des = False
631
+ vis_custom_camera_motion = False
632
+ vis_custom_run_status = False
633
+ vis_complex_camera_motion = True
634
+ vis_complex_camera_motion_des = True
635
+ vis_U = False
636
+ vis_D = False
637
+ vis_L = False
638
+ vis_R = False
639
+ vis_I = False
640
+ vis_O = False
641
+ vis_ACW = False
642
+ vis_CW = False
643
+ vis_combine1 = False
644
+ vis_combine2 = False
645
+ vis_speed = False
646
+
647
+ vis_Pose_1, vis_Pose_2, vis_Pose_3, vis_Pose_4 = True, True, True, True
648
+ vis_Pose_5, vis_Pose_6, vis_Pose_7, vis_Pose_8 = True, True, True, True
649
+
650
+ else: # step2_camera_motion = CAMERA_MOTION_MODE[2]:
651
+ vis_basic_camera_motion = False
652
+ vis_basic_camera_motion_des = False
653
+ vis_custom_camera_motion = True
654
+ vis_custom_run_status = True
655
+ vis_complex_camera_motion = False
656
+ vis_complex_camera_motion_des = False
657
+ vis_U = True
658
+ vis_D = True
659
+ vis_L = True
660
+ vis_R = True
661
+ vis_I = True
662
+ vis_O = True
663
+ vis_ACW = True
664
+ vis_CW = True
665
+ vis_combine1 = True
666
+ vis_combine2 = True
667
+ vis_speed = True
668
+
669
+ vis_Pose_1, vis_Pose_2, vis_Pose_3, vis_Pose_4 = False, False, False, False
670
+ vis_Pose_5, vis_Pose_6, vis_Pose_7, vis_Pose_8 = False, False, False, False
671
+
672
+ vis_camera_args = True
673
+ vis_camera_reset = True
674
+ vis_camera_vis = True
675
+ vis_vis_camera = True
676
+
677
+ return gr.update(visible=vis_basic_camera_motion), \
678
+ gr.update(visible=vis_basic_camera_motion_des), \
679
+ gr.update(visible=vis_custom_camera_motion), \
680
+ gr.update(visible=vis_custom_run_status), \
681
+ gr.update(visible=vis_complex_camera_motion), \
682
+ gr.update(visible=vis_complex_camera_motion_des), \
683
+ gr.update(visible=vis_U), gr.update(visible=vis_D), gr.update(visible=vis_L), gr.update(visible=vis_R), \
684
+ gr.update(visible=vis_I), gr.update(visible=vis_O), gr.update(visible=vis_ACW), gr.update(visible=vis_CW), \
685
+ gr.update(visible=vis_combine1), gr.update(visible=vis_combine2), \
686
+ gr.update(visible=vis_speed), \
687
+ gr.update(visible=vis_Pose_1), gr.update(visible=vis_Pose_2), gr.update(visible=vis_Pose_3), gr.update(visible=vis_Pose_4), \
688
+ gr.update(visible=vis_Pose_5), gr.update(visible=vis_Pose_6), gr.update(visible=vis_Pose_7), gr.update(visible=vis_Pose_8), \
689
+ gr.update(visible=vis_camera_args, value=None), \
690
+ gr.update(visible=vis_camera_reset), gr.update(visible=vis_camera_vis), \
691
+ gr.update(visible=vis_vis_camera, value=None), \
692
+ gr.update(visible=vis_step3_prompt_generate), \
693
+ gr.update(visible=vis_prompt), \
694
+ gr.update(visible=vis_num_samples), \
695
+ gr.update(visible=vis_seed), \
696
+ gr.update(visible=vis_start), \
697
+ gr.update(visible=vis_gen_video)
698
+
699
+ def visualized_traj_poses(step2_object_motion):
700
+
701
+ fn_traj_reset()
702
+
703
+ # generate video
704
+ vis_step3_prompt_generate = False
705
+ vis_prompt = False
706
+ vis_num_samples = False
707
+ vis_seed = False
708
+ vis_start = False
709
+ vis_gen_video = False
710
+
711
+ if step2_object_motion == "Provided Trajectory":
712
+ vis_provided_traj = True
713
+ vis_provided_traj_des = True
714
+ vis_draw_yourself = False
715
+ vis_draw_run_status = False
716
+
717
+ vis_traj_1, vis_traj_2, vis_traj_3, vis_traj_4 = True, True, True, True
718
+ vis_traj_5, vis_traj_6, vis_traj_7, vis_traj_8 = True, True, True, True
719
+
720
+ traj_args = True
721
+ traj_droplast, traj_reset = False, True
722
+ traj_vis = True
723
+ traj_input, vis_traj = False, True
724
+
725
+
726
+ elif step2_object_motion == "Custom Trajectory":
727
+ vis_provided_traj = False
728
+ vis_provided_traj_des = False
729
+ vis_draw_yourself = True
730
+ vis_draw_run_status = True
731
+
732
+ vis_traj_1, vis_traj_2, vis_traj_3, vis_traj_4 = False, False, False, False
733
+ vis_traj_5, vis_traj_6, vis_traj_7, vis_traj_8 = False, False, False, False
734
+
735
+ traj_args = True
736
+ traj_droplast, traj_reset = True, True
737
+ traj_vis = True
738
+ traj_input, vis_traj = True, True
739
+
740
+ return gr.update(visible=vis_provided_traj), \
741
+ gr.update(visible=vis_provided_traj_des), \
742
+ gr.update(visible=vis_draw_yourself), \
743
+ gr.update(visible=vis_draw_run_status), \
744
+ gr.update(visible=vis_traj_1), gr.update(visible=vis_traj_2), gr.update(visible=vis_traj_3), gr.update(visible=vis_traj_4), \
745
+ gr.update(visible=vis_traj_5), gr.update(visible=vis_traj_6), gr.update(visible=vis_traj_7), gr.update(visible=vis_traj_8), \
746
+ gr.update(visible=traj_args), \
747
+ gr.update(visible=traj_droplast), gr.update(visible=traj_reset), \
748
+ gr.update(visible=traj_vis), \
749
+ gr.update(visible=traj_input), gr.update(visible=vis_traj, value=None), \
750
+ gr.update(visible=vis_step3_prompt_generate), \
751
+ gr.update(visible=vis_prompt), \
752
+ gr.update(visible=vis_num_samples), \
753
+ gr.update(visible=vis_seed), \
754
+ gr.update(visible=vis_start), \
755
+ gr.update(visible=vis_gen_video)
756
+
757
+ def main(args):
758
+ demo = gr.Blocks()
759
+ with demo:
760
+
761
+ gr.Markdown(title)
762
+ gr.Markdown(description)
763
+
764
+ # state = gr.State({
765
+ # "mode": "camera_only",
766
+ # "camera_input": [],
767
+ # "traj_input": [],
768
+ # })
769
+
770
+ with gr.Column():
771
+ '''
772
+ # step 0: select based model.
773
+ gr.Markdown("## Step0: Selecting the model", show_label=False)
774
+ gr.Markdown( f'- {BASE_MODEL[0]}: **MotionCtrl** deployed on {BASE_MODEL[0]}', show_label=False)
775
+ gr.Markdown( f'- {BASE_MODEL[1]}: **MotionCtrl** deployed on {BASE_MODEL[1]}', show_label=False)
776
+ gr.Markdown( f'- {BASE_MODEL[2]}: **MotionCtrl** deployed on {BASE_MODEL[2]}', show_label=False)
777
+ gr.Markdown( f'- **Only the model that deployed on {BASE_MODEL[0]} is avalible now. MotionCtrl models deployed on {BASE_MODEL[1]} and {BASE_MODEL[2]} are coming soon.**', show_label=False)
778
+ gr.Radio(choices=BASE_MODEL, value=BASE_MODEL[0], label="Based Model", interactive=False)
779
+ '''
780
+
781
+ # step 1: select motion control mode
782
+ gr.Markdown("## Step 1/3: Selecting the motion control mode", show_label=False)
783
+ gr.Markdown( f'- {MODE[0]}: Control the camera motion only', show_label=False)
784
+ gr.Markdown( f'- {MODE[1]}: Control the object motion only', show_label=False)
785
+ gr.Markdown( f'- {MODE[2]}: Control both the camera and object motion', show_label=False)
786
+ gr.Markdown( f'- Click `Proceed` to go into next step', show_label=False)
787
+ infer_mode = gr.Radio(choices=MODE, value=MODE[0], label="Motion Control Mode", interactive=True)
788
+ mode_info = gr.Button(value="Proceed")
789
+
790
+ # step2 - camera + object motion control
791
+ step2_camera_object_motion = gr.Markdown("---\n## Step 2/3: Select the camera poses and trajectory", show_label=False, visible=False)
792
+ step2_camera_object_motion_des = gr.Markdown(f"\n 1. Select a basic camera pose. \
793
+ \n 2. Select a provided trajectory or draw the trajectory yourself.",
794
+ show_label=False, visible=False)
795
+
796
+ # step2 - camera motion control
797
+ step2_camera_motion = gr.Markdown("---\n## Step 2/3: Select the camera poses", show_label=False, visible=False)
798
+ step2_camera_motion_des = gr.Markdown(f"\n - {CAMERA_MOTION_MODE[0]}: Including 8 basic camera poses, such as pan up, pan down, zoom in, and zoom out. \
799
+ \n - {CAMERA_MOTION_MODE[1]}: Complex camera poses extracted from the real videos. \
800
+ \n - {CAMERA_MOTION_MODE[2]}: You can customize complex camera poses yourself by combining or fusing two of the eight basic camera poses. \
801
+ \n - Click `Proceed` to go into next step",
802
+ show_label=False, visible=False)
803
+ camera_mode = gr.Radio(choices=CAMERA_MOTION_MODE, value=CAMERA_MOTION_MODE[0], label="Camera Motion Control Mode", interactive=True, visible=False)
804
+ camera_info = gr.Button(value="Proceed", visible=False)
805
+
806
+ with gr.Row():
807
+ with gr.Column():
808
+ # step2.1 - camera motion control - basic
809
+ basic_camera_motion = gr.Markdown("---\n### Basic Camera Poses", show_label=False, visible=False)
810
+ basic_camera_motion_des = gr.Markdown(f"\n 1. Click one of the basic camera poses, such as `Pan Up`; \
811
+ \n 2. Slide the `Motion speed` to get a speed value. The large the value, the fast the camera motion; \
812
+ \n 3. Click `Visualize Camera and Proceed` to visualize the camera poses and go proceed; \
813
+ \n 4. Click `Reset Camera` to reset the camera poses (If needed). ",
814
+ show_label=False, visible=False)
815
+
816
+
817
+ # step2.2 - camera motion control - provided complex
818
+ complex_camera_motion = gr.Markdown("---\n### Provided Complex Camera Poses", show_label=False, visible=False)
819
+ complex_camera_motion_des = gr.Markdown(f"\n 1. Click one of the complex camera poses, such as `Pose_1`; \
820
+ \n 2. Click `Visualize Camera and Proceed` to visualize the camera poses and go proceed; \
821
+ \n 3. Click `Reset Camera` to reset the camera poses (If needed). ",
822
+ show_label=False, visible=False)
823
+
824
+ # step2.3 - camera motion control - custom
825
+ custom_camera_motion = gr.Markdown("---\n### Custom Camera Poses", show_label=False, visible=False)
826
+ custom_run_status = gr.Markdown(f"\n 1. Click two of the basic camera poses, such as `Pan Up` and `Pan Left`; \
827
+ \n 2. Click `Customized Mode 1: First A then B` or `Customized Mode 1: First A then B` \
828
+ \n - `Customized Mode 1: First A then B`: The camera first `Pan Up` and then `Pan Left`; \
829
+ \n - `Customized Mode 2: Both A and B`: The camera move towards the upper left corner; \
830
+ \n 3. Slide the `Motion speed` to get a speed value. The large the value, the fast the camera motion; \
831
+ \n 4. Click `Visualize Camera and Proceed` to visualize the camera poses and go proceed; \
832
+ \n 5. Click `Reset Camera` to reset the camera poses (If needed). ",
833
+ show_label=False, visible=False)
834
+
835
+ gr.HighlightedText(value=[("",""), ("1. Select two of the basic camera poses; 2. Select Customized Mode 1 OR Customized Mode 2. 3. Visualized Camera to show the customized camera poses", "Normal")],
836
+ color_map={"Normal": "green", "Error": "red", "Clear clicks": "gray", "Add mask": "green", "Remove mask": "red"}, visible=False)
837
+
838
+ with gr.Row():
839
+ U = gr.Button(value="Pan Up", visible=False)
840
+ D = gr.Button(value="Pan Down", visible=False)
841
+ L = gr.Button(value="Pan Left", visible=False)
842
+ R = gr.Button(value="Pan Right", visible=False)
843
+ with gr.Row():
844
+ I = gr.Button(value="Zoom In", visible=False)
845
+ O = gr.Button(value="Zoom Out", visible=False)
846
+ ACW = gr.Button(value="ACW", visible=False)
847
+ CW = gr.Button(value="CW", visible=False)
848
+
849
+ with gr.Row():
850
+ combine1 = gr.Button(value="Customized Mode 1: First A then B", visible=False)
851
+ combine2 = gr.Button(value="Customized Mode 2: Both A and B", visible=False)
852
+
853
+ with gr.Row():
854
+ speed = gr.Slider(minimum=0, maximum=2, step=0.2, label="Motion Speed", value=1.0, visible=False)
855
+
856
+ with gr.Row():
857
+ Pose_1 = gr.Button(value="Pose_1", visible=False)
858
+ Pose_2 = gr.Button(value="Pose_2", visible=False)
859
+ Pose_3 = gr.Button(value="Pose_3", visible=False)
860
+ Pose_4 = gr.Button(value="Pose_4", visible=False)
861
+ with gr.Row():
862
+ Pose_5 = gr.Button(value="Pose_5", visible=False)
863
+ Pose_6 = gr.Button(value="Pose_6", visible=False)
864
+ Pose_7 = gr.Button(value="Pose_7", visible=False)
865
+ Pose_8 = gr.Button(value="Pose_8", visible=False)
866
+
867
+ with gr.Row():
868
+ camera_args = gr.Textbox(value="Camera Type", label="Camera Type", visible=False)
869
+ with gr.Row():
870
+ camera_vis= gr.Button(value="Visualize Camera and Proceed", visible=False)
871
+ camera_reset = gr.Button(value="Reset Camera", visible=False)
872
+ with gr.Column():
873
+ vis_camera = gr.Plot(fig, label='Camera Poses', visible=False)
874
+
875
+ # step2 - object motion control
876
+ step2_object_motion = gr.Markdown("---\n## Step 2/3: Select a Provided Trajectory of Draw Yourself", show_label=False, visible=False)
877
+ step2_object_motion_des = gr.Markdown(f"\n - {OBJECT_MOTION_MODE[0]}: We provide some example trajectories. You can select one of them directly. \
878
+ \n - {OBJECT_MOTION_MODE[1]}: Draw the trajectory yourself. \
879
+ \n - Click `Proceed` to go into next step",
880
+ show_label=False, visible=False)
881
+
882
+ object_mode = gr.Radio(choices=OBJECT_MOTION_MODE, value=OBJECT_MOTION_MODE[0], label="Motion Control Mode", interactive=True, visible=False)
883
+ object_info = gr.Button(value="Proceed", visible=False)
884
+
885
+ with gr.Row():
886
+ with gr.Column():
887
+ # step2.1 - object motion control - provided
888
+ provided_traj = gr.Markdown("---\n### Provided Trajectory", show_label=False, visible=False)
889
+ provided_traj_des = gr.Markdown(f"\n 1. Click one of the provided trajectories, such as `horizon_1`; \
890
+ \n 2. Click `Visualize Trajectory and Proceed` to visualize the trajectory and go proceed; \
891
+ \n 3. Click `Reset Trajectory` to reset the trajectory (If needed). ",
892
+ show_label=False, visible=False)
893
+
894
+ # step2.2 - object motion control - draw yourself
895
+ draw_traj = gr.Markdown("---\n### Draw Yourself", show_label=False, visible=False)
896
+ draw_run_status = gr.Markdown(f"\n 1. Click the `Canvas` in the right to draw the trajectory. **Note that You have to click the canva many times. For time saving, \
897
+ the click point will not appear in the canvas but its coordinates will be written in `Points of Trajectory`**; \
898
+ \n 2. Click `Visualize Trajectory and Proceed` to visualize the trajectory and go proceed; \
899
+ \n 3. Click `Reset Trajectory` to reset the trajectory (If needed). ",
900
+ show_label=False, visible=False)
901
+
902
+ with gr.Row():
903
+ traj_1 = gr.Button(value="horizon_1", visible=False)
904
+ traj_2 = gr.Button(value="swaying_1", visible=False)
905
+ traj_3 = gr.Button(value="swaying_2", visible=False)
906
+ traj_4 = gr.Button(value="swaying_3", visible=False)
907
+ with gr.Row():
908
+ traj_5 = gr.Button(value="curve_1", visible=False)
909
+ traj_6 = gr.Button(value="curve_2", visible=False)
910
+ traj_7 = gr.Button(value="curve_3", visible=False)
911
+ traj_8 = gr.Button(value="curve_4", visible=False)
912
+
913
+ traj_args = gr.Textbox(value="", label="Points of Trajectory", visible=False)
914
+ with gr.Row():
915
+ traj_vis = gr.Button(value="Visualize Trajectory and Proceed", visible=False)
916
+ traj_reset = gr.Button(value="Reset Trajectory", visible=False)
917
+ traj_droplast = gr.Button(value="Drop Last Point", visible=False)
918
+
919
+ with gr.Column():
920
+ traj_input = gr.Image("assets/traj_layout.png", tool='sketch', source="canvas",
921
+ width=256, height=256,
922
+ label="Canvas for Drawing", visible=False)
923
+ vis_traj = gr.Video(value=None, label="Trajectory", visible=False, width=256, height=256)
924
+
925
+
926
+
927
+ # step3 - Add prompt and Generate videos
928
+ with gr.Row():
929
+ with gr.Column():
930
+ step3_prompt_generate = gr.Markdown("---\n## Step 3/3: Add prompt and Generate videos", show_label=False, visible=False)
931
+ prompt = gr.Textbox(value="a dog sitting on grass", label="Prompt", interactive=True, visible=False)
932
+ n_samples = gr.Number(value=3, precision=0, interactive=True, label="n_samples", visible=False)
933
+ seed = gr.Number(value=1234, precision=0, interactive=True, label="Seed", visible=False)
934
+ start = gr.Button(value="Start generation !", visible=False)
935
+ with gr.Column():
936
+ gen_video = gr.Video(value=None, label="Generate Video", visible=False)
937
+
938
+ mode_info.click(
939
+ fn=visualized_step2,
940
+ inputs=[infer_mode],
941
+ outputs=[step2_camera_motion,
942
+ step2_camera_motion_des,
943
+ camera_mode,
944
+ camera_info,
945
+
946
+ basic_camera_motion,
947
+ basic_camera_motion_des,
948
+ custom_camera_motion,
949
+ custom_run_status,
950
+ complex_camera_motion,
951
+ complex_camera_motion_des,
952
+ U, D, L, R,
953
+ I, O, ACW, CW,
954
+ combine1, combine2,
955
+ speed,
956
+ Pose_1, Pose_2, Pose_3, Pose_4,
957
+ Pose_5, Pose_6, Pose_7, Pose_8,
958
+ camera_args,
959
+ camera_reset, camera_vis,
960
+ vis_camera,
961
+
962
+ step2_object_motion,
963
+ step2_object_motion_des,
964
+ object_mode,
965
+ object_info,
966
+
967
+ provided_traj,
968
+ provided_traj_des,
969
+ draw_traj,
970
+ draw_run_status,
971
+ traj_1, traj_2, traj_3, traj_4,
972
+ traj_5, traj_6, traj_7, traj_8,
973
+ traj_args,
974
+ traj_droplast, traj_reset,
975
+ traj_vis,
976
+ traj_input, vis_traj,
977
+
978
+ step2_camera_object_motion,
979
+ step2_camera_object_motion_des,
980
+
981
+ step3_prompt_generate, prompt, n_samples, seed, start, gen_video,
982
+
983
+ ],
984
+ )
985
+
986
+ camera_info.click(
987
+ fn=visualized_camera_poses,
988
+ inputs=[camera_mode],
989
+ outputs=[basic_camera_motion,
990
+ basic_camera_motion_des,
991
+ custom_camera_motion,
992
+ custom_run_status,
993
+ complex_camera_motion,
994
+ complex_camera_motion_des,
995
+ U, D, L, R,
996
+ I, O, ACW, CW,
997
+ combine1, combine2,
998
+ speed,
999
+ Pose_1, Pose_2, Pose_3, Pose_4,
1000
+ Pose_5, Pose_6, Pose_7, Pose_8,
1001
+ camera_args,
1002
+ camera_reset, camera_vis,
1003
+ vis_camera,
1004
+ step3_prompt_generate, prompt, n_samples, seed, start, gen_video],
1005
+ )
1006
+
1007
+ object_info.click(
1008
+ fn=visualized_traj_poses,
1009
+ inputs=[object_mode],
1010
+ outputs=[provided_traj,
1011
+ provided_traj_des,
1012
+ draw_traj,
1013
+ draw_run_status,
1014
+ traj_1, traj_2, traj_3, traj_4,
1015
+ traj_5, traj_6, traj_7, traj_8,
1016
+ traj_args,
1017
+ traj_droplast, traj_reset,
1018
+ traj_vis,
1019
+ traj_input, vis_traj,
1020
+ step3_prompt_generate, prompt, n_samples, seed, start, gen_video,],
1021
+ )
1022
+
1023
+
1024
+ U.click(fn=add_camera_motion, inputs=[U, camera_mode], outputs=camera_args)
1025
+ D.click(fn=add_camera_motion, inputs=[D, camera_mode], outputs=camera_args)
1026
+ L.click(fn=add_camera_motion, inputs=[L, camera_mode], outputs=camera_args)
1027
+ R.click(fn=add_camera_motion, inputs=[R, camera_mode], outputs=camera_args)
1028
+ I.click(fn=add_camera_motion, inputs=[I, camera_mode], outputs=camera_args)
1029
+ O.click(fn=add_camera_motion, inputs=[O, camera_mode], outputs=camera_args)
1030
+ ACW.click(fn=add_camera_motion, inputs=[ACW, camera_mode], outputs=camera_args)
1031
+ CW.click(fn=add_camera_motion, inputs=[CW, camera_mode], outputs=camera_args)
1032
+ speed.change(fn=change_camera_speed, inputs=speed, outputs=camera_args)
1033
+ camera_reset.click(fn=reset_camera, inputs=None, outputs=[camera_args])
1034
+
1035
+ combine1.click(fn=change_camera_mode, inputs=[combine1, camera_mode], outputs=camera_args)
1036
+ combine2.click(fn=change_camera_mode, inputs=[combine2, camera_mode], outputs=camera_args)
1037
+
1038
+ camera_vis.click(fn=fn_vis_camera, inputs=[infer_mode], outputs=[vis_camera, object_mode, object_info, step3_prompt_generate, prompt, n_samples, seed, start, gen_video])
1039
+
1040
+ Pose_1.click(fn=add_complex_camera_motion, inputs=Pose_1, outputs=camera_args)
1041
+ Pose_2.click(fn=add_complex_camera_motion, inputs=Pose_2, outputs=camera_args)
1042
+ Pose_3.click(fn=add_complex_camera_motion, inputs=Pose_3, outputs=camera_args)
1043
+ Pose_4.click(fn=add_complex_camera_motion, inputs=Pose_4, outputs=camera_args)
1044
+ Pose_5.click(fn=add_complex_camera_motion, inputs=Pose_5, outputs=camera_args)
1045
+ Pose_6.click(fn=add_complex_camera_motion, inputs=Pose_6, outputs=camera_args)
1046
+ Pose_7.click(fn=add_complex_camera_motion, inputs=Pose_7, outputs=camera_args)
1047
+ Pose_8.click(fn=add_complex_camera_motion, inputs=Pose_8, outputs=camera_args)
1048
+
1049
+ traj_1.click(fn=add_provided_traj, inputs=traj_1, outputs=traj_args)
1050
+ traj_2.click(fn=add_provided_traj, inputs=traj_2, outputs=traj_args)
1051
+ traj_3.click(fn=add_provided_traj, inputs=traj_3, outputs=traj_args)
1052
+ traj_4.click(fn=add_provided_traj, inputs=traj_4, outputs=traj_args)
1053
+ traj_5.click(fn=add_provided_traj, inputs=traj_5, outputs=traj_args)
1054
+ traj_6.click(fn=add_provided_traj, inputs=traj_6, outputs=traj_args)
1055
+ traj_7.click(fn=add_provided_traj, inputs=traj_7, outputs=traj_args)
1056
+ traj_8.click(fn=add_provided_traj, inputs=traj_8, outputs=traj_args)
1057
+
1058
+ traj_vis.click(fn=fn_vis_traj, inputs=None, outputs=[vis_traj, step3_prompt_generate, prompt, n_samples, seed, start, gen_video])
1059
+ traj_input.select(fn=add_traj_point, inputs=None, outputs=traj_args)
1060
+ traj_droplast.click(fn=fn_traj_droplast, inputs=None, outputs=traj_args)
1061
+ traj_reset.click(fn=fn_traj_reset, inputs=None, outputs=traj_args)
1062
+
1063
+
1064
+ start.click(fn=model_run, inputs=[prompt, infer_mode, seed, n_samples], outputs=gen_video)
1065
+
1066
+ gr.Markdown(article)
1067
+
1068
+ # demo.launch(server_name='0.0.0.0', share=False, server_port=args.port)
1069
+ demo.queue(concurrency_count=1, max_size=10)
1070
+ demo.launch()
1071
+
1072
+
1073
+
1074
+ if __name__=="__main__":
1075
+ parser = argparse.ArgumentParser()
1076
+ parser.add_argument("--port", type=int, default=12345)
1077
+ args = parser.parse_args()
1078
+
1079
+ main(args)
assets/traj_layout.png ADDED
configs/inference/config_both.yaml ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ model:
2
+ base_learning_rate: 0.0001
3
+ scale_lr: false
4
+ target: motionctrl.motionctrl.MotionCtrl
5
+ params:
6
+ # param for object motion control
7
+ omcm_config:
8
+ pretrained: ~
9
+ target: lvdm.modules.encoders.adapter.Adapter
10
+ params:
11
+ channels:
12
+ - 320
13
+ - 640
14
+ - 1280
15
+ - 1280
16
+ nums_rb: 2
17
+ cin: 128
18
+ sk: true
19
+ use_conv: false
20
+
21
+ linear_start: 0.00085
22
+ linear_end: 0.012
23
+ num_timesteps_cond: 1
24
+ log_every_t: 200
25
+ timesteps: 1000
26
+ first_stage_key: video
27
+ cond_stage_key: caption
28
+ cond_stage_trainable: false
29
+ conditioning_key: crossattn
30
+ image_size:
31
+ - 32
32
+ - 32
33
+ channels: 4
34
+ scale_by_std: false
35
+ scale_factor: 0.18215
36
+ use_ema: false
37
+ uncond_prob: 0.1
38
+ uncond_type: empty_seq
39
+ empty_params_only: true
40
+ scheduler_config:
41
+ target: utils.lr_scheduler.LambdaLRScheduler
42
+ interval: step
43
+ frequency: 100
44
+ params:
45
+ start_step: 0
46
+ final_decay_ratio: 0.01
47
+ decay_steps: 20000
48
+ unet_config:
49
+ target: lvdm.modules.networks.openaimodel3d_next.UNetModel
50
+ params:
51
+ in_channels: 4
52
+ out_channels: 4
53
+ model_channels: 320
54
+ attention_resolutions:
55
+ - 4
56
+ - 2
57
+ - 1
58
+ num_res_blocks: 2
59
+ channel_mult:
60
+ - 1
61
+ - 2
62
+ - 4
63
+ - 4
64
+ num_head_channels: 64
65
+ transformer_depth: 1
66
+ context_dim: 1024
67
+ use_linear: true
68
+ use_checkpoint: true
69
+ temporal_conv: true
70
+ temporal_attention: true
71
+ temporal_selfatt_only: true
72
+ use_relative_position: false
73
+ use_causal_attention: false
74
+ temporal_length: 16
75
+ use_image_dataset: false
76
+ addition_attention: true
77
+ first_stage_config:
78
+ target: lvdm.models.autoencoder.AutoencoderKL
79
+ params:
80
+ embed_dim: 4
81
+ monitor: val/rec_loss
82
+ ddconfig:
83
+ double_z: true
84
+ z_channels: 4
85
+ resolution: 256
86
+ in_channels: 3
87
+ out_ch: 3
88
+ ch: 128
89
+ ch_mult:
90
+ - 1
91
+ - 2
92
+ - 4
93
+ - 4
94
+ num_res_blocks: 2
95
+ attn_resolutions: []
96
+ dropout: 0.0
97
+ lossconfig:
98
+ target: torch.nn.Identity
99
+ cond_stage_config:
100
+ target: lvdm.modules.encoders.condition2.FrozenOpenCLIPEmbedder
101
+ params:
102
+ freeze: true
103
+ layer: penultimate
104
+
configs/inference/run.sh ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ config="configs/inference/config_both.yaml"
3
+ ckpt='./checkpoints/motionctrl.pth'
4
+
5
+ condtype='both'
6
+ condtype='object_motion'
7
+ condtype='camera_motion'
8
+
9
+ cond_dir="examples/"
10
+
11
+ res_dir="./outputs/"
12
+ if [ ! -d $res_dir ]; then
13
+ mkdir -p $res_dir
14
+ fi
15
+
16
+ save_dir=$res_dir/$condtype'_seed'$seed
17
+
18
+ use_ddp=0
19
+
20
+ if [ $use_ddp == 0 ]; then
21
+ CUDA_VISIBLE_DEVICES=7 python 'main/evaluation/motionctrl_inference.py' \
22
+ --seed 1234 \
23
+ --ckpt_path $ckpt \
24
+ --base $config \
25
+ --savedir $save_dir \
26
+ --n_samples 5 \
27
+ --bs 1 --height 256 --width 256 \
28
+ --unconditional_guidance_scale 7.5 \
29
+ --ddim_steps 50 \
30
+ --ddim_eta 1.0 \
31
+ --condtype $condtype \
32
+ --cond_dir $cond_dir \
33
+ # --save_imgs
34
+ fi
35
+
36
+ if [ $use_ddp == 1 ]; then
37
+ python3 -m torch.distributed.launch \
38
+ --nproc_per_node=3 --nnodes=1 --master_port=23466 \
39
+ main/evaluation/ddp_wrapper.py \
40
+ --module 'inference' \
41
+ --seed 2000 \
42
+ --ckpt_path $ckpt \
43
+ --base $config \
44
+ --savedir $res_dir/$name \
45
+ --n_samples 3 \
46
+ --bs 1 --height 256 --width 256 \
47
+ --unconditional_guidance_scale 7.5 \
48
+ --ddim_steps 50 \
49
+ --ddim_eta 1.0 \
50
+ --condtype $condtype \
51
+ --cond_dir $cond_dir
52
+ fi
examples/camera_poses/test_camera_018f7907401f2fef.json ADDED
@@ -0,0 +1 @@
 
 
1
+ [[1.0, -4.493872218791495e-10, 5.58983348497577e-09, 1.9967236752904682e-09, -4.493872218791495e-10, 1.0, -6.144247333139674e-10, 1.0815730533408896e-09, 5.58983348497577e-09, -6.144247333139674e-10, 1.0, -7.984015226725205e-09], [0.9982863664627075, -0.0024742060340940952, 0.05846544727683067, -0.024547122418880463, 0.002410230925306678, 0.9999964237213135, 0.0011647245846688747, -0.003784072818234563, -0.05846811458468437, -0.0010218139505013824, 0.9982887506484985, -0.09103696048259735], [0.9933298230171204, -0.006303737405687571, 0.11513543128967285, -0.053876250982284546, 0.00586089538410306, 0.9999741315841675, 0.004184383898973465, -0.006566310301423073, -0.115158811211586, -0.0034816779661923647, 0.9933409690856934, -0.18525512516498566], [0.9849286675453186, -0.013619760051369667, 0.17242403328418732, -0.08322551101446152, 0.01256392989307642, 0.9998950958251953, 0.0072133541107177734, -0.004579910542815924, -0.17250417172908783, -0.004938316997140646, 0.9849964380264282, -0.28701746463775635], [0.9731453657150269, -0.022617166861891747, 0.2290775030851364, -0.11655563861131668, 0.02060025744140148, 0.9997251629829407, 0.011192308738827705, -0.0017426757840439677, -0.2292676568031311, -0.006172688212245703, 0.9733438491821289, -0.37736839056015015], [0.9582399725914001, -0.03294993191957474, 0.2840607464313507, -0.15743066370487213, 0.030182993039488792, 0.9994447827339172, 0.014113469049334526, -0.002769832033663988, -0.28436803817749023, -0.004950287751853466, 0.9587023854255676, -0.46959081292152405], [0.940129816532135, -0.03991429880261421, 0.3384712040424347, -0.22889098525047302, 0.03725311905145645, 0.9992027282714844, 0.01435780432075262, -0.0028311305213719606, -0.3387744128704071, -0.0008890923927538097, 0.9408671855926514, -0.5631460547447205], [0.9222924709320068, -0.044258520007133484, 0.38395029306411743, -0.2986142039299011, 0.04110203683376312, 0.9990199208259583, 0.01642671786248684, 0.0013055746676400304, -0.38430097699165344, 0.000630900904070586, 0.9232076406478882, -0.6414245367050171], [0.9061535000801086, -0.04851173609495163, 0.4201577305793762, -0.3483412563800812, 0.04521748423576355, 0.9988185167312622, 0.017803886905312538, 0.0010280977003276348, -0.4205249547958374, 0.0028654206544160843, 0.907276451587677, -0.7144853472709656], [0.8919307589530945, -0.05171844735741615, 0.4492044746875763, -0.37905213236808777, 0.04818608984351158, 0.9986518621444702, 0.019300933927297592, 0.00036871168413199484, -0.44959715008735657, 0.004430312197655439, 0.8932204246520996, -0.7976372241973877], [0.8792291879653931, -0.05425972864031792, 0.47329893708229065, -0.39671003818511963, 0.05076585337519646, 0.998507022857666, 0.02016463316977024, 0.001104982104152441, -0.4736863970756531, 0.00629808846861124, 0.8806710243225098, -0.8874085545539856], [0.8659296035766602, -0.0567130371928215, 0.49694016575813293, -0.4097800552845001, 0.05366959795355797, 0.9983500838279724, 0.020415671169757843, 0.0009228077251464128, -0.497278094291687, 0.008992047980427742, 0.8675445914268494, -0.9762357473373413], [0.8503361940383911, -0.055699657648801804, 0.5232837200164795, -0.44268566370010376, 0.054582174867391586, 0.9983546733856201, 0.01757136546075344, 0.005412018392235041, -0.5234014391899109, 0.013620397076010704, 0.8519773483276367, -1.069865107536316], [0.836037814617157, -0.05214058235287666, 0.5461887717247009, -0.4671085774898529, 0.05177384987473488, 0.9985294938087463, 0.01607322134077549, 0.008980141952633858, -0.5462236404418945, 0.014840473420917988, 0.8375079035758972, -1.1569048166275024], [0.82603919506073, -0.04987695440649986, 0.5614013671875, -0.4677649438381195, 0.05124447122216225, 0.9985973834991455, 0.013318539597094059, 0.012170637026429176, -0.5612781643867493, 0.017767081037163734, 0.8274364471435547, -1.2651430368423462], [0.8179472088813782, -0.0496118925511837, 0.573150098323822, -0.45822662115097046, 0.052784956991672516, 0.9985441565513611, 0.011104168370366096, 0.018991567194461823, -0.5728666186332703, 0.0211710836738348, 0.8193751573562622, -1.3895009756088257]]
examples/camera_poses/test_camera_088b93f15ca8745d.json ADDED
@@ -0,0 +1 @@
 
 
1
+ [[0.9999999403953552, 3.8618797049139175e-10, -1.3441345814158012e-08, 1.3928219289027766e-07, 3.8618797049139175e-10, 1.0, -4.134579345560496e-10, -6.074658998045379e-09, -1.3441345814158012e-08, -4.134579345560496e-10, 1.0, 7.038884319854333e-08], [0.9994913339614868, 0.003077245783060789, -0.031741149723529816, 0.08338673412799835, -0.0030815028585493565, 0.999995231628418, -8.520588744431734e-05, 0.006532138213515282, 0.0317407064139843, 0.00018297435599379241, 0.9994961619377136, -0.02256060019135475], [0.9979938268661499, 0.0051255361177027225, -0.06310292333364487, 0.18344485759735107, -0.005117486696690321, 0.9999868869781494, 0.00028916727751493454, 0.018134046345949173, 0.06310353428125381, 3.434090831433423e-05, 0.9980069994926453, -0.030579563230276108], [0.9954646825790405, 0.00820203311741352, -0.0947771891951561, 0.29663264751434326, -0.00811922550201416, 0.9999662041664124, 0.0012593322899192572, 0.02404301054775715, 0.09478426724672318, -0.0004841022891923785, 0.9954977035522461, -0.02678978443145752], [0.9913660883903503, 0.012001598253846169, -0.13057230412960052, 0.4076530337333679, -0.011968829669058323, 0.999927818775177, 0.0010357286082580686, 0.024977533146739006, 0.1305752843618393, 0.0005360084469430149, 0.9914382100105286, -0.010779343545436859], [0.985666811466217, 0.017323914915323257, -0.16781197488307953, 0.509911060333252, -0.017399737611413002, 0.9998481273651123, 0.0010186078725382686, 0.023117201402783394, 0.16780413687229156, 0.0019158748909831047, 0.9858185052871704, 0.018053216859698296], [0.9784473180770874, 0.022585421800613403, -0.20525763928890228, 0.5957884192466736, -0.022850200533866882, 0.9997382760047913, 0.0010805513011291623, 0.020451901480555534, 0.2052282989025116, 0.003632916137576103, 0.9787073731422424, 0.03460140898823738], [0.9711515307426453, 0.026846906170248985, -0.23694702982902527, 0.6832671165466309, -0.02745947800576687, 0.999622642993927, 0.0007151798927225173, 0.012211678549647331, 0.23687675595283508, 0.005811895243823528, 0.971522331237793, 0.03236595541238785], [0.9641746878623962, 0.030338184908032417, -0.26352745294570923, 0.7764986157417297, -0.031404945999383926, 0.9995067715644836, 0.0001645474840188399, 0.0011497576488181949, 0.26340243220329285, 0.008117412216961384, 0.964651882648468, 0.022656364366412163], [0.9573631882667542, 0.0335896760225296, -0.2869274914264679, 0.8815275430679321, -0.03532479330897331, 0.9993755221366882, -0.0008711823611520231, -0.003618708113208413, 0.2867189943790436, 0.010969695635139942, 0.9579519033432007, 0.005283573176711798], [0.9507063627243042, 0.036557890474796295, -0.3079299330711365, 0.9931321740150452, -0.03846294432878494, 0.9992600679397583, -0.00011733790597645566, 0.0018704120302572846, 0.30769774317741394, 0.01195544097572565, 0.9514090418815613, -0.035360634326934814], [0.9448517560958862, 0.039408694952726364, -0.3251185715198517, 1.1025006771087646, -0.041503626853227615, 0.9991382360458374, 0.0004919985658489168, 0.007425118237733841, 0.32485777139663696, 0.013028733432292938, 0.9456731081008911, -0.09869624674320221], [0.940796971321106, 0.04081147164106369, -0.33650481700897217, 1.1961394548416138, -0.0429220013320446, 0.9990777373313904, 0.0011677180882543325, 0.019955899566411972, 0.336242139339447, 0.013344875536859035, 0.9416810274124146, -0.16835527122020721], [0.9376427531242371, 0.04111124947667122, -0.3451607823371887, 1.2392503023147583, -0.043144747614860535, 0.9990671873092651, 0.0017920633545145392, 0.03982722759246826, 0.34491249918937683, 0.013211555778980255, 0.938541829586029, -0.24618202447891235], [0.9353355765342712, 0.04122937470674515, -0.3513509929180145, 1.285768747329712, -0.043183211237192154, 0.9990646243095398, 0.0022769556380808353, 0.06841164082288742, 0.3511161506175995, 0.01304274145513773, 0.936241090297699, -0.3213619291782379], [0.9342393279075623, 0.041213057935237885, -0.3542574644088745, 1.3363462686538696, -0.04236872121691704, 0.9990919232368469, 0.0044970144517719746, 0.08925694227218628, 0.35412102937698364, 0.010808154009282589, 0.9351370930671692, -0.40201041102409363]]
examples/camera_poses/test_camera_1424acd0007d40b5.json ADDED
@@ -0,0 +1 @@
 
 
1
+ [[1.0, 9.44418099280142e-10, 3.889182664806867e-08, 6.214055492392845e-09, 9.44418099280142e-10, 1.0, -1.0644604121756718e-11, -7.621465680784922e-10, 3.889182664806867e-08, -1.0644604121756718e-11, 1.0, -2.7145965475483536e-08], [0.9873979091644287, -0.007892023772001266, 0.15806053578853607, 0.4749181270599365, 0.008024877868592739, 0.9999678134918213, -0.00020230526570230722, 0.1585356593132019, -0.15805381536483765, 0.0014681711327284575, 0.9874294400215149, -0.2091633826494217], [0.9708925485610962, -0.011486345902085304, 0.23923994600772858, 0.8120080828666687, 0.012198254466056824, 0.9999244809150696, -0.0014952132478356361, 0.2486257702112198, -0.23920467495918274, 0.004370000213384628, 0.9709593057632446, -0.5957822799682617], [0.9619541168212891, -0.013188007287681103, 0.2728927433490753, 1.1486873626708984, 0.014017474837601185, 0.9999011754989624, -0.001090032048523426, 0.3114692270755768, -0.2728513777256012, 0.0048738280311226845, 0.962043821811676, -1.0323039293289185], [0.9586812257766724, -0.013936692848801613, 0.284140944480896, 1.5948307514190674, 0.014867136254906654, 0.9998888373374939, -0.0011181083973497152, 0.36000898480415344, -0.2840937674045563, 0.0052962712943553925, 0.958781898021698, -1.4377187490463257], [0.9583359360694885, -0.011928150430321693, 0.28539448976516724, 2.002793788909912, 0.014221147634088993, 0.9998810887336731, -0.0059633455239236355, 0.35464340448379517, -0.28528934717178345, 0.009773525409400463, 0.9583916068077087, -1.8953297138214111], [0.9584393501281738, -0.010862396098673344, 0.28508952260017395, 2.3351645469665527, 0.012857729569077492, 0.9999041557312012, -0.005128204356878996, 0.38934090733528137, -0.28500640392303467, 0.008580676279962063, 0.9584871530532837, -2.4214961528778076], [0.9587277173995972, -0.009760312736034393, 0.28415825963020325, 2.6858017444610596, 0.012186127714812756, 0.9999027848243713, -0.0067702098749578, 0.4173329174518585, -0.28406453132629395, 0.009953574277460575, 0.9587535262107849, -3.030754327774048], [0.9589635729789734, -0.0070899901911616325, 0.2834406793117523, 2.8917219638824463, 0.010482418350875378, 0.9998904466629028, -0.01045384630560875, 0.4001043438911438, -0.28333547711372375, 0.012996001169085503, 0.9589328169822693, -3.6960957050323486], [0.9590328931808472, -0.005921780597418547, 0.2832328677177429, 3.034579038619995, 0.00947173498570919, 0.9998928308486938, -0.01116593275219202, 0.4193899631500244, -0.2831363379955292, 0.013391205109655857, 0.9589861631393433, -4.384733200073242], [0.9593284726142883, -0.004661113955080509, 0.28225383162498474, 3.2042288780212402, 0.0076906089670956135, 0.9999240636825562, -0.009626304730772972, 0.4752484858036041, -0.28218749165534973, 0.011405492201447487, 0.9592914581298828, -5.098723411560059], [0.9591755867004395, -0.0035665074829012156, 0.2827887237071991, 3.263953924179077, 0.0062992447055876255, 0.9999418258666992, -0.008754877373576164, 0.4543868899345398, -0.282740980386734, 0.010178821161389351, 0.95914226770401, -5.7807512283325195], [0.9591742753982544, -0.003413048107177019, 0.2827949523925781, 3.3116462230682373, 0.003146615345031023, 0.9999940991401672, 0.0013963348465040326, 0.4299861788749695, -0.28279799222946167, -0.0004494813329074532, 0.9591793417930603, -6.478931903839111], [0.9585762619972229, -0.002857929328456521, 0.28482162952423096, 3.4120190143585205, -0.008201238699257374, 0.9992581605911255, 0.0376281812787056, 0.21596357226371765, -0.2847178280353546, -0.03840537369251251, 0.957841694355011, -7.178638935089111], [0.9572952389717102, -0.002719884505495429, 0.28909942507743835, 3.4662365913391113, -0.030634215101599693, 0.9933721423149109, 0.11078491061925888, -0.29767531156539917, -0.2874845862388611, -0.11491020023822784, 0.9508671164512634, -7.794575214385986], [0.9545961618423462, -0.005338957067579031, 0.29785510897636414, 3.5083835124969482, -0.06037351116538048, 0.9756243824958801, 0.2109788954257965, -1.0968165397644043, -0.29172107577323914, -0.21938219666481018, 0.9310050010681152, -8.306528091430664]]
examples/camera_poses/test_camera_D.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ -0.2,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ 0.0
15
+ ],
16
+ [
17
+ 1.0,
18
+ 0.0,
19
+ 0.0,
20
+ 0.0,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ -0.28750000000000003,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ 0.0
29
+ ],
30
+ [
31
+ 1.0,
32
+ 0.0,
33
+ 0.0,
34
+ 0.0,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ -0.37500000000000006,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ 0.0
43
+ ],
44
+ [
45
+ 1.0,
46
+ 0.0,
47
+ 0.0,
48
+ 0.0,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ -0.4625000000000001,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ 0.0
57
+ ],
58
+ [
59
+ 1.0,
60
+ 0.0,
61
+ 0.0,
62
+ 0.0,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ -0.55,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ 0.0
71
+ ],
72
+ [
73
+ 1.0,
74
+ 0.0,
75
+ 0.0,
76
+ 0.0,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ -0.6375000000000002,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ 0.0
85
+ ],
86
+ [
87
+ 1.0,
88
+ 0.0,
89
+ 0.0,
90
+ 0.0,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ -0.7250000000000001,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ 0.0
99
+ ],
100
+ [
101
+ 1.0,
102
+ 0.0,
103
+ 0.0,
104
+ 0.0,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ -0.8125000000000002,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ 0.0
113
+ ],
114
+ [
115
+ 1.0,
116
+ 0.0,
117
+ 0.0,
118
+ 0.0,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ -0.9000000000000001,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ 0.0
127
+ ],
128
+ [
129
+ 1.0,
130
+ 0.0,
131
+ 0.0,
132
+ 0.0,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ -0.9875000000000003,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ 0.0
141
+ ],
142
+ [
143
+ 1.0,
144
+ 0.0,
145
+ 0.0,
146
+ 0.0,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ -1.0750000000000002,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ 0.0
155
+ ],
156
+ [
157
+ 1.0,
158
+ 0.0,
159
+ 0.0,
160
+ 0.0,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ -1.1625000000000003,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ 0.0
169
+ ],
170
+ [
171
+ 1.0,
172
+ 0.0,
173
+ 0.0,
174
+ 0.0,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ -1.2500000000000002,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ 0.0
183
+ ],
184
+ [
185
+ 1.0,
186
+ 0.0,
187
+ 0.0,
188
+ 0.0,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ -1.3375000000000001,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ 0.0
197
+ ],
198
+ [
199
+ 1.0,
200
+ 0.0,
201
+ 0.0,
202
+ 0.0,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ -1.4250000000000003,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ 0.0
211
+ ],
212
+ [
213
+ 1.0,
214
+ 0.0,
215
+ 0.0,
216
+ 0.0,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ -1.5125000000000004,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ 0.0
225
+ ]
226
+ ]
examples/camera_poses/test_camera_I.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ -0.2
15
+ ],
16
+ [
17
+ 1.0,
18
+ 0.0,
19
+ 0.0,
20
+ 0.0,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ -0.28750000000000003
29
+ ],
30
+ [
31
+ 1.0,
32
+ 0.0,
33
+ 0.0,
34
+ 0.0,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ -0.37500000000000006
43
+ ],
44
+ [
45
+ 1.0,
46
+ 0.0,
47
+ 0.0,
48
+ 0.0,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ -0.4625000000000001
57
+ ],
58
+ [
59
+ 1.0,
60
+ 0.0,
61
+ 0.0,
62
+ 0.0,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ -0.55
71
+ ],
72
+ [
73
+ 1.0,
74
+ 0.0,
75
+ 0.0,
76
+ 0.0,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ -0.6375000000000002
85
+ ],
86
+ [
87
+ 1.0,
88
+ 0.0,
89
+ 0.0,
90
+ 0.0,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ -0.7250000000000001
99
+ ],
100
+ [
101
+ 1.0,
102
+ 0.0,
103
+ 0.0,
104
+ 0.0,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ -0.8125000000000002
113
+ ],
114
+ [
115
+ 1.0,
116
+ 0.0,
117
+ 0.0,
118
+ 0.0,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ -0.9000000000000001
127
+ ],
128
+ [
129
+ 1.0,
130
+ 0.0,
131
+ 0.0,
132
+ 0.0,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ -0.9875000000000003
141
+ ],
142
+ [
143
+ 1.0,
144
+ 0.0,
145
+ 0.0,
146
+ 0.0,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ -1.0750000000000002
155
+ ],
156
+ [
157
+ 1.0,
158
+ 0.0,
159
+ 0.0,
160
+ 0.0,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ -1.1625000000000003
169
+ ],
170
+ [
171
+ 1.0,
172
+ 0.0,
173
+ 0.0,
174
+ 0.0,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ -1.2500000000000002
183
+ ],
184
+ [
185
+ 1.0,
186
+ 0.0,
187
+ 0.0,
188
+ 0.0,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ -1.3375000000000001
197
+ ],
198
+ [
199
+ 1.0,
200
+ 0.0,
201
+ 0.0,
202
+ 0.0,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ -1.4250000000000003
211
+ ],
212
+ [
213
+ 1.0,
214
+ 0.0,
215
+ 0.0,
216
+ 0.0,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ -1.5125000000000004
225
+ ]
226
+ ]
examples/camera_poses/test_camera_I_0.2x.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ -0.0
15
+ ],
16
+ [
17
+ 1.0,
18
+ 0.0,
19
+ 0.0,
20
+ 0.0,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ -0.022500000000000003
29
+ ],
30
+ [
31
+ 1.0,
32
+ 0.0,
33
+ 0.0,
34
+ 0.0,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ -0.045000000000000005
43
+ ],
44
+ [
45
+ 1.0,
46
+ 0.0,
47
+ 0.0,
48
+ 0.0,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ -0.0675
57
+ ],
58
+ [
59
+ 1.0,
60
+ 0.0,
61
+ 0.0,
62
+ 0.0,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ -0.09000000000000001
71
+ ],
72
+ [
73
+ 1.0,
74
+ 0.0,
75
+ 0.0,
76
+ 0.0,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ -0.11250000000000002
85
+ ],
86
+ [
87
+ 1.0,
88
+ 0.0,
89
+ 0.0,
90
+ 0.0,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ -0.135
99
+ ],
100
+ [
101
+ 1.0,
102
+ 0.0,
103
+ 0.0,
104
+ 0.0,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ -0.15750000000000003
113
+ ],
114
+ [
115
+ 1.0,
116
+ 0.0,
117
+ 0.0,
118
+ 0.0,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ -0.18000000000000002
127
+ ],
128
+ [
129
+ 1.0,
130
+ 0.0,
131
+ 0.0,
132
+ 0.0,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ -0.2025
141
+ ],
142
+ [
143
+ 1.0,
144
+ 0.0,
145
+ 0.0,
146
+ 0.0,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ -0.22500000000000003
155
+ ],
156
+ [
157
+ 1.0,
158
+ 0.0,
159
+ 0.0,
160
+ 0.0,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ -0.24750000000000003
169
+ ],
170
+ [
171
+ 1.0,
172
+ 0.0,
173
+ 0.0,
174
+ 0.0,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ -0.27
183
+ ],
184
+ [
185
+ 1.0,
186
+ 0.0,
187
+ 0.0,
188
+ 0.0,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ -0.29250000000000004
197
+ ],
198
+ [
199
+ 1.0,
200
+ 0.0,
201
+ 0.0,
202
+ 0.0,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ -0.31500000000000006
211
+ ],
212
+ [
213
+ 1.0,
214
+ 0.0,
215
+ 0.0,
216
+ 0.0,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ -0.3375
225
+ ]
226
+ ]
examples/camera_poses/test_camera_I_0.4x.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ -0.0
15
+ ],
16
+ [
17
+ 1.0,
18
+ 0.0,
19
+ 0.0,
20
+ 0.0,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ -0.045000000000000005
29
+ ],
30
+ [
31
+ 1.0,
32
+ 0.0,
33
+ 0.0,
34
+ 0.0,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ -0.09000000000000001
43
+ ],
44
+ [
45
+ 1.0,
46
+ 0.0,
47
+ 0.0,
48
+ 0.0,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ -0.135
57
+ ],
58
+ [
59
+ 1.0,
60
+ 0.0,
61
+ 0.0,
62
+ 0.0,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ -0.18000000000000002
71
+ ],
72
+ [
73
+ 1.0,
74
+ 0.0,
75
+ 0.0,
76
+ 0.0,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ -0.22500000000000003
85
+ ],
86
+ [
87
+ 1.0,
88
+ 0.0,
89
+ 0.0,
90
+ 0.0,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ -0.27
99
+ ],
100
+ [
101
+ 1.0,
102
+ 0.0,
103
+ 0.0,
104
+ 0.0,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ -0.31500000000000006
113
+ ],
114
+ [
115
+ 1.0,
116
+ 0.0,
117
+ 0.0,
118
+ 0.0,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ -0.36000000000000004
127
+ ],
128
+ [
129
+ 1.0,
130
+ 0.0,
131
+ 0.0,
132
+ 0.0,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ -0.405
141
+ ],
142
+ [
143
+ 1.0,
144
+ 0.0,
145
+ 0.0,
146
+ 0.0,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ -0.45000000000000007
155
+ ],
156
+ [
157
+ 1.0,
158
+ 0.0,
159
+ 0.0,
160
+ 0.0,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ -0.49500000000000005
169
+ ],
170
+ [
171
+ 1.0,
172
+ 0.0,
173
+ 0.0,
174
+ 0.0,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ -0.54
183
+ ],
184
+ [
185
+ 1.0,
186
+ 0.0,
187
+ 0.0,
188
+ 0.0,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ -0.5850000000000001
197
+ ],
198
+ [
199
+ 1.0,
200
+ 0.0,
201
+ 0.0,
202
+ 0.0,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ -0.6300000000000001
211
+ ],
212
+ [
213
+ 1.0,
214
+ 0.0,
215
+ 0.0,
216
+ 0.0,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ -0.675
225
+ ]
226
+ ]
examples/camera_poses/test_camera_I_1.0x.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ -0.0
15
+ ],
16
+ [
17
+ 1.0,
18
+ 0.0,
19
+ 0.0,
20
+ 0.0,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ -0.1125
29
+ ],
30
+ [
31
+ 1.0,
32
+ 0.0,
33
+ 0.0,
34
+ 0.0,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ -0.225
43
+ ],
44
+ [
45
+ 1.0,
46
+ 0.0,
47
+ 0.0,
48
+ 0.0,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ -0.3375
57
+ ],
58
+ [
59
+ 1.0,
60
+ 0.0,
61
+ 0.0,
62
+ 0.0,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ -0.45
71
+ ],
72
+ [
73
+ 1.0,
74
+ 0.0,
75
+ 0.0,
76
+ 0.0,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ -0.5625
85
+ ],
86
+ [
87
+ 1.0,
88
+ 0.0,
89
+ 0.0,
90
+ 0.0,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ -0.675
99
+ ],
100
+ [
101
+ 1.0,
102
+ 0.0,
103
+ 0.0,
104
+ 0.0,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ -0.7875
113
+ ],
114
+ [
115
+ 1.0,
116
+ 0.0,
117
+ 0.0,
118
+ 0.0,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ -0.9
127
+ ],
128
+ [
129
+ 1.0,
130
+ 0.0,
131
+ 0.0,
132
+ 0.0,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ -1.0125
141
+ ],
142
+ [
143
+ 1.0,
144
+ 0.0,
145
+ 0.0,
146
+ 0.0,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ -1.125
155
+ ],
156
+ [
157
+ 1.0,
158
+ 0.0,
159
+ 0.0,
160
+ 0.0,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ -1.2375
169
+ ],
170
+ [
171
+ 1.0,
172
+ 0.0,
173
+ 0.0,
174
+ 0.0,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ -1.35
183
+ ],
184
+ [
185
+ 1.0,
186
+ 0.0,
187
+ 0.0,
188
+ 0.0,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ -1.4625000000000001
197
+ ],
198
+ [
199
+ 1.0,
200
+ 0.0,
201
+ 0.0,
202
+ 0.0,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ -1.575
211
+ ],
212
+ [
213
+ 1.0,
214
+ 0.0,
215
+ 0.0,
216
+ 0.0,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ -1.6875
225
+ ]
226
+ ]
examples/camera_poses/test_camera_I_2.0x.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ -0.0
15
+ ],
16
+ [
17
+ 1.0,
18
+ 0.0,
19
+ 0.0,
20
+ 0.0,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ -0.225
29
+ ],
30
+ [
31
+ 1.0,
32
+ 0.0,
33
+ 0.0,
34
+ 0.0,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ -0.45
43
+ ],
44
+ [
45
+ 1.0,
46
+ 0.0,
47
+ 0.0,
48
+ 0.0,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ -0.675
57
+ ],
58
+ [
59
+ 1.0,
60
+ 0.0,
61
+ 0.0,
62
+ 0.0,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ -0.9
71
+ ],
72
+ [
73
+ 1.0,
74
+ 0.0,
75
+ 0.0,
76
+ 0.0,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ -1.125
85
+ ],
86
+ [
87
+ 1.0,
88
+ 0.0,
89
+ 0.0,
90
+ 0.0,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ -1.35
99
+ ],
100
+ [
101
+ 1.0,
102
+ 0.0,
103
+ 0.0,
104
+ 0.0,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ -1.575
113
+ ],
114
+ [
115
+ 1.0,
116
+ 0.0,
117
+ 0.0,
118
+ 0.0,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ -1.8
127
+ ],
128
+ [
129
+ 1.0,
130
+ 0.0,
131
+ 0.0,
132
+ 0.0,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ -2.025
141
+ ],
142
+ [
143
+ 1.0,
144
+ 0.0,
145
+ 0.0,
146
+ 0.0,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ -2.25
155
+ ],
156
+ [
157
+ 1.0,
158
+ 0.0,
159
+ 0.0,
160
+ 0.0,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ -2.475
169
+ ],
170
+ [
171
+ 1.0,
172
+ 0.0,
173
+ 0.0,
174
+ 0.0,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ -2.7
183
+ ],
184
+ [
185
+ 1.0,
186
+ 0.0,
187
+ 0.0,
188
+ 0.0,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ -2.9250000000000003
197
+ ],
198
+ [
199
+ 1.0,
200
+ 0.0,
201
+ 0.0,
202
+ 0.0,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ -3.15
211
+ ],
212
+ [
213
+ 1.0,
214
+ 0.0,
215
+ 0.0,
216
+ 0.0,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ -3.375
225
+ ]
226
+ ]
examples/camera_poses/test_camera_L.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.2,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ 0.0
15
+ ],
16
+ [
17
+ 1.0,
18
+ 0.0,
19
+ 0.0,
20
+ 0.28750000000000003,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ 0.0
29
+ ],
30
+ [
31
+ 1.0,
32
+ 0.0,
33
+ 0.0,
34
+ 0.37500000000000006,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ 0.0
43
+ ],
44
+ [
45
+ 1.0,
46
+ 0.0,
47
+ 0.0,
48
+ 0.4625000000000001,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ 0.0
57
+ ],
58
+ [
59
+ 1.0,
60
+ 0.0,
61
+ 0.0,
62
+ 0.55,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ 0.0
71
+ ],
72
+ [
73
+ 1.0,
74
+ 0.0,
75
+ 0.0,
76
+ 0.6375000000000002,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ 0.0
85
+ ],
86
+ [
87
+ 1.0,
88
+ 0.0,
89
+ 0.0,
90
+ 0.7250000000000001,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ 0.0
99
+ ],
100
+ [
101
+ 1.0,
102
+ 0.0,
103
+ 0.0,
104
+ 0.8125000000000002,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ 0.0
113
+ ],
114
+ [
115
+ 1.0,
116
+ 0.0,
117
+ 0.0,
118
+ 0.9000000000000001,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ 0.0
127
+ ],
128
+ [
129
+ 1.0,
130
+ 0.0,
131
+ 0.0,
132
+ 0.9875000000000003,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ 0.0
141
+ ],
142
+ [
143
+ 1.0,
144
+ 0.0,
145
+ 0.0,
146
+ 1.0750000000000002,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ 0.0
155
+ ],
156
+ [
157
+ 1.0,
158
+ 0.0,
159
+ 0.0,
160
+ 1.1625000000000003,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ 0.0
169
+ ],
170
+ [
171
+ 1.0,
172
+ 0.0,
173
+ 0.0,
174
+ 1.2500000000000002,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ 0.0
183
+ ],
184
+ [
185
+ 1.0,
186
+ 0.0,
187
+ 0.0,
188
+ 1.3375000000000001,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ 0.0
197
+ ],
198
+ [
199
+ 1.0,
200
+ 0.0,
201
+ 0.0,
202
+ 1.4250000000000003,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ 0.0
211
+ ],
212
+ [
213
+ 1.0,
214
+ 0.0,
215
+ 0.0,
216
+ 1.5125000000000004,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ 0.0
225
+ ]
226
+ ]
examples/camera_poses/test_camera_O.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ 0.2
15
+ ],
16
+ [
17
+ 1.0,
18
+ 0.0,
19
+ 0.0,
20
+ 0.0,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ 0.28750000000000003
29
+ ],
30
+ [
31
+ 1.0,
32
+ 0.0,
33
+ 0.0,
34
+ 0.0,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ 0.37500000000000006
43
+ ],
44
+ [
45
+ 1.0,
46
+ 0.0,
47
+ 0.0,
48
+ 0.0,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ 0.4625000000000001
57
+ ],
58
+ [
59
+ 1.0,
60
+ 0.0,
61
+ 0.0,
62
+ 0.0,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ 0.55
71
+ ],
72
+ [
73
+ 1.0,
74
+ 0.0,
75
+ 0.0,
76
+ 0.0,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ 0.6375000000000002
85
+ ],
86
+ [
87
+ 1.0,
88
+ 0.0,
89
+ 0.0,
90
+ 0.0,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ 0.7250000000000001
99
+ ],
100
+ [
101
+ 1.0,
102
+ 0.0,
103
+ 0.0,
104
+ 0.0,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ 0.8125000000000002
113
+ ],
114
+ [
115
+ 1.0,
116
+ 0.0,
117
+ 0.0,
118
+ 0.0,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ 0.9000000000000001
127
+ ],
128
+ [
129
+ 1.0,
130
+ 0.0,
131
+ 0.0,
132
+ 0.0,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ 0.9875000000000003
141
+ ],
142
+ [
143
+ 1.0,
144
+ 0.0,
145
+ 0.0,
146
+ 0.0,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ 1.0750000000000002
155
+ ],
156
+ [
157
+ 1.0,
158
+ 0.0,
159
+ 0.0,
160
+ 0.0,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ 1.1625000000000003
169
+ ],
170
+ [
171
+ 1.0,
172
+ 0.0,
173
+ 0.0,
174
+ 0.0,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ 1.2500000000000002
183
+ ],
184
+ [
185
+ 1.0,
186
+ 0.0,
187
+ 0.0,
188
+ 0.0,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ 1.3375000000000001
197
+ ],
198
+ [
199
+ 1.0,
200
+ 0.0,
201
+ 0.0,
202
+ 0.0,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ 1.4250000000000003
211
+ ],
212
+ [
213
+ 1.0,
214
+ 0.0,
215
+ 0.0,
216
+ 0.0,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ 1.5125000000000004
225
+ ]
226
+ ]
examples/camera_poses/test_camera_O_0.2x.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ 0.0
15
+ ],
16
+ [
17
+ 1.0,
18
+ 0.0,
19
+ 0.0,
20
+ 0.0,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ 0.022500000000000003
29
+ ],
30
+ [
31
+ 1.0,
32
+ 0.0,
33
+ 0.0,
34
+ 0.0,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ 0.045000000000000005
43
+ ],
44
+ [
45
+ 1.0,
46
+ 0.0,
47
+ 0.0,
48
+ 0.0,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ 0.0675
57
+ ],
58
+ [
59
+ 1.0,
60
+ 0.0,
61
+ 0.0,
62
+ 0.0,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ 0.09000000000000001
71
+ ],
72
+ [
73
+ 1.0,
74
+ 0.0,
75
+ 0.0,
76
+ 0.0,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ 0.11250000000000002
85
+ ],
86
+ [
87
+ 1.0,
88
+ 0.0,
89
+ 0.0,
90
+ 0.0,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ 0.135
99
+ ],
100
+ [
101
+ 1.0,
102
+ 0.0,
103
+ 0.0,
104
+ 0.0,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ 0.15750000000000003
113
+ ],
114
+ [
115
+ 1.0,
116
+ 0.0,
117
+ 0.0,
118
+ 0.0,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ 0.18000000000000002
127
+ ],
128
+ [
129
+ 1.0,
130
+ 0.0,
131
+ 0.0,
132
+ 0.0,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ 0.2025
141
+ ],
142
+ [
143
+ 1.0,
144
+ 0.0,
145
+ 0.0,
146
+ 0.0,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ 0.22500000000000003
155
+ ],
156
+ [
157
+ 1.0,
158
+ 0.0,
159
+ 0.0,
160
+ 0.0,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ 0.24750000000000003
169
+ ],
170
+ [
171
+ 1.0,
172
+ 0.0,
173
+ 0.0,
174
+ 0.0,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ 0.27
183
+ ],
184
+ [
185
+ 1.0,
186
+ 0.0,
187
+ 0.0,
188
+ 0.0,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ 0.29250000000000004
197
+ ],
198
+ [
199
+ 1.0,
200
+ 0.0,
201
+ 0.0,
202
+ 0.0,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ 0.31500000000000006
211
+ ],
212
+ [
213
+ 1.0,
214
+ 0.0,
215
+ 0.0,
216
+ 0.0,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ 0.3375
225
+ ]
226
+ ]
examples/camera_poses/test_camera_O_0.4x.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ 0.0
15
+ ],
16
+ [
17
+ 1.0,
18
+ 0.0,
19
+ 0.0,
20
+ 0.0,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ 0.045000000000000005
29
+ ],
30
+ [
31
+ 1.0,
32
+ 0.0,
33
+ 0.0,
34
+ 0.0,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ 0.09000000000000001
43
+ ],
44
+ [
45
+ 1.0,
46
+ 0.0,
47
+ 0.0,
48
+ 0.0,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ 0.135
57
+ ],
58
+ [
59
+ 1.0,
60
+ 0.0,
61
+ 0.0,
62
+ 0.0,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ 0.18000000000000002
71
+ ],
72
+ [
73
+ 1.0,
74
+ 0.0,
75
+ 0.0,
76
+ 0.0,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ 0.22500000000000003
85
+ ],
86
+ [
87
+ 1.0,
88
+ 0.0,
89
+ 0.0,
90
+ 0.0,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ 0.27
99
+ ],
100
+ [
101
+ 1.0,
102
+ 0.0,
103
+ 0.0,
104
+ 0.0,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ 0.31500000000000006
113
+ ],
114
+ [
115
+ 1.0,
116
+ 0.0,
117
+ 0.0,
118
+ 0.0,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ 0.36000000000000004
127
+ ],
128
+ [
129
+ 1.0,
130
+ 0.0,
131
+ 0.0,
132
+ 0.0,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ 0.405
141
+ ],
142
+ [
143
+ 1.0,
144
+ 0.0,
145
+ 0.0,
146
+ 0.0,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ 0.45000000000000007
155
+ ],
156
+ [
157
+ 1.0,
158
+ 0.0,
159
+ 0.0,
160
+ 0.0,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ 0.49500000000000005
169
+ ],
170
+ [
171
+ 1.0,
172
+ 0.0,
173
+ 0.0,
174
+ 0.0,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ 0.54
183
+ ],
184
+ [
185
+ 1.0,
186
+ 0.0,
187
+ 0.0,
188
+ 0.0,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ 0.5850000000000001
197
+ ],
198
+ [
199
+ 1.0,
200
+ 0.0,
201
+ 0.0,
202
+ 0.0,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ 0.6300000000000001
211
+ ],
212
+ [
213
+ 1.0,
214
+ 0.0,
215
+ 0.0,
216
+ 0.0,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ 0.675
225
+ ]
226
+ ]
examples/camera_poses/test_camera_O_1.0x.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ 0.0
15
+ ],
16
+ [
17
+ 1.0,
18
+ 0.0,
19
+ 0.0,
20
+ 0.0,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ 0.1125
29
+ ],
30
+ [
31
+ 1.0,
32
+ 0.0,
33
+ 0.0,
34
+ 0.0,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ 0.225
43
+ ],
44
+ [
45
+ 1.0,
46
+ 0.0,
47
+ 0.0,
48
+ 0.0,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ 0.3375
57
+ ],
58
+ [
59
+ 1.0,
60
+ 0.0,
61
+ 0.0,
62
+ 0.0,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ 0.45
71
+ ],
72
+ [
73
+ 1.0,
74
+ 0.0,
75
+ 0.0,
76
+ 0.0,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ 0.5625
85
+ ],
86
+ [
87
+ 1.0,
88
+ 0.0,
89
+ 0.0,
90
+ 0.0,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ 0.675
99
+ ],
100
+ [
101
+ 1.0,
102
+ 0.0,
103
+ 0.0,
104
+ 0.0,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ 0.7875
113
+ ],
114
+ [
115
+ 1.0,
116
+ 0.0,
117
+ 0.0,
118
+ 0.0,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ 0.9
127
+ ],
128
+ [
129
+ 1.0,
130
+ 0.0,
131
+ 0.0,
132
+ 0.0,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ 1.0125
141
+ ],
142
+ [
143
+ 1.0,
144
+ 0.0,
145
+ 0.0,
146
+ 0.0,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ 1.125
155
+ ],
156
+ [
157
+ 1.0,
158
+ 0.0,
159
+ 0.0,
160
+ 0.0,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ 1.2375
169
+ ],
170
+ [
171
+ 1.0,
172
+ 0.0,
173
+ 0.0,
174
+ 0.0,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ 1.35
183
+ ],
184
+ [
185
+ 1.0,
186
+ 0.0,
187
+ 0.0,
188
+ 0.0,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ 1.4625000000000001
197
+ ],
198
+ [
199
+ 1.0,
200
+ 0.0,
201
+ 0.0,
202
+ 0.0,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ 1.575
211
+ ],
212
+ [
213
+ 1.0,
214
+ 0.0,
215
+ 0.0,
216
+ 0.0,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ 1.6875
225
+ ]
226
+ ]
examples/camera_poses/test_camera_O_2.0x.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ 0.0
15
+ ],
16
+ [
17
+ 1.0,
18
+ 0.0,
19
+ 0.0,
20
+ 0.0,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ 0.225
29
+ ],
30
+ [
31
+ 1.0,
32
+ 0.0,
33
+ 0.0,
34
+ 0.0,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ 0.45
43
+ ],
44
+ [
45
+ 1.0,
46
+ 0.0,
47
+ 0.0,
48
+ 0.0,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ 0.675
57
+ ],
58
+ [
59
+ 1.0,
60
+ 0.0,
61
+ 0.0,
62
+ 0.0,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ 0.9
71
+ ],
72
+ [
73
+ 1.0,
74
+ 0.0,
75
+ 0.0,
76
+ 0.0,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ 1.125
85
+ ],
86
+ [
87
+ 1.0,
88
+ 0.0,
89
+ 0.0,
90
+ 0.0,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ 1.35
99
+ ],
100
+ [
101
+ 1.0,
102
+ 0.0,
103
+ 0.0,
104
+ 0.0,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ 1.575
113
+ ],
114
+ [
115
+ 1.0,
116
+ 0.0,
117
+ 0.0,
118
+ 0.0,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ 1.8
127
+ ],
128
+ [
129
+ 1.0,
130
+ 0.0,
131
+ 0.0,
132
+ 0.0,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ 2.025
141
+ ],
142
+ [
143
+ 1.0,
144
+ 0.0,
145
+ 0.0,
146
+ 0.0,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ 2.25
155
+ ],
156
+ [
157
+ 1.0,
158
+ 0.0,
159
+ 0.0,
160
+ 0.0,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ 2.475
169
+ ],
170
+ [
171
+ 1.0,
172
+ 0.0,
173
+ 0.0,
174
+ 0.0,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ 2.7
183
+ ],
184
+ [
185
+ 1.0,
186
+ 0.0,
187
+ 0.0,
188
+ 0.0,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ 2.9250000000000003
197
+ ],
198
+ [
199
+ 1.0,
200
+ 0.0,
201
+ 0.0,
202
+ 0.0,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ 3.15
211
+ ],
212
+ [
213
+ 1.0,
214
+ 0.0,
215
+ 0.0,
216
+ 0.0,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ 3.375
225
+ ]
226
+ ]
examples/camera_poses/test_camera_R.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ -0.2,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ 0.0
15
+ ],
16
+ [
17
+ 1.0,
18
+ 0.0,
19
+ 0.0,
20
+ -0.28750000000000003,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ 0.0
29
+ ],
30
+ [
31
+ 1.0,
32
+ 0.0,
33
+ 0.0,
34
+ -0.37500000000000006,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ 0.0
43
+ ],
44
+ [
45
+ 1.0,
46
+ 0.0,
47
+ 0.0,
48
+ -0.4625000000000001,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ 0.0
57
+ ],
58
+ [
59
+ 1.0,
60
+ 0.0,
61
+ 0.0,
62
+ -0.55,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ 0.0
71
+ ],
72
+ [
73
+ 1.0,
74
+ 0.0,
75
+ 0.0,
76
+ -0.6375000000000002,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ 0.0
85
+ ],
86
+ [
87
+ 1.0,
88
+ 0.0,
89
+ 0.0,
90
+ -0.7250000000000001,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ 0.0
99
+ ],
100
+ [
101
+ 1.0,
102
+ 0.0,
103
+ 0.0,
104
+ -0.8125000000000002,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ 0.0
113
+ ],
114
+ [
115
+ 1.0,
116
+ 0.0,
117
+ 0.0,
118
+ -0.9000000000000001,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ 0.0
127
+ ],
128
+ [
129
+ 1.0,
130
+ 0.0,
131
+ 0.0,
132
+ -0.9875000000000003,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ 0.0
141
+ ],
142
+ [
143
+ 1.0,
144
+ 0.0,
145
+ 0.0,
146
+ -1.0750000000000002,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ 0.0
155
+ ],
156
+ [
157
+ 1.0,
158
+ 0.0,
159
+ 0.0,
160
+ -1.1625000000000003,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ 0.0
169
+ ],
170
+ [
171
+ 1.0,
172
+ 0.0,
173
+ 0.0,
174
+ -1.2500000000000002,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ 0.0
183
+ ],
184
+ [
185
+ 1.0,
186
+ 0.0,
187
+ 0.0,
188
+ -1.3375000000000001,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ 0.0
197
+ ],
198
+ [
199
+ 1.0,
200
+ 0.0,
201
+ 0.0,
202
+ -1.4250000000000003,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ 0.0
211
+ ],
212
+ [
213
+ 1.0,
214
+ 0.0,
215
+ 0.0,
216
+ -1.5125000000000004,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ 0.0
225
+ ]
226
+ ]
examples/camera_poses/test_camera_Round-RI-120.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ 1.8
15
+ ],
16
+ [
17
+ 0.9914448613738104,
18
+ 0.0,
19
+ 0.13052619222005157,
20
+ 0.13052619222005157,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ -0.13052619222005157,
26
+ 0.0,
27
+ 0.9914448613738104,
28
+ 1.7914448613738103
29
+ ],
30
+ [
31
+ 0.9659258262890683,
32
+ 0.0,
33
+ 0.25881904510252074,
34
+ 0.25881904510252074,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ -0.25881904510252074,
40
+ 0.0,
41
+ 0.9659258262890683,
42
+ 1.7659258262890685
43
+ ],
44
+ [
45
+ 0.9238795325112867,
46
+ 0.0,
47
+ 0.3826834323650898,
48
+ 0.3826834323650898,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ -0.3826834323650898,
54
+ 0.0,
55
+ 0.9238795325112867,
56
+ 1.7238795325112868
57
+ ],
58
+ [
59
+ 0.8660254037844387,
60
+ 0.0,
61
+ 0.49999999999999994,
62
+ 0.49999999999999994,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ -0.49999999999999994,
68
+ 0.0,
69
+ 0.8660254037844387,
70
+ 1.6660254037844386
71
+ ],
72
+ [
73
+ 0.7933533402912353,
74
+ 0.0,
75
+ 0.6087614290087205,
76
+ 0.6087614290087205,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ -0.6087614290087205,
82
+ 0.0,
83
+ 0.7933533402912353,
84
+ 1.5933533402912352
85
+ ],
86
+ [
87
+ 0.7071067811865476,
88
+ 0.0,
89
+ 0.7071067811865476,
90
+ 0.7071067811865476,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ -0.7071067811865476,
96
+ 0.0,
97
+ 0.7071067811865476,
98
+ 1.5071067811865477
99
+ ],
100
+ [
101
+ 0.6087614290087207,
102
+ 0.0,
103
+ 0.7933533402912352,
104
+ 0.7933533402912352,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ -0.7933533402912352,
110
+ 0.0,
111
+ 0.6087614290087207,
112
+ 1.4087614290087207
113
+ ],
114
+ [
115
+ 0.5000000000000001,
116
+ 0.0,
117
+ 0.8660254037844386,
118
+ 0.8660254037844386,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ -0.8660254037844386,
124
+ 0.0,
125
+ 0.5000000000000001,
126
+ 1.3000000000000003
127
+ ],
128
+ [
129
+ 0.38268343236508984,
130
+ 0.0,
131
+ 0.9238795325112867,
132
+ 0.9238795325112867,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ -0.9238795325112867,
138
+ 0.0,
139
+ 0.38268343236508984,
140
+ 1.1826834323650899
141
+ ],
142
+ [
143
+ 0.25881904510252096,
144
+ 0.0,
145
+ 0.9659258262890682,
146
+ 0.9659258262890682,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ -0.9659258262890682,
152
+ 0.0,
153
+ 0.25881904510252096,
154
+ 1.058819045102521
155
+ ],
156
+ [
157
+ 0.1305261922200517,
158
+ 0.0,
159
+ 0.9914448613738104,
160
+ 0.9914448613738104,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ -0.9914448613738104,
166
+ 0.0,
167
+ 0.1305261922200517,
168
+ 0.9305261922200517
169
+ ],
170
+ [
171
+ 6.123233995736766e-17,
172
+ 0.0,
173
+ 1.0,
174
+ 1.0,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ -1.0,
180
+ 0.0,
181
+ 6.123233995736766e-17,
182
+ 0.8000000000000002
183
+ ],
184
+ [
185
+ -0.13052619222005138,
186
+ 0.0,
187
+ 0.9914448613738105,
188
+ 0.9914448613738105,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ -0.9914448613738105,
194
+ 0.0,
195
+ -0.13052619222005138,
196
+ 0.6694738077799487
197
+ ],
198
+ [
199
+ -0.25881904510252063,
200
+ 0.0,
201
+ 0.9659258262890683,
202
+ 0.9659258262890683,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ -0.9659258262890683,
208
+ 0.0,
209
+ -0.25881904510252063,
210
+ 0.5411809548974794
211
+ ],
212
+ [
213
+ -0.3826834323650895,
214
+ 0.0,
215
+ 0.9238795325112868,
216
+ 0.9238795325112868,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ -0.9238795325112868,
222
+ 0.0,
223
+ -0.3826834323650895,
224
+ 0.41731656763491054
225
+ ]
226
+ ]
examples/camera_poses/test_camera_Round-RI.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ 1.7000000000000002
15
+ ],
16
+ [
17
+ 0.9807852804032304,
18
+ 0.0,
19
+ 0.19509032201612825,
20
+ 0.17558128981451543,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ -0.19509032201612825,
26
+ 0.0,
27
+ 0.9807852804032304,
28
+ 1.6827067523629076
29
+ ],
30
+ [
31
+ 0.9238795325112867,
32
+ 0.0,
33
+ 0.3826834323650898,
34
+ 0.3444150891285808,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ -0.3826834323650898,
40
+ 0.0,
41
+ 0.9238795325112867,
42
+ 1.631491579260158
43
+ ],
44
+ [
45
+ 0.8314696123025452,
46
+ 0.0,
47
+ 0.5555702330196022,
48
+ 0.500013209717642,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ -0.5555702330196022,
54
+ 0.0,
55
+ 0.8314696123025452,
56
+ 1.5483226510722907
57
+ ],
58
+ [
59
+ 0.7071067811865476,
60
+ 0.0,
61
+ 0.7071067811865476,
62
+ 0.6363961030678928,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ -0.7071067811865476,
68
+ 0.0,
69
+ 0.7071067811865476,
70
+ 1.436396103067893
71
+ ],
72
+ [
73
+ 0.5555702330196023,
74
+ 0.0,
75
+ 0.8314696123025452,
76
+ 0.7483226510722907,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ -0.8314696123025452,
82
+ 0.0,
83
+ 0.5555702330196023,
84
+ 1.3000132097176422
85
+ ],
86
+ [
87
+ 0.38268343236508984,
88
+ 0.0,
89
+ 0.9238795325112867,
90
+ 0.831491579260158,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ -0.9238795325112867,
96
+ 0.0,
97
+ 0.38268343236508984,
98
+ 1.144415089128581
99
+ ],
100
+ [
101
+ 0.19509032201612833,
102
+ 0.0,
103
+ 0.9807852804032304,
104
+ 0.8827067523629074,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ -0.9807852804032304,
110
+ 0.0,
111
+ 0.19509032201612833,
112
+ 0.9755812898145155
113
+ ],
114
+ [
115
+ 6.123233995736766e-17,
116
+ 0.0,
117
+ 1.0,
118
+ 0.9,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ -1.0,
124
+ 0.0,
125
+ 6.123233995736766e-17,
126
+ 0.8
127
+ ],
128
+ [
129
+ -0.1950903220161282,
130
+ 0.0,
131
+ 0.9807852804032304,
132
+ 0.8827067523629074,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ -0.9807852804032304,
138
+ 0.0,
139
+ -0.1950903220161282,
140
+ 0.6244187101854847
141
+ ],
142
+ [
143
+ -0.3826834323650897,
144
+ 0.0,
145
+ 0.9238795325112867,
146
+ 0.831491579260158,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ -0.9238795325112867,
152
+ 0.0,
153
+ -0.3826834323650897,
154
+ 0.4555849108714193
155
+ ],
156
+ [
157
+ -0.555570233019602,
158
+ 0.0,
159
+ 0.8314696123025453,
160
+ 0.7483226510722908,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ -0.8314696123025453,
166
+ 0.0,
167
+ -0.555570233019602,
168
+ 0.2999867902823583
169
+ ],
170
+ [
171
+ -0.7071067811865475,
172
+ 0.0,
173
+ 0.7071067811865476,
174
+ 0.6363961030678928,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ -0.7071067811865476,
180
+ 0.0,
181
+ -0.7071067811865475,
182
+ 0.1636038969321073
183
+ ],
184
+ [
185
+ -0.8314696123025453,
186
+ 0.0,
187
+ 0.5555702330196022,
188
+ 0.500013209717642,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ -0.5555702330196022,
194
+ 0.0,
195
+ -0.8314696123025453,
196
+ 0.051677348927709255
197
+ ],
198
+ [
199
+ -0.9238795325112867,
200
+ 0.0,
201
+ 0.3826834323650899,
202
+ 0.34441508912858093,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ -0.3826834323650899,
208
+ 0.0,
209
+ -0.9238795325112867,
210
+ -0.031491579260158
211
+ ],
212
+ [
213
+ -0.9807852804032304,
214
+ 0.0,
215
+ 0.1950903220161286,
216
+ 0.17558128981451576,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ -0.1950903220161286,
222
+ 0.0,
223
+ -0.9807852804032304,
224
+ -0.08270675236290737
225
+ ]
226
+ ]
examples/camera_poses/test_camera_Round-RI_90.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ 1.7000000000000002
15
+ ],
16
+ [
17
+ 0.9951847266721969,
18
+ 0.0,
19
+ 0.0980171403295606,
20
+ 0.08821542629660455,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ -0.0980171403295606,
26
+ 0.0,
27
+ 0.9951847266721969,
28
+ 1.6956662540049772
29
+ ],
30
+ [
31
+ 0.9807852804032304,
32
+ 0.0,
33
+ 0.19509032201612825,
34
+ 0.17558128981451543,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ -0.19509032201612825,
40
+ 0.0,
41
+ 0.9807852804032304,
42
+ 1.6827067523629076
43
+ ],
44
+ [
45
+ 0.9569403357322088,
46
+ 0.0,
47
+ 0.29028467725446233,
48
+ 0.2612562095290161,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ -0.29028467725446233,
54
+ 0.0,
55
+ 0.9569403357322088,
56
+ 1.661246302158988
57
+ ],
58
+ [
59
+ 0.9238795325112867,
60
+ 0.0,
61
+ 0.3826834323650898,
62
+ 0.3444150891285808,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ -0.3826834323650898,
68
+ 0.0,
69
+ 0.9238795325112867,
70
+ 1.631491579260158
71
+ ],
72
+ [
73
+ 0.881921264348355,
74
+ 0.0,
75
+ 0.47139673682599764,
76
+ 0.4242570631433979,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ -0.47139673682599764,
82
+ 0.0,
83
+ 0.881921264348355,
84
+ 1.5937291379135194
85
+ ],
86
+ [
87
+ 0.8314696123025452,
88
+ 0.0,
89
+ 0.5555702330196022,
90
+ 0.500013209717642,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ -0.5555702330196022,
96
+ 0.0,
97
+ 0.8314696123025452,
98
+ 1.5483226510722907
99
+ ],
100
+ [
101
+ 0.773010453362737,
102
+ 0.0,
103
+ 0.6343932841636455,
104
+ 0.5709539557472809,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ -0.6343932841636455,
110
+ 0.0,
111
+ 0.773010453362737,
112
+ 1.4957094080264635
113
+ ],
114
+ [
115
+ 0.7071067811865476,
116
+ 0.0,
117
+ 0.7071067811865476,
118
+ 0.6363961030678928,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ -0.7071067811865476,
124
+ 0.0,
125
+ 0.7071067811865476,
126
+ 1.436396103067893
127
+ ],
128
+ [
129
+ 0.6343932841636455,
130
+ 0.0,
131
+ 0.7730104533627369,
132
+ 0.6957094080264632,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ -0.7730104533627369,
138
+ 0.0,
139
+ 0.6343932841636455,
140
+ 1.370953955747281
141
+ ],
142
+ [
143
+ 0.5555702330196023,
144
+ 0.0,
145
+ 0.8314696123025452,
146
+ 0.7483226510722907,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ -0.8314696123025452,
152
+ 0.0,
153
+ 0.5555702330196023,
154
+ 1.3000132097176422
155
+ ],
156
+ [
157
+ 0.4713967368259978,
158
+ 0.0,
159
+ 0.8819212643483549,
160
+ 0.7937291379135195,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ -0.8819212643483549,
166
+ 0.0,
167
+ 0.4713967368259978,
168
+ 1.2242570631433982
169
+ ],
170
+ [
171
+ 0.38268343236508984,
172
+ 0.0,
173
+ 0.9238795325112867,
174
+ 0.831491579260158,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ -0.9238795325112867,
180
+ 0.0,
181
+ 0.38268343236508984,
182
+ 1.144415089128581
183
+ ],
184
+ [
185
+ 0.29028467725446233,
186
+ 0.0,
187
+ 0.9569403357322089,
188
+ 0.861246302158988,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ -0.9569403357322089,
194
+ 0.0,
195
+ 0.29028467725446233,
196
+ 1.0612562095290161
197
+ ],
198
+ [
199
+ 0.19509032201612833,
200
+ 0.0,
201
+ 0.9807852804032304,
202
+ 0.8827067523629074,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ -0.9807852804032304,
208
+ 0.0,
209
+ 0.19509032201612833,
210
+ 0.9755812898145155
211
+ ],
212
+ [
213
+ 0.09801714032956077,
214
+ 0.0,
215
+ 0.9951847266721968,
216
+ 0.8956662540049771,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ -0.9951847266721968,
222
+ 0.0,
223
+ 0.09801714032956077,
224
+ 0.8882154262966048
225
+ ]
226
+ ]
examples/camera_poses/test_camera_Round-ZoomIn.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ 0.81
15
+ ],
16
+ [
17
+ 0.9807852804032304,
18
+ 0.0,
19
+ 0.19509032201612825,
20
+ 0.0019509032201612826,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.0,
25
+ -0.19509032201612825,
26
+ 0.0,
27
+ 0.9807852804032304,
28
+ 0.8098078528040323
29
+ ],
30
+ [
31
+ 0.9238795325112867,
32
+ 0.0,
33
+ 0.3826834323650898,
34
+ 0.003826834323650898,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.0,
39
+ -0.3826834323650898,
40
+ 0.0,
41
+ 0.9238795325112867,
42
+ 0.8092387953251129
43
+ ],
44
+ [
45
+ 0.8314696123025452,
46
+ 0.0,
47
+ 0.5555702330196022,
48
+ 0.005555702330196022,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.0,
53
+ -0.5555702330196022,
54
+ 0.0,
55
+ 0.8314696123025452,
56
+ 0.8083146961230255
57
+ ],
58
+ [
59
+ 0.7071067811865476,
60
+ 0.0,
61
+ 0.7071067811865476,
62
+ 0.007071067811865476,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.0,
67
+ -0.7071067811865476,
68
+ 0.0,
69
+ 0.7071067811865476,
70
+ 0.8070710678118656
71
+ ],
72
+ [
73
+ 0.5555702330196023,
74
+ 0.0,
75
+ 0.8314696123025452,
76
+ 0.008314696123025453,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.0,
81
+ -0.8314696123025452,
82
+ 0.0,
83
+ 0.5555702330196023,
84
+ 0.805555702330196
85
+ ],
86
+ [
87
+ 0.38268343236508984,
88
+ 0.0,
89
+ 0.9238795325112867,
90
+ 0.009238795325112868,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.0,
95
+ -0.9238795325112867,
96
+ 0.0,
97
+ 0.38268343236508984,
98
+ 0.803826834323651
99
+ ],
100
+ [
101
+ 0.19509032201612833,
102
+ 0.0,
103
+ 0.9807852804032304,
104
+ 0.009807852804032305,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.0,
109
+ -0.9807852804032304,
110
+ 0.0,
111
+ 0.19509032201612833,
112
+ 0.8019509032201614
113
+ ],
114
+ [
115
+ 0.19509032201612833,
116
+ 0.0,
117
+ 0.9807852804032304,
118
+ 0.009807852804032305,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.0,
123
+ -0.9807852804032304,
124
+ 0.0,
125
+ 0.19509032201612833,
126
+ 0.8019509032201614
127
+ ],
128
+ [
129
+ 0.19509032201612833,
130
+ 0.0,
131
+ 0.9807852804032304,
132
+ 0.009807852804032305,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.0,
137
+ -0.9807852804032304,
138
+ 0.0,
139
+ 0.19509032201612833,
140
+ 0.7019509032201614
141
+ ],
142
+ [
143
+ 0.19509032201612833,
144
+ 0.0,
145
+ 0.9807852804032304,
146
+ 0.009807852804032305,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 0.0,
151
+ -0.9807852804032304,
152
+ 0.0,
153
+ 0.19509032201612833,
154
+ 0.6019509032201614
155
+ ],
156
+ [
157
+ 0.19509032201612833,
158
+ 0.0,
159
+ 0.9807852804032304,
160
+ 0.009807852804032305,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 0.0,
165
+ -0.9807852804032304,
166
+ 0.0,
167
+ 0.19509032201612833,
168
+ 0.5019509032201613
169
+ ],
170
+ [
171
+ 0.19509032201612833,
172
+ 0.0,
173
+ 0.9807852804032304,
174
+ 0.009807852804032305,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 0.0,
179
+ -0.9807852804032304,
180
+ 0.0,
181
+ 0.19509032201612833,
182
+ 0.4019509032201613
183
+ ],
184
+ [
185
+ 0.19509032201612833,
186
+ 0.0,
187
+ 0.9807852804032304,
188
+ 0.009807852804032305,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 0.0,
193
+ -0.9807852804032304,
194
+ 0.0,
195
+ 0.19509032201612833,
196
+ 0.3019509032201613
197
+ ],
198
+ [
199
+ 0.19509032201612833,
200
+ 0.0,
201
+ 0.9807852804032304,
202
+ 0.009807852804032305,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 0.0,
207
+ -0.9807852804032304,
208
+ 0.0,
209
+ 0.19509032201612833,
210
+ 0.2019509032201613
211
+ ],
212
+ [
213
+ 0.19509032201612833,
214
+ 0.0,
215
+ 0.9807852804032304,
216
+ 0.009807852804032305,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 0.0,
221
+ -0.9807852804032304,
222
+ 0.0,
223
+ 0.19509032201612833,
224
+ 0.10195090322016129
225
+ ]
226
+ ]
examples/camera_poses/test_camera_SPIN-ACW-60.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ 0.0
15
+ ],
16
+ [
17
+ 0.9978589232386035,
18
+ -0.06540312923014306,
19
+ 0.0,
20
+ 0.0,
21
+ 0.06540312923014306,
22
+ 0.9978589232386035,
23
+ 0.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ 0.0
29
+ ],
30
+ [
31
+ 0.9914448613738104,
32
+ -0.13052619222005157,
33
+ 0.0,
34
+ 0.0,
35
+ 0.13052619222005157,
36
+ 0.9914448613738104,
37
+ 0.0,
38
+ 0.0,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ 0.0
43
+ ],
44
+ [
45
+ 0.9807852804032304,
46
+ -0.19509032201612825,
47
+ 0.0,
48
+ 0.0,
49
+ 0.19509032201612825,
50
+ 0.9807852804032304,
51
+ 0.0,
52
+ 0.0,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ 0.0
57
+ ],
58
+ [
59
+ 0.9659258262890683,
60
+ -0.25881904510252074,
61
+ 0.0,
62
+ 0.0,
63
+ 0.25881904510252074,
64
+ 0.9659258262890683,
65
+ 0.0,
66
+ 0.0,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ 0.0
71
+ ],
72
+ [
73
+ 0.9469301294951057,
74
+ -0.32143946530316153,
75
+ 0.0,
76
+ 0.0,
77
+ 0.32143946530316153,
78
+ 0.9469301294951057,
79
+ 0.0,
80
+ 0.0,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ 0.0
85
+ ],
86
+ [
87
+ 0.9238795325112867,
88
+ -0.3826834323650898,
89
+ 0.0,
90
+ 0.0,
91
+ 0.3826834323650898,
92
+ 0.9238795325112867,
93
+ 0.0,
94
+ 0.0,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ 0.0
99
+ ],
100
+ [
101
+ 0.8968727415326884,
102
+ -0.44228869021900125,
103
+ 0.0,
104
+ 0.0,
105
+ 0.44228869021900125,
106
+ 0.8968727415326884,
107
+ 0.0,
108
+ 0.0,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ 0.0
113
+ ],
114
+ [
115
+ 0.8660254037844387,
116
+ -0.49999999999999994,
117
+ 0.0,
118
+ 0.0,
119
+ 0.49999999999999994,
120
+ 0.8660254037844387,
121
+ 0.0,
122
+ 0.0,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ 0.0
127
+ ],
128
+ [
129
+ 0.8314696123025452,
130
+ -0.5555702330196022,
131
+ 0.0,
132
+ 0.0,
133
+ 0.5555702330196022,
134
+ 0.8314696123025452,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ 0.0
141
+ ],
142
+ [
143
+ 0.7933533402912353,
144
+ -0.6087614290087205,
145
+ 0.0,
146
+ 0.0,
147
+ 0.6087614290087205,
148
+ 0.7933533402912353,
149
+ 0.0,
150
+ 0.0,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ 0.0
155
+ ],
156
+ [
157
+ 0.7518398074789774,
158
+ -0.6593458151000688,
159
+ 0.0,
160
+ 0.0,
161
+ 0.6593458151000688,
162
+ 0.7518398074789774,
163
+ 0.0,
164
+ 0.0,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ 0.0
169
+ ],
170
+ [
171
+ 0.7071067811865476,
172
+ -0.7071067811865476,
173
+ 0.0,
174
+ 0.0,
175
+ 0.7071067811865476,
176
+ 0.7071067811865476,
177
+ 0.0,
178
+ 0.0,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ 0.0
183
+ ],
184
+ [
185
+ 0.659345815100069,
186
+ -0.7518398074789773,
187
+ 0.0,
188
+ 0.0,
189
+ 0.7518398074789773,
190
+ 0.659345815100069,
191
+ 0.0,
192
+ 0.0,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ 0.0
197
+ ],
198
+ [
199
+ 0.6087614290087207,
200
+ -0.7933533402912352,
201
+ 0.0,
202
+ 0.0,
203
+ 0.7933533402912352,
204
+ 0.6087614290087207,
205
+ 0.0,
206
+ 0.0,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ 0.0
211
+ ],
212
+ [
213
+ 0.5555702330196024,
214
+ -0.8314696123025451,
215
+ 0.0,
216
+ 0.0,
217
+ 0.8314696123025451,
218
+ 0.5555702330196024,
219
+ 0.0,
220
+ 0.0,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ 0.0
225
+ ]
226
+ ]
examples/camera_poses/test_camera_SPIN-CW-60.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.0,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ 0.0
15
+ ],
16
+ [
17
+ 0.9978589232386035,
18
+ 0.06540312923014306,
19
+ 0.0,
20
+ 0.0,
21
+ -0.06540312923014306,
22
+ 0.9978589232386035,
23
+ 0.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ 0.0
29
+ ],
30
+ [
31
+ 0.9914448613738104,
32
+ 0.13052619222005157,
33
+ 0.0,
34
+ 0.0,
35
+ -0.13052619222005157,
36
+ 0.9914448613738104,
37
+ 0.0,
38
+ 0.0,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ 0.0
43
+ ],
44
+ [
45
+ 0.9807852804032304,
46
+ 0.19509032201612825,
47
+ 0.0,
48
+ 0.0,
49
+ -0.19509032201612825,
50
+ 0.9807852804032304,
51
+ 0.0,
52
+ 0.0,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ 0.0
57
+ ],
58
+ [
59
+ 0.9659258262890683,
60
+ 0.25881904510252074,
61
+ 0.0,
62
+ 0.0,
63
+ -0.25881904510252074,
64
+ 0.9659258262890683,
65
+ 0.0,
66
+ 0.0,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ 0.0
71
+ ],
72
+ [
73
+ 0.9469301294951057,
74
+ 0.32143946530316153,
75
+ 0.0,
76
+ 0.0,
77
+ -0.32143946530316153,
78
+ 0.9469301294951057,
79
+ 0.0,
80
+ 0.0,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ 0.0
85
+ ],
86
+ [
87
+ 0.9238795325112867,
88
+ 0.3826834323650898,
89
+ 0.0,
90
+ 0.0,
91
+ -0.3826834323650898,
92
+ 0.9238795325112867,
93
+ 0.0,
94
+ 0.0,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ 0.0
99
+ ],
100
+ [
101
+ 0.8968727415326884,
102
+ 0.44228869021900125,
103
+ 0.0,
104
+ 0.0,
105
+ -0.44228869021900125,
106
+ 0.8968727415326884,
107
+ 0.0,
108
+ 0.0,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ 0.0
113
+ ],
114
+ [
115
+ 0.8660254037844387,
116
+ 0.49999999999999994,
117
+ 0.0,
118
+ 0.0,
119
+ -0.49999999999999994,
120
+ 0.8660254037844387,
121
+ 0.0,
122
+ 0.0,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ 0.0
127
+ ],
128
+ [
129
+ 0.8314696123025452,
130
+ 0.5555702330196022,
131
+ 0.0,
132
+ 0.0,
133
+ -0.5555702330196022,
134
+ 0.8314696123025452,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ 0.0
141
+ ],
142
+ [
143
+ 0.7933533402912353,
144
+ 0.6087614290087205,
145
+ 0.0,
146
+ 0.0,
147
+ -0.6087614290087205,
148
+ 0.7933533402912353,
149
+ 0.0,
150
+ 0.0,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ 0.0
155
+ ],
156
+ [
157
+ 0.7518398074789774,
158
+ 0.6593458151000688,
159
+ 0.0,
160
+ 0.0,
161
+ -0.6593458151000688,
162
+ 0.7518398074789774,
163
+ 0.0,
164
+ 0.0,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ 0.0
169
+ ],
170
+ [
171
+ 0.7071067811865476,
172
+ 0.7071067811865476,
173
+ 0.0,
174
+ 0.0,
175
+ -0.7071067811865476,
176
+ 0.7071067811865476,
177
+ 0.0,
178
+ 0.0,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ 0.0
183
+ ],
184
+ [
185
+ 0.659345815100069,
186
+ 0.7518398074789773,
187
+ 0.0,
188
+ 0.0,
189
+ -0.7518398074789773,
190
+ 0.659345815100069,
191
+ 0.0,
192
+ 0.0,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ 0.0
197
+ ],
198
+ [
199
+ 0.6087614290087207,
200
+ 0.7933533402912352,
201
+ 0.0,
202
+ 0.0,
203
+ -0.7933533402912352,
204
+ 0.6087614290087207,
205
+ 0.0,
206
+ 0.0,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ 0.0
211
+ ],
212
+ [
213
+ 0.5555702330196024,
214
+ 0.8314696123025451,
215
+ 0.0,
216
+ 0.0,
217
+ -0.8314696123025451,
218
+ 0.5555702330196024,
219
+ 0.0,
220
+ 0.0,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ 0.0
225
+ ]
226
+ ]
examples/camera_poses/test_camera_U.json ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ 1.0,
4
+ 0.0,
5
+ 0.0,
6
+ 0.0,
7
+ 0.0,
8
+ 1.0,
9
+ 0.0,
10
+ 0.2,
11
+ 0.0,
12
+ 0.0,
13
+ 1.0,
14
+ 0.0
15
+ ],
16
+ [
17
+ 1.0,
18
+ 0.0,
19
+ 0.0,
20
+ 0.0,
21
+ 0.0,
22
+ 1.0,
23
+ 0.0,
24
+ 0.28750000000000003,
25
+ 0.0,
26
+ 0.0,
27
+ 1.0,
28
+ 0.0
29
+ ],
30
+ [
31
+ 1.0,
32
+ 0.0,
33
+ 0.0,
34
+ 0.0,
35
+ 0.0,
36
+ 1.0,
37
+ 0.0,
38
+ 0.37500000000000006,
39
+ 0.0,
40
+ 0.0,
41
+ 1.0,
42
+ 0.0
43
+ ],
44
+ [
45
+ 1.0,
46
+ 0.0,
47
+ 0.0,
48
+ 0.0,
49
+ 0.0,
50
+ 1.0,
51
+ 0.0,
52
+ 0.4625000000000001,
53
+ 0.0,
54
+ 0.0,
55
+ 1.0,
56
+ 0.0
57
+ ],
58
+ [
59
+ 1.0,
60
+ 0.0,
61
+ 0.0,
62
+ 0.0,
63
+ 0.0,
64
+ 1.0,
65
+ 0.0,
66
+ 0.55,
67
+ 0.0,
68
+ 0.0,
69
+ 1.0,
70
+ 0.0
71
+ ],
72
+ [
73
+ 1.0,
74
+ 0.0,
75
+ 0.0,
76
+ 0.0,
77
+ 0.0,
78
+ 1.0,
79
+ 0.0,
80
+ 0.6375000000000002,
81
+ 0.0,
82
+ 0.0,
83
+ 1.0,
84
+ 0.0
85
+ ],
86
+ [
87
+ 1.0,
88
+ 0.0,
89
+ 0.0,
90
+ 0.0,
91
+ 0.0,
92
+ 1.0,
93
+ 0.0,
94
+ 0.7250000000000001,
95
+ 0.0,
96
+ 0.0,
97
+ 1.0,
98
+ 0.0
99
+ ],
100
+ [
101
+ 1.0,
102
+ 0.0,
103
+ 0.0,
104
+ 0.0,
105
+ 0.0,
106
+ 1.0,
107
+ 0.0,
108
+ 0.8125000000000002,
109
+ 0.0,
110
+ 0.0,
111
+ 1.0,
112
+ 0.0
113
+ ],
114
+ [
115
+ 1.0,
116
+ 0.0,
117
+ 0.0,
118
+ 0.0,
119
+ 0.0,
120
+ 1.0,
121
+ 0.0,
122
+ 0.9000000000000001,
123
+ 0.0,
124
+ 0.0,
125
+ 1.0,
126
+ 0.0
127
+ ],
128
+ [
129
+ 1.0,
130
+ 0.0,
131
+ 0.0,
132
+ 0.0,
133
+ 0.0,
134
+ 1.0,
135
+ 0.0,
136
+ 0.9875000000000003,
137
+ 0.0,
138
+ 0.0,
139
+ 1.0,
140
+ 0.0
141
+ ],
142
+ [
143
+ 1.0,
144
+ 0.0,
145
+ 0.0,
146
+ 0.0,
147
+ 0.0,
148
+ 1.0,
149
+ 0.0,
150
+ 1.0750000000000002,
151
+ 0.0,
152
+ 0.0,
153
+ 1.0,
154
+ 0.0
155
+ ],
156
+ [
157
+ 1.0,
158
+ 0.0,
159
+ 0.0,
160
+ 0.0,
161
+ 0.0,
162
+ 1.0,
163
+ 0.0,
164
+ 1.1625000000000003,
165
+ 0.0,
166
+ 0.0,
167
+ 1.0,
168
+ 0.0
169
+ ],
170
+ [
171
+ 1.0,
172
+ 0.0,
173
+ 0.0,
174
+ 0.0,
175
+ 0.0,
176
+ 1.0,
177
+ 0.0,
178
+ 1.2500000000000002,
179
+ 0.0,
180
+ 0.0,
181
+ 1.0,
182
+ 0.0
183
+ ],
184
+ [
185
+ 1.0,
186
+ 0.0,
187
+ 0.0,
188
+ 0.0,
189
+ 0.0,
190
+ 1.0,
191
+ 0.0,
192
+ 1.3375000000000001,
193
+ 0.0,
194
+ 0.0,
195
+ 1.0,
196
+ 0.0
197
+ ],
198
+ [
199
+ 1.0,
200
+ 0.0,
201
+ 0.0,
202
+ 0.0,
203
+ 0.0,
204
+ 1.0,
205
+ 0.0,
206
+ 1.4250000000000003,
207
+ 0.0,
208
+ 0.0,
209
+ 1.0,
210
+ 0.0
211
+ ],
212
+ [
213
+ 1.0,
214
+ 0.0,
215
+ 0.0,
216
+ 0.0,
217
+ 0.0,
218
+ 1.0,
219
+ 0.0,
220
+ 1.5125000000000004,
221
+ 0.0,
222
+ 0.0,
223
+ 1.0,
224
+ 0.0
225
+ ]
226
+ ]
examples/camera_poses/test_camera_b133a504fc90a2d1.json ADDED
@@ -0,0 +1 @@
 
 
1
+ [[0.9999999403953552, -3.2563843288535566e-10, 8.624932434919685e-10, -5.431840754965833e-09, -3.2563843288535566e-10, 1.0, -7.078895802870022e-10, -2.678919752696629e-09, 8.624932434919685e-10, -7.078895802870022e-10, 1.0, 7.303774474110014e-09], [0.9999998807907104, 0.00026603759033605456, -0.0003414043167140335, -0.030107486993074417, -0.0002659278397914022, 0.9999999403953552, 0.00032293255208060145, 0.011978899128735065, 0.0003414914826862514, -0.0003228419227525592, 0.9999999403953552, -0.07893969118595123], [0.9999994039535522, -0.0006866907933726907, -0.0008186722989194095, -0.050785429775714874, 0.0006877407431602478, 0.9999989867210388, 0.0012827541213482618, 0.023323407396674156, 0.0008177922572940588, -0.0012833180371671915, 0.9999988675117493, -0.1486724615097046], [0.999999463558197, -0.0005364732351154089, -0.0008647883078083396, -0.0673225075006485, 0.0005379383219406009, 0.9999984502792358, 0.0016958877677097917, 0.03169107437133789, 0.0008638793369755149, -0.0016963522648438811, 0.9999982118606567, -0.21477271616458893], [0.9999995231628418, -0.0005853328038938344, 0.000731398060452193, -0.08539554476737976, 0.0005843221442773938, 0.9999988675117493, 0.0013807439245283604, 0.037947509437799454, -0.0007322035962715745, -0.0013803173787891865, 0.9999987483024597, -0.2858566641807556], [0.9999935030937195, -0.0007727851625531912, 0.00352613371796906, -0.10591986775398254, 0.0007684561423957348, 0.9999989867210388, 0.0012290359009057283, 0.0426139310002327, -0.003527079476043582, -0.0012263187672942877, 0.999993085861206, -0.3645589053630829], [0.9999805688858032, -0.0012497249990701675, 0.006103655323386192, -0.12257411330938339, 0.0012419418198987842, 0.9999984502792358, 0.001278668874874711, 0.05143251642584801, -0.006105243694037199, -0.0012710647424682975, 0.9999805688858032, -0.44212815165519714], [0.9999697804450989, -0.001364423311315477, 0.0076533216051757336, -0.13916294276714325, 0.0013530527940019965, 0.9999980330467224, 0.0014907552395015955, 0.06076823174953461, -0.0076553407125175, -0.0014803558588027954, 0.9999696016311646, -0.5131306648254395], [0.9999656081199646, -0.001309191924519837, 0.00818517804145813, -0.1577269434928894, 0.0012902054004371166, 0.9999964833259583, 0.0023244714830070734, 0.07221967726945877, -0.008188189007341862, -0.0023138325195759535, 0.9999638199806213, -0.5706046223640442], [0.9999715089797974, -0.000632039678748697, 0.0075194560922682285, -0.1842648684978485, 0.0006101227481849492, 0.9999955892562866, 0.002916603581979871, 0.0780157595872879, -0.0075212628580629826, -0.0029119334649294615, 0.9999675154685974, -0.6207911372184753], [0.999971330165863, 9.749359742272645e-05, 0.007570990361273289, -0.2200128734111786, -0.00012177121971035376, 0.9999948740005493, 0.0032062893733382225, 0.07083319127559662, -0.007570638321340084, -0.003207120578736067, 0.9999662041664124, -0.671477735042572], [0.9999842047691345, 0.0011085873702540994, 0.005505275446921587, -0.265299528837204, -0.0011242963373661041, 0.9999953508377075, 0.002851187251508236, 0.06430258601903915, -0.00550208892673254, -0.002857332583516836, 0.9999808073043823, -0.7294802069664001], [0.9999891519546509, 0.0030521126464009285, -0.003507567336782813, -0.3109421133995056, -0.0030410285107791424, 0.9999904632568359, 0.003161099273711443, 0.06503432989120483, 0.003517185803502798, -0.0031503995414823294, 0.999988853931427, -0.7917969226837158], [0.9995473623275757, 0.00647346256300807, -0.029379382729530334, -0.3455933630466461, -0.006376372650265694, 0.9999739527702332, 0.0033971993252635, 0.06981948018074036, 0.02940060943365097, -0.003208327107131481, 0.9995625615119934, -0.8474093675613403], [0.9966378808021545, 0.011493867263197899, -0.08112204819917679, -0.3555213510990143, -0.011167873628437519, 0.9999276399612427, 0.004471173509955406, 0.0734858587384224, 0.08116757124662399, -0.00355018163099885, 0.9966941475868225, -0.9062771201133728], [0.9889613389968872, 0.01762101612985134, -0.14712226390838623, -0.33937495946884155, -0.01693679392337799, 0.999839186668396, 0.0059022014029324055, 0.0776127353310585, 0.14720259606838226, -0.0033452697098255157, 0.9891006946563721, -0.9548948407173157]]
examples/camera_poses/test_camera_d9642c8efc01481d.json ADDED
@@ -0,0 +1 @@
 
 
1
+ [[1.0, -1.4532828274127496e-09, 3.928266045782891e-10, -8.700192566379883e-09, -1.4532828274127496e-09, 1.0, -1.7456260048565042e-10, 9.261455491405002e-11, 3.928266045782891e-10, -1.7456260048565042e-10, 1.0, -1.5881864712241622e-08], [0.9850640296936035, -0.04082970321178436, 0.16727784276008606, 0.20439539849758148, 0.03502606600522995, 0.9986825585365295, 0.03750050067901611, -0.15185177326202393, -0.16858860850334167, -0.03108130767941475, 0.9851963520050049, 0.10121102631092072], [0.9168016910552979, -0.09482394903898239, 0.387921541929245, 0.44365406036376953, 0.06679922342300415, 0.9941277503967285, 0.08513444662094116, -0.26796984672546387, -0.39371633529663086, -0.0521385557949543, 0.9177521467208862, 0.06753730028867722], [0.7643709182739258, -0.15802493691444397, 0.6251122951507568, 0.6479341983795166, 0.09576083719730377, 0.9865723252296448, 0.13230620324611664, -0.33551496267318726, -0.6376261115074158, -0.04126973822712898, 0.7692397236824036, -0.07632352411746979], [0.5624101758003235, -0.2065712958574295, 0.8006392121315002, 0.8095709085464478, 0.10458854585886002, 0.9782856106758118, 0.17893710732460022, -0.3449772298336029, -0.8202170729637146, -0.016898371279239655, 0.5718027949333191, -0.267223596572876], [0.3860713243484497, -0.23765023052692413, 0.8913311958312988, 1.017128586769104, 0.10842984914779663, 0.9712379574775696, 0.21198998391628265, -0.34939509630203247, -0.9160742163658142, 0.014803661964833736, 0.4007355272769928, -0.5046621561050415], [0.25270596146583557, -0.2560441493988037, 0.9330493807792664, 1.2611535787582397, 0.09987718611955643, 0.9661006331443787, 0.23806333541870117, -0.36809343099594116, -0.9623742699623108, 0.03303031623363495, 0.26971235871315, -0.8164812922477722], [0.12896282970905304, -0.26742202043533325, 0.9549105167388916, 1.4084848165512085, 0.09037449955940247, 0.9621138572692871, 0.25723403692245483, -0.3597045838832855, -0.9875227212905884, 0.05312592536211014, 0.14824506640434265, -1.1886308193206787], [-0.037818778306245804, -0.2752484083175659, 0.9606289863586426, 1.3755683898925781, 0.08146493136882782, 0.957267701625824, 0.277492493391037, -0.353816956281662, -0.9959584474563599, 0.08875200152397156, -0.013779602944850922, -1.6891316175460815], [-0.1970304548740387, -0.2752428948879242, 0.9409677982330322, 1.1786020994186401, 0.07280438393354416, 0.9530242681503296, 0.2940141260623932, -0.36850038170814514, -0.9776904582977295, 0.12643630802631378, -0.16773590445518494, -2.261430025100708], [-0.3677733540534973, -0.26668044924736023, 0.8908559679985046, 0.8089978098869324, 0.06243090331554413, 0.9487544894218445, 0.30978602170944214, -0.37012383341789246, -0.9278174042701721, 0.16954797506332397, -0.33227747678756714, -2.8139760494232178], [-0.5150132775306702, -0.2527574300765991, 0.8190696835517883, 0.4462648332118988, 0.050335872918367386, 0.9449706673622131, 0.32325950264930725, -0.381427526473999, -0.8557030558586121, 0.20771150290966034, -0.473949670791626, -3.2886314392089844], [-0.6352092623710632, -0.23657281696796417, 0.7352160215377808, 0.0826139897108078, 0.036419764161109924, 0.9416990280151367, 0.33447936177253723, -0.3719184398651123, -0.771480917930603, 0.23924078047275543, -0.5895600318908691, -3.677316904067993], [-0.7218965888023376, -0.21918001770973206, 0.6563730239868164, -0.2607730031013489, 0.024064550176262856, 0.9399895071983337, 0.340353786945343, -0.359468549489975, -0.6915825009346008, 0.26149556040763855, -0.6733006834983826, -3.9900803565979004], [-0.7831082344055176, -0.2019210308790207, 0.5881916880607605, -0.609000563621521, 0.015634668990969658, 0.9391284584999084, 0.3432103097438812, -0.35386255383491516, -0.621688961982727, 0.2779669761657715, -0.732282280921936, -4.316582202911377], [-0.8348898887634277, -0.1848600059747696, 0.5184455513954163, -0.9689992070198059, 0.007868430577218533, 0.93780916929245, 0.3470619320869446, -0.3402447998523712, -0.5503608584403992, 0.2938378155231476, -0.7815127968788147, -4.561704635620117]]
examples/camera_poses/test_camera_d971457c81bca597.json ADDED
@@ -0,0 +1 @@
 
 
1
+ [[1.0, -1.9455232563858615e-11, -8.611562019034125e-10, -1.0473515388298438e-09, -1.9455232563858615e-11, 1.0, 8.674055917978762e-10, 1.8375034827045056e-09, -8.611562019034125e-10, 8.674055917978762e-10, 1.0, 8.45981773522908e-09], [0.9973401427268982, -0.0032562706619501114, 0.07281485944986343, -0.07197967171669006, 0.00329946493729949, 0.9999944567680359, -0.00047293686657212675, -0.0565447174012661, -0.07281292229890823, 0.0007119301008060575, 0.9973453879356384, -0.3188611567020416], [0.9906007051467896, -0.0066957552917301655, 0.13662146031856537, -0.15415722131729126, 0.006810691673308611, 0.9999766945838928, -0.00037385127507150173, -0.10014614462852478, -0.1366157978773117, 0.0013008243404328823, 0.9906232953071594, -0.6077051758766174], [0.9827210903167725, -0.009423106908798218, 0.18485280871391296, -0.23053960502147675, 0.009786692447960377, 0.9999515414237976, -0.0010545575059950352, -0.11272216588258743, -0.18483391404151917, 0.002845433307811618, 0.9827656745910645, -0.8897562623023987], [0.9756309986114502, -0.011318936944007874, 0.2191258817911148, -0.2929331362247467, 0.01199379749596119, 0.9999265670776367, -0.0017497432418167591, -0.10348402708768845, -0.21908999979496002, 0.004335256293416023, 0.9756950736045837, -1.1368639469146729], [0.9685831069946289, -0.012191502377390862, 0.24839124083518982, -0.379209041595459, 0.013217172585427761, 0.9999096393585205, -0.0024619612377136946, -0.12078691273927689, -0.24833877384662628, 0.005667644087225199, 0.9686566591262817, -1.3666095733642578], [0.9615083932876587, -0.012519675306975842, 0.2744903266429901, -0.5242342352867126, 0.013806014321744442, 0.9999009370803833, -0.0027547888457775116, -0.13015854358673096, -0.2744286358356476, 0.006438371259719133, 0.9615859389305115, -1.5762972831726074], [0.9528889656066895, -0.014083069749176502, 0.3029923439025879, -0.6702165007591248, 0.015383570455014706, 0.9998798370361328, -0.0019058430334553123, -0.14860114455223083, -0.3029291331768036, 0.00647716224193573, 0.9529911279678345, -1.7173497676849365], [0.9457509517669678, -0.015159872360527515, 0.3245387375354767, -0.8001917600631714, 0.016729505732655525, 0.9998579621315002, -0.0020466779824346304, -0.15521110594272614, -0.32446160912513733, 0.007365020923316479, 0.9458702206611633, -1.8571592569351196], [0.9417706727981567, -0.015540024265646935, 0.33589670062065125, -0.9244012236595154, 0.017394419759511948, 0.9998455047607422, -0.0025124624371528625, -0.1416105479001999, -0.3358057737350464, 0.008208892308175564, 0.9418954849243164, -1.9969842433929443], [0.9381415247917175, -0.016401933506131172, 0.34586337208747864, -1.0128529071807861, 0.01851990446448326, 0.9998245239257812, -0.0028197101783007383, -0.11503250896930695, -0.3457564413547516, 0.009050644934177399, 0.9382806420326233, -2.080850124359131], [0.9357938766479492, -0.016873901709914207, 0.3521435558795929, -1.1008079051971436, 0.01865064539015293, 0.9998247027397156, -0.0016533475136384368, -0.048780668526887894, -0.3520539104938507, 0.008114897646009922, 0.9359445571899414, -2.088500499725342], [0.9334627985954285, -0.016492612659931183, 0.3582947850227356, -1.2417148351669312, 0.017931735143065453, 0.9998390078544617, -0.0006939812446944416, 0.01625901833176613, -0.35822567343711853, 0.007072653621435165, 0.9336082339286804, -2.0250792503356934], [0.9281281232833862, -0.016213543713092804, 0.3719078302383423, -1.4365860223770142, 0.01746317930519581, 0.9998475313186646, 8.084020009846427e-06, 0.060201361775398254, -0.37185123562812805, 0.006487190257757902, 0.9282696843147278, -1.8963005542755127], [0.9220678806304932, -0.017285069450736046, 0.3866421580314636, -1.604330062866211, 0.01880805380642414, 0.9998230934143066, -0.00015593231364618987, 0.0799601748585701, -0.38657107949256897, 0.007415766827762127, 0.9222298264503479, -1.7388361692428589], [0.9185494184494019, -0.018356993794441223, 0.3948797583580017, -1.7530856132507324, 0.019847355782985687, 0.9998030066490173, 0.0003104731731582433, 0.10000917315483093, -0.3948076665401459, 0.007552135270088911, 0.9187328219413757, -1.5337872505187988]]
examples/trajectories/curve_1.txt ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 88, 173
2
+ 89, 173
3
+ 91, 173
4
+ 92, 173
5
+ 93, 173
6
+ 93, 174
7
+ 95, 175
8
+ 97, 176
9
+ 98, 176
10
+ 100, 178
11
+ 103, 180
12
+ 104, 181
13
+ 105, 181
14
+ 106, 182
15
+ 107, 182
16
+ 108, 182
17
+ 110, 184
18
+ 111, 185
19
+ 113, 186
20
+ 115, 186
21
+ 116, 187
22
+ 116, 188
23
+ 119, 189
24
+ 122, 190
25
+ 125, 191
26
+ 128, 192
27
+ 129, 192
28
+ 130, 192
29
+ 133, 193
30
+ 134, 193
31
+ 140, 194
32
+ 146, 194
33
+ 150, 194
34
+ 151, 194
35
+ 153, 194
36
+ 155, 194
37
+ 156, 194
38
+ 157, 194
39
+ 158, 194
40
+ 159, 194
41
+ 162, 193
42
+ 165, 192
43
+ 168, 191
44
+ 169, 190
45
+ 170, 190
46
+ 172, 189
47
+ 173, 188
48
+ 173, 187
49
+ 174, 187
50
+ 175, 186
51
+ 178, 185
52
+ 179, 183
53
+ 180, 183
54
+ 181, 183
55
+ 183, 181
56
+ 185, 180
57
+ 185, 179
58
+ 185, 179
59
+ 185, 179
examples/trajectories/curve_2.txt ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 206, 146
2
+ 206, 147
3
+ 205, 149
4
+ 204, 151
5
+ 203, 151
6
+ 202, 154
7
+ 201, 156
8
+ 200, 159
9
+ 199, 161
10
+ 198, 163
11
+ 197, 164
12
+ 197, 165
13
+ 197, 166
14
+ 195, 168
15
+ 193, 171
16
+ 191, 173
17
+ 189, 176
18
+ 188, 177
19
+ 187, 178
20
+ 187, 179
21
+ 186, 180
22
+ 185, 181
23
+ 184, 181
24
+ 184, 182
25
+ 182, 184
26
+ 180, 186
27
+ 179, 187
28
+ 177, 189
29
+ 175, 191
30
+ 174, 191
31
+ 173, 192
32
+ 172, 193
33
+ 171, 193
34
+ 169, 195
35
+ 167, 197
36
+ 164, 198
37
+ 161, 200
38
+ 160, 201
39
+ 158, 202
40
+ 156, 204
41
+ 155, 204
42
+ 154, 204
43
+ 153, 205
44
+ 151, 206
45
+ 150, 206
46
+ 149, 206
47
+ 147, 207
48
+ 146, 207
49
+ 143, 209
50
+ 139, 210
51
+ 138, 210
52
+ 135, 211
53
+ 135, 212
54
+ 134, 212
55
+ 133, 212
56
+ 132, 212
57
+ 131, 212
58
+ 130, 212
59
+ 129, 212
60
+ 128, 212
61
+ 127, 212
62
+ 126, 213
63
+ 124, 213
64
+ 122, 213
65
+ 120, 213
66
+ 120, 214
67
+ 119, 214
68
+ 118, 214
69
+ 116, 214
70
+ 115, 214
71
+ 114, 214
72
+ 113, 214
73
+ 112, 214
74
+ 111, 214
75
+ 110, 214
76
+ 110, 215
77
+ 109, 215
78
+ 108, 215
79
+ 108, 215
80
+ 108, 215
examples/trajectories/curve_3.txt ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 73, 149
2
+ 74, 149
3
+ 76, 149
4
+ 82, 149
5
+ 83, 149
6
+ 90, 149
7
+ 98, 149
8
+ 102, 149
9
+ 104, 149
10
+ 105, 149
11
+ 106, 150
12
+ 108, 152
13
+ 111, 154
14
+ 114, 157
15
+ 116, 158
16
+ 117, 160
17
+ 118, 161
18
+ 119, 164
19
+ 121, 166
20
+ 122, 168
21
+ 122, 169
22
+ 123, 171
23
+ 123, 172
24
+ 124, 174
25
+ 125, 177
26
+ 126, 179
27
+ 126, 181
28
+ 126, 183
29
+ 126, 184
30
+ 126, 185
31
+ 127, 186
32
+ 127, 187
33
+ 127, 188
34
+ 127, 189
35
+ 127, 190
36
+ 127, 191
37
+ 128, 192
38
+ 128, 193
39
+ 129, 194
40
+ 130, 196
41
+ 130, 197
42
+ 131, 198
43
+ 131, 199
44
+ 134, 201
45
+ 135, 202
46
+ 137, 203
47
+ 138, 204
48
+ 139, 204
49
+ 139, 205
50
+ 140, 206
51
+ 142, 206
52
+ 142, 207
53
+ 147, 209
54
+ 151, 211
55
+ 153, 212
56
+ 154, 212
57
+ 156, 212
58
+ 158, 213
59
+ 159, 214
60
+ 161, 214
61
+ 162, 214
62
+ 163, 214
63
+ 164, 214
64
+ 165, 214
65
+ 167, 214
66
+ 168, 214
67
+ 169, 214
68
+ 170, 214
69
+ 171, 214
70
+ 172, 213
71
+ 173, 213
72
+ 175, 212
73
+ 176, 212
74
+ 177, 212
75
+ 178, 211
76
+ 179, 211
77
+ 179, 208
78
+ 182, 205
79
+ 184, 203
80
+ 184, 202
81
+ 186, 200
82
+ 187, 199
83
+ 187, 198
84
+ 188, 196
85
+ 190, 194
86
+ 192, 191
87
+ 193, 189
88
+ 193, 188
89
+ 194, 188
90
+ 194, 187
91
+ 195, 184
92
+ 196, 183
93
+ 197, 182
94
+ 197, 180
95
+ 198, 180
96
+ 198, 179
97
+ 199, 178
98
+ 199, 177
99
+ 200, 176
100
+ 200, 175
101
+ 201, 174
102
+ 202, 173
103
+ 203, 171
104
+ 204, 170
105
+ 204, 169
106
+ 205, 169
107
+ 205, 167
108
+ 207, 165
109
+ 208, 163
110
+ 209, 163
111
+ 209, 162
112
+ 210, 162
113
+ 211, 162
114
+ 212, 162
115
+ 213, 162
116
+ 215, 162
117
+ 216, 162
118
+ 217, 163
119
+ 219, 164
120
+ 220, 164
121
+ 221, 165
122
+ 223, 166
123
+ 224, 166
124
+ 224, 167
125
+ 225, 167
126
+ 225, 168
127
+ 226, 169
128
+ 227, 171
129
+ 228, 173
130
+ 228, 174
131
+ 229, 175
132
+ 229, 176
133
+ 229, 177
134
+ 229, 180
135
+ 229, 181
136
+ 229, 182
137
+ 229, 183
138
+ 229, 184
139
+ 229, 185
140
+ 230, 186
141
+ 230, 187
142
+ 230, 187
143
+ 230, 189
144
+ 224, 192
145
+ 223, 193
146
+ 220, 194
147
+ 219, 195
148
+ 218, 195
149
+ 218, 195
150
+ 218, 195
examples/trajectories/curve_4.txt ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 176, 109
2
+ 177, 110
3
+ 177, 111
4
+ 177, 112
5
+ 177, 114
6
+ 178, 118
7
+ 179, 122
8
+ 180, 125
9
+ 180, 126
10
+ 180, 127
11
+ 180, 128
12
+ 180, 129
13
+ 180, 130
14
+ 180, 131
15
+ 180, 133
16
+ 180, 134
17
+ 179, 136
18
+ 177, 138
19
+ 177, 139
20
+ 176, 140
21
+ 176, 141
22
+ 174, 143
23
+ 172, 145
24
+ 170, 147
25
+ 170, 148
26
+ 167, 150
27
+ 163, 154
28
+ 159, 158
29
+ 158, 158
30
+ 155, 160
31
+ 154, 161
32
+ 152, 163
33
+ 151, 164
34
+ 149, 165
35
+ 147, 166
36
+ 145, 167
37
+ 143, 169
38
+ 140, 171
39
+ 137, 172
40
+ 135, 174
41
+ 133, 175
42
+ 131, 176
43
+ 130, 176
44
+ 128, 177
45
+ 127, 177
46
+ 125, 178
47
+ 123, 179
48
+ 121, 179
49
+ 119, 179
50
+ 116, 179
51
+ 114, 180
52
+ 112, 180
53
+ 111, 180
54
+ 110, 180
55
+ 108, 180
56
+ 104, 181
57
+ 99, 181
58
+ 95, 181
59
+ 94, 181
60
+ 93, 179
61
+ 92, 179
62
+ 92, 176
63
+ 91, 173
64
+ 91, 171
65
+ 91, 170
66
+ 91, 168
67
+ 91, 165
68
+ 91, 164
69
+ 91, 163
70
+ 91, 162
71
+ 91, 161
72
+ 93, 159
73
+ 94, 159
74
+ 99, 156
75
+ 100, 156
76
+ 105, 153
77
+ 106, 152
78
+ 110, 149
79
+ 112, 148
80
+ 113, 148
81
+ 114, 147
82
+ 115, 146
83
+ 117, 145
84
+ 119, 144
85
+ 120, 144
86
+ 121, 143
87
+ 122, 142
88
+ 123, 142
89
+ 124, 142
90
+ 125, 141
91
+ 126, 141
92
+ 127, 140
93
+ 128, 140
94
+ 128, 139
95
+ 129, 138
96
+ 128, 138
97
+ 126, 137
98
+ 125, 136
99
+ 123, 136
100
+ 122, 136
101
+ 121, 135
102
+ 120, 135
103
+ 119, 135
104
+ 118, 135
105
+ 117, 135
106
+ 116, 135
107
+ 115, 135
108
+ 112, 134
109
+ 111, 134
110
+ 109, 134
111
+ 107, 133
112
+ 104, 133
113
+ 103, 133
114
+ 102, 133
115
+ 100, 133
116
+ 99, 133
117
+ 96, 133
118
+ 94, 133
119
+ 93, 133
120
+ 92, 133
121
+ 91, 133
122
+ 89, 133
123
+ 88, 133
124
+ 87, 133
125
+ 86, 133
126
+ 85, 133
127
+ 84, 133
128
+ 82, 133
129
+ 81, 133
130
+ 80, 133
131
+ 79, 133
132
+ 78, 133
133
+ 77, 133
134
+ 76, 133
135
+ 76, 133
136
+ 76, 133
137
+ 76, 133
examples/trajectories/horizon_2.txt ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 121, 124
2
+ 123, 124
3
+ 124, 124
4
+ 125, 124
5
+ 127, 124
6
+ 130, 124
7
+ 131, 124
8
+ 135, 124
9
+ 140, 124
10
+ 143, 124
11
+ 144, 124
12
+ 145, 124
13
+ 149, 124
14
+ 152, 124
15
+ 154, 124
16
+ 155, 124
17
+ 156, 124
18
+ 159, 125
19
+ 160, 125
20
+ 163, 125
21
+ 166, 126
22
+ 168, 126
23
+ 169, 126
24
+ 170, 126
25
+ 173, 126
26
+ 176, 126
27
+ 177, 126
28
+ 178, 126
29
+ 179, 126
30
+ 180, 126
31
+ 181, 126
32
+ 183, 126
33
+ 184, 126
34
+ 185, 126
35
+ 186, 126
36
+ 187, 126
37
+ 188, 126
38
+ 189, 126
39
+ 190, 126
40
+ 191, 126
41
+ 192, 126
42
+ 193, 126
43
+ 194, 126
44
+ 195, 126
45
+ 196, 126
46
+ 196, 126
47
+ 196, 126
48
+ 196, 126
examples/trajectories/shake_1.txt ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 103, 89
2
+ 104, 89
3
+ 106, 89
4
+ 107, 89
5
+ 108, 89
6
+ 109, 89
7
+ 110, 89
8
+ 111, 89
9
+ 112, 89
10
+ 113, 89
11
+ 114, 89
12
+ 115, 89
13
+ 116, 89
14
+ 117, 89
15
+ 118, 89
16
+ 119, 89
17
+ 120, 89
18
+ 122, 89
19
+ 123, 89
20
+ 124, 89
21
+ 125, 89
22
+ 126, 89
23
+ 127, 88
24
+ 128, 88
25
+ 129, 88
26
+ 130, 88
27
+ 131, 88
28
+ 133, 87
29
+ 136, 86
30
+ 137, 86
31
+ 138, 86
32
+ 139, 86
33
+ 140, 86
34
+ 141, 86
35
+ 142, 86
36
+ 143, 86
37
+ 144, 86
38
+ 145, 86
39
+ 146, 87
40
+ 147, 87
41
+ 148, 87
42
+ 149, 87
43
+ 148, 87
44
+ 146, 87
45
+ 145, 88
46
+ 144, 88
47
+ 142, 89
48
+ 141, 89
49
+ 140, 90
50
+ 140, 91
51
+ 138, 91
52
+ 137, 92
53
+ 136, 92
54
+ 136, 93
55
+ 135, 93
56
+ 134, 93
57
+ 133, 93
58
+ 132, 93
59
+ 131, 93
60
+ 130, 93
61
+ 129, 93
62
+ 128, 93
63
+ 127, 92
64
+ 125, 92
65
+ 124, 92
66
+ 123, 92
67
+ 122, 92
68
+ 121, 92
69
+ 120, 92
70
+ 119, 92
71
+ 118, 92
72
+ 117, 92
73
+ 116, 92
74
+ 115, 92
75
+ 113, 92
76
+ 112, 92
77
+ 111, 92
78
+ 110, 92
79
+ 109, 92
80
+ 108, 92
81
+ 108, 91
82
+ 108, 90
83
+ 109, 90
84
+ 110, 90
85
+ 111, 89
86
+ 112, 89
87
+ 113, 89
88
+ 114, 89
89
+ 115, 89
90
+ 115, 88
91
+ 116, 88
92
+ 117, 88
93
+ 118, 88
94
+ 118, 87
95
+ 119, 87
96
+ 120, 87
97
+ 121, 87
98
+ 122, 86
99
+ 123, 86
100
+ 124, 86
101
+ 125, 86
102
+ 126, 85
103
+ 127, 85
104
+ 128, 85
105
+ 129, 85
106
+ 130, 85
107
+ 131, 85
108
+ 132, 85
109
+ 133, 85
110
+ 134, 85
111
+ 135, 85
112
+ 136, 85
113
+ 137, 85
114
+ 138, 85
115
+ 139, 85
116
+ 140, 85
117
+ 141, 85
118
+ 142, 85
119
+ 143, 85
120
+ 143, 84
121
+ 144, 84
122
+ 145, 84
123
+ 146, 84
124
+ 147, 84
125
+ 148, 84
126
+ 149, 84
127
+ 148, 84
128
+ 147, 84
129
+ 145, 84
130
+ 144, 84
131
+ 143, 84
132
+ 142, 84
133
+ 141, 84
134
+ 140, 85
135
+ 139, 85
136
+ 138, 85
137
+ 137, 86
138
+ 136, 86
139
+ 136, 87
140
+ 135, 87
141
+ 134, 87
142
+ 133, 87
143
+ 132, 88
144
+ 131, 88
145
+ 130, 88
146
+ 129, 88
147
+ 129, 89
148
+ 128, 89
149
+ 127, 89
150
+ 126, 89
151
+ 125, 89
152
+ 124, 90
153
+ 123, 90
154
+ 122, 90
155
+ 121, 90
156
+ 120, 91
157
+ 119, 91
158
+ 118, 91
159
+ 117, 91
160
+ 116, 91
161
+ 115, 91
162
+ 114, 91
163
+ 113, 91
164
+ 112, 91
165
+ 111, 91
166
+ 110, 91
167
+ 109, 91
168
+ 109, 90
169
+ 108, 90
170
+ 110, 90
171
+ 111, 90
172
+ 113, 90
173
+ 114, 90
174
+ 115, 90
175
+ 116, 90
176
+ 118, 90
177
+ 120, 90
178
+ 121, 90
179
+ 122, 90
180
+ 123, 90
181
+ 124, 90
182
+ 126, 90
183
+ 127, 90
184
+ 128, 90
185
+ 129, 90
186
+ 130, 90
187
+ 131, 90
188
+ 132, 90
189
+ 133, 90
190
+ 134, 90
191
+ 135, 90
192
+ 136, 90
193
+ 137, 90
194
+ 138, 90
195
+ 139, 90
196
+ 140, 90
197
+ 141, 89
198
+ 142, 89
199
+ 143, 89
200
+ 144, 89
201
+ 145, 89
202
+ 146, 89
203
+ 147, 89
204
+ 147, 89
205
+ 147, 89
examples/trajectories/shake_2.txt ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 125, 86
2
+ 127, 86
3
+ 129, 86
4
+ 130, 86
5
+ 131, 86
6
+ 133, 86
7
+ 134, 86
8
+ 135, 86
9
+ 137, 86
10
+ 138, 86
11
+ 139, 86
12
+ 140, 86
13
+ 141, 86
14
+ 142, 86
15
+ 141, 86
16
+ 139, 86
17
+ 139, 87
18
+ 138, 87
19
+ 137, 87
20
+ 136, 87
21
+ 135, 87
22
+ 134, 87
23
+ 134, 88
24
+ 133, 88
25
+ 132, 88
26
+ 131, 88
27
+ 130, 88
28
+ 129, 88
29
+ 128, 88
30
+ 127, 88
31
+ 128, 88
32
+ 129, 88
33
+ 130, 88
34
+ 131, 88
35
+ 132, 88
36
+ 133, 88
37
+ 134, 88
38
+ 135, 88
39
+ 136, 88
40
+ 137, 88
41
+ 138, 88
42
+ 139, 88
43
+ 140, 88
44
+ 141, 88
45
+ 140, 88
46
+ 139, 88
47
+ 138, 88
48
+ 136, 88
49
+ 134, 88
50
+ 133, 88
51
+ 131, 88
52
+ 130, 88
53
+ 129, 88
54
+ 128, 88
55
+ 127, 88
56
+ 128, 88
57
+ 129, 88
58
+ 130, 88
59
+ 132, 87
60
+ 133, 87
61
+ 134, 86
62
+ 136, 86
63
+ 137, 86
64
+ 138, 85
65
+ 139, 85
66
+ 140, 85
67
+ 140, 84
68
+ 141, 84
69
+ 139, 85
70
+ 138, 85
71
+ 137, 86
72
+ 136, 86
73
+ 135, 86
74
+ 134, 86
75
+ 133, 86
76
+ 132, 86
77
+ 131, 86
78
+ 130, 86
79
+ 129, 86
80
+ 128, 86
81
+ 127, 86
82
+ 126, 86
83
+ 127, 86
84
+ 129, 86
85
+ 130, 86
86
+ 132, 86
87
+ 133, 86
88
+ 135, 86
89
+ 137, 86
90
+ 138, 86
91
+ 139, 86
92
+ 140, 86
93
+ 141, 87
94
+ 142, 87
95
+ 143, 87
96
+ 144, 88
97
+ 143, 88
98
+ 142, 88
99
+ 141, 88
100
+ 139, 88
101
+ 138, 88
102
+ 137, 88
103
+ 136, 88
104
+ 135, 88
105
+ 134, 88
106
+ 133, 88
107
+ 131, 88
108
+ 130, 88
109
+ 129, 88
110
+ 128, 88
111
+ 127, 88
112
+ 128, 88
113
+ 129, 88
114
+ 130, 88
115
+ 132, 88
116
+ 133, 88
117
+ 134, 88
118
+ 136, 88
119
+ 137, 88
120
+ 138, 88
121
+ 139, 88
122
+ 140, 88
123
+ 141, 88
124
+ 142, 88
125
+ 143, 88
126
+ 144, 88
127
+ 143, 88
128
+ 142, 88
129
+ 141, 88
130
+ 140, 88
131
+ 139, 88
132
+ 138, 88
133
+ 137, 88
134
+ 135, 89
135
+ 135, 90
136
+ 133, 90
137
+ 131, 91
138
+ 130, 91
139
+ 129, 91
140
+ 128, 91
141
+ 127, 91
142
+ 128, 91
143
+ 129, 91
144
+ 130, 91
145
+ 132, 91
146
+ 133, 90
147
+ 134, 89
148
+ 135, 89
149
+ 136, 89
150
+ 137, 89
151
+ 138, 89
152
+ 138, 88
153
+ 139, 88
154
+ 140, 88
155
+ 140, 88
156
+ 140, 88
examples/trajectories/shaking_10.txt ADDED
@@ -0,0 +1,373 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 117, 102
2
+ 114, 102
3
+ 109, 102
4
+ 106, 102
5
+ 105, 102
6
+ 102, 102
7
+ 99, 102
8
+ 97, 102
9
+ 96, 102
10
+ 95, 102
11
+ 93, 102
12
+ 89, 102
13
+ 85, 103
14
+ 82, 103
15
+ 81, 103
16
+ 80, 103
17
+ 79, 103
18
+ 78, 103
19
+ 76, 103
20
+ 74, 104
21
+ 73, 104
22
+ 72, 104
23
+ 71, 104
24
+ 70, 105
25
+ 69, 105
26
+ 68, 105
27
+ 67, 105
28
+ 66, 106
29
+ 64, 107
30
+ 63, 108
31
+ 62, 108
32
+ 61, 108
33
+ 61, 109
34
+ 60, 109
35
+ 59, 109
36
+ 58, 109
37
+ 57, 110
38
+ 56, 110
39
+ 55, 111
40
+ 54, 111
41
+ 53, 111
42
+ 52, 111
43
+ 52, 112
44
+ 51, 112
45
+ 50, 112
46
+ 50, 113
47
+ 49, 113
48
+ 48, 113
49
+ 46, 114
50
+ 46, 115
51
+ 45, 115
52
+ 45, 116
53
+ 44, 116
54
+ 43, 117
55
+ 42, 117
56
+ 41, 117
57
+ 41, 118
58
+ 40, 118
59
+ 41, 118
60
+ 41, 119
61
+ 42, 119
62
+ 43, 119
63
+ 44, 119
64
+ 46, 119
65
+ 47, 119
66
+ 48, 119
67
+ 49, 119
68
+ 50, 119
69
+ 51, 119
70
+ 52, 119
71
+ 53, 119
72
+ 54, 119
73
+ 55, 119
74
+ 56, 118
75
+ 58, 118
76
+ 59, 118
77
+ 61, 118
78
+ 63, 118
79
+ 64, 117
80
+ 67, 117
81
+ 70, 117
82
+ 71, 117
83
+ 73, 117
84
+ 75, 116
85
+ 76, 116
86
+ 77, 116
87
+ 80, 116
88
+ 82, 116
89
+ 83, 116
90
+ 84, 116
91
+ 85, 116
92
+ 88, 116
93
+ 91, 116
94
+ 94, 116
95
+ 97, 116
96
+ 98, 116
97
+ 100, 116
98
+ 101, 117
99
+ 102, 117
100
+ 104, 117
101
+ 105, 117
102
+ 106, 117
103
+ 107, 117
104
+ 108, 117
105
+ 109, 117
106
+ 110, 117
107
+ 111, 117
108
+ 115, 117
109
+ 119, 117
110
+ 123, 117
111
+ 124, 117
112
+ 128, 117
113
+ 129, 117
114
+ 132, 117
115
+ 134, 117
116
+ 135, 117
117
+ 136, 117
118
+ 138, 117
119
+ 139, 117
120
+ 140, 117
121
+ 141, 117
122
+ 142, 116
123
+ 145, 116
124
+ 146, 116
125
+ 148, 116
126
+ 149, 116
127
+ 151, 115
128
+ 152, 115
129
+ 153, 115
130
+ 154, 115
131
+ 155, 114
132
+ 156, 114
133
+ 157, 114
134
+ 158, 114
135
+ 159, 114
136
+ 162, 114
137
+ 163, 113
138
+ 164, 113
139
+ 165, 113
140
+ 166, 113
141
+ 167, 113
142
+ 168, 113
143
+ 169, 113
144
+ 170, 113
145
+ 171, 113
146
+ 172, 113
147
+ 173, 113
148
+ 174, 113
149
+ 175, 113
150
+ 178, 113
151
+ 181, 113
152
+ 182, 113
153
+ 183, 113
154
+ 184, 113
155
+ 185, 113
156
+ 187, 113
157
+ 188, 113
158
+ 189, 113
159
+ 191, 113
160
+ 192, 113
161
+ 193, 113
162
+ 194, 113
163
+ 195, 113
164
+ 196, 113
165
+ 197, 113
166
+ 198, 113
167
+ 199, 113
168
+ 200, 113
169
+ 201, 113
170
+ 202, 113
171
+ 203, 113
172
+ 202, 113
173
+ 201, 113
174
+ 200, 113
175
+ 198, 113
176
+ 197, 113
177
+ 196, 113
178
+ 195, 112
179
+ 194, 112
180
+ 193, 112
181
+ 192, 112
182
+ 191, 111
183
+ 190, 111
184
+ 189, 111
185
+ 188, 110
186
+ 187, 110
187
+ 186, 110
188
+ 185, 110
189
+ 184, 110
190
+ 183, 110
191
+ 182, 110
192
+ 181, 110
193
+ 180, 110
194
+ 179, 110
195
+ 178, 110
196
+ 177, 110
197
+ 175, 110
198
+ 173, 110
199
+ 172, 110
200
+ 171, 110
201
+ 170, 110
202
+ 168, 110
203
+ 167, 110
204
+ 165, 110
205
+ 164, 110
206
+ 163, 110
207
+ 161, 111
208
+ 159, 111
209
+ 155, 111
210
+ 153, 111
211
+ 151, 111
212
+ 151, 112
213
+ 150, 112
214
+ 149, 112
215
+ 148, 112
216
+ 147, 112
217
+ 145, 112
218
+ 143, 113
219
+ 142, 113
220
+ 140, 113
221
+ 139, 113
222
+ 138, 113
223
+ 136, 113
224
+ 135, 113
225
+ 134, 113
226
+ 133, 114
227
+ 131, 114
228
+ 130, 114
229
+ 128, 115
230
+ 127, 115
231
+ 126, 115
232
+ 125, 115
233
+ 124, 115
234
+ 122, 115
235
+ 121, 115
236
+ 120, 115
237
+ 118, 116
238
+ 115, 116
239
+ 113, 116
240
+ 111, 116
241
+ 109, 117
242
+ 106, 117
243
+ 103, 117
244
+ 102, 117
245
+ 100, 117
246
+ 98, 117
247
+ 97, 117
248
+ 95, 117
249
+ 94, 117
250
+ 93, 117
251
+ 92, 117
252
+ 91, 117
253
+ 90, 117
254
+ 89, 117
255
+ 88, 117
256
+ 87, 117
257
+ 86, 117
258
+ 85, 117
259
+ 84, 117
260
+ 83, 117
261
+ 84, 117
262
+ 85, 117
263
+ 87, 117
264
+ 88, 117
265
+ 89, 117
266
+ 90, 117
267
+ 92, 117
268
+ 93, 117
269
+ 95, 117
270
+ 97, 117
271
+ 99, 117
272
+ 101, 117
273
+ 103, 117
274
+ 104, 117
275
+ 105, 117
276
+ 106, 117
277
+ 107, 117
278
+ 108, 117
279
+ 109, 117
280
+ 110, 117
281
+ 112, 117
282
+ 113, 117
283
+ 114, 117
284
+ 116, 117
285
+ 117, 117
286
+ 118, 117
287
+ 119, 117
288
+ 120, 117
289
+ 121, 117
290
+ 123, 117
291
+ 124, 117
292
+ 125, 117
293
+ 126, 117
294
+ 127, 117
295
+ 129, 117
296
+ 130, 117
297
+ 131, 117
298
+ 133, 117
299
+ 134, 117
300
+ 135, 117
301
+ 136, 117
302
+ 137, 117
303
+ 138, 117
304
+ 139, 117
305
+ 140, 117
306
+ 141, 117
307
+ 142, 117
308
+ 143, 117
309
+ 145, 117
310
+ 146, 117
311
+ 147, 117
312
+ 148, 117
313
+ 149, 117
314
+ 150, 117
315
+ 149, 117
316
+ 148, 117
317
+ 147, 117
318
+ 146, 117
319
+ 144, 117
320
+ 143, 118
321
+ 142, 118
322
+ 141, 118
323
+ 140, 118
324
+ 139, 118
325
+ 138, 118
326
+ 136, 118
327
+ 135, 118
328
+ 132, 119
329
+ 131, 119
330
+ 130, 119
331
+ 129, 119
332
+ 127, 119
333
+ 126, 119
334
+ 124, 119
335
+ 123, 119
336
+ 122, 119
337
+ 121, 119
338
+ 119, 119
339
+ 118, 119
340
+ 117, 119
341
+ 115, 119
342
+ 114, 119
343
+ 113, 119
344
+ 112, 119
345
+ 111, 119
346
+ 110, 119
347
+ 109, 119
348
+ 108, 119
349
+ 107, 119
350
+ 106, 119
351
+ 107, 119
352
+ 108, 119
353
+ 109, 119
354
+ 110, 119
355
+ 112, 119
356
+ 113, 119
357
+ 114, 119
358
+ 115, 119
359
+ 116, 119
360
+ 117, 119
361
+ 118, 119
362
+ 119, 119
363
+ 120, 119
364
+ 121, 119
365
+ 122, 119
366
+ 123, 119
367
+ 124, 119
368
+ 125, 119
369
+ 126, 119
370
+ 127, 119
371
+ 127, 119
372
+ 127, 119
373
+ 127, 119
gradio_utils/camera_utils.py ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import copy
2
+ # import plotly.express as px
3
+ # import plotly.graph_objects as go
4
+ import json
5
+
6
+ import numpy as np
7
+
8
+ CAMERA_MOTION_MODE = ["Basic Camera Poses", "Provided Complex Camera Poses", "Customize Camera Poses"]
9
+
10
+ CAMERA = {
11
+ # T
12
+ "base_T_norm": 1.5,
13
+ "base_angle": np.pi/3,
14
+
15
+ "Pan Up": { "angle":[0., 0., 0.], "T":[0., 1., 0.]},
16
+ "Pan Down": { "angle":[0., 0., 0.], "T":[0.,-1.,0.]},
17
+ "Pan Left": { "angle":[0., 0., 0.], "T":[1.,0.,0.]},
18
+ "Pan Right": { "angle":[0., 0., 0.], "T": [-1.,0.,0.]},
19
+ "Zoom In": { "angle":[0., 0., 0.], "T": [0.,0.,-2.]},
20
+ "Zoom Out": { "angle":[0., 0., 0.], "T": [0.,0.,2.]},
21
+ "ACW": { "angle": [0., 0., 1.], "T":[0., 0., 0.]},
22
+ "CW": { "angle": [0., 0., -1.], "T":[0., 0., 0.]},
23
+ }
24
+
25
+ COMPLEX_CAMERA = {
26
+ "Pose_1": "examples/camera_poses/test_camera_1424acd0007d40b5.json",
27
+ "Pose_2": "examples/camera_poses/test_camera_d971457c81bca597.json",
28
+ "Pose_3": "examples/camera_poses/test_camera_Round-ZoomIn.json",
29
+ "Pose_4": "examples/camera_poses/test_camera_Round-RI_90.json",
30
+ "Pose_5": "examples/camera_poses/test_camera_Round-RI_120.json",
31
+ "Pose_6": "examples/camera_poses/test_camera_018f7907401f2fef.json",
32
+ "Pose_7": "examples/camera_poses/test_camera_088b93f15ca8745d.json",
33
+ "Pose_8": "examples/camera_poses/test_camera_b133a504fc90a2d1.json",
34
+ }
35
+
36
+
37
+
38
+ def compute_R_form_rad_angle(angles):
39
+ theta_x, theta_y, theta_z = angles
40
+ Rx = np.array([[1, 0, 0],
41
+ [0, np.cos(theta_x), -np.sin(theta_x)],
42
+ [0, np.sin(theta_x), np.cos(theta_x)]])
43
+
44
+ Ry = np.array([[np.cos(theta_y), 0, np.sin(theta_y)],
45
+ [0, 1, 0],
46
+ [-np.sin(theta_y), 0, np.cos(theta_y)]])
47
+
48
+ Rz = np.array([[np.cos(theta_z), -np.sin(theta_z), 0],
49
+ [np.sin(theta_z), np.cos(theta_z), 0],
50
+ [0, 0, 1]])
51
+
52
+ # 计算相机外参的旋转矩阵
53
+ R = np.dot(Rz, np.dot(Ry, Rx))
54
+ return R
55
+
56
+ def get_camera_motion(angle, T, speed, n=16):
57
+ RT = []
58
+ for i in range(n):
59
+ _angle = (i/n)*speed*(CAMERA["base_angle"])*angle
60
+ R = compute_R_form_rad_angle(_angle)
61
+ # _T = (i/n)*speed*(T.reshape(3,1))
62
+ _T=(i/n)*speed*(CAMERA["base_T_norm"])*(T.reshape(3,1))
63
+ _RT = np.concatenate([R,_T], axis=1)
64
+ RT.append(_RT)
65
+ RT = np.stack(RT)
66
+ return RT
67
+
68
+ def create_relative(RT_list, K_1=4.7, dataset="syn"):
69
+ RT = copy.deepcopy(RT_list[0])
70
+ R_inv = RT[:,:3].T
71
+ T = RT[:,-1]
72
+
73
+ temp = []
74
+ for _RT in RT_list:
75
+ _RT[:,:3] = np.dot(_RT[:,:3], R_inv)
76
+ _RT[:,-1] = _RT[:,-1] - np.dot(_RT[:,:3], T)
77
+ temp.append(_RT)
78
+ RT_list = temp
79
+
80
+ return RT_list
81
+
82
+ def combine_camera_motion(RT_0, RT_1):
83
+ RT = copy.deepcopy(RT_0[-1])
84
+ R = RT[:,:3]
85
+ R_inv = RT[:,:3].T
86
+ T = RT[:,-1]
87
+
88
+ temp = []
89
+ for _RT in RT_1:
90
+ _RT[:,:3] = np.dot(_RT[:,:3], R)
91
+ _RT[:,-1] = _RT[:,-1] + np.dot(np.dot(_RT[:,:3], R_inv), T)
92
+ temp.append(_RT)
93
+
94
+ RT_1 = np.stack(temp)
95
+
96
+ return np.concatenate([RT_0, RT_1], axis=0)
97
+
98
+ def process_camera(camera_dict):
99
+ # "First A then B", "Both A and B", "Custom"
100
+ if camera_dict['complex'] is not None:
101
+ with open(COMPLEX_CAMERA[camera_dict['complex']]) as f:
102
+ RT = json.load(f) # [16, 12]
103
+ RT = np.array(RT).reshape(-1, 3, 4)
104
+ print(RT.shape)
105
+ return RT
106
+
107
+
108
+ motion_list = camera_dict['motion']
109
+ mode = camera_dict['mode']
110
+ speed = camera_dict['speed']
111
+ print(len(motion_list))
112
+ if len(motion_list) == 0:
113
+ angle = np.array([0,0,0])
114
+ T = np.array([0,0,0])
115
+ RT = get_camera_motion(angle, T, speed, 16)
116
+
117
+
118
+ elif len(motion_list) == 1:
119
+ angle = np.array(CAMERA[motion_list[0]]["angle"])
120
+ T = np.array(CAMERA[motion_list[0]]["T"])
121
+ print(angle, T)
122
+ RT = get_camera_motion(angle, T, speed, 16)
123
+
124
+
125
+
126
+ elif len(motion_list) == 2:
127
+ if mode == "Customized Mode 1: First A then B":
128
+ angle = np.array(CAMERA[motion_list[0]]["angle"])
129
+ T = np.array(CAMERA[motion_list[0]]["T"])
130
+ RT_0 = get_camera_motion(angle, T, speed, 8)
131
+
132
+ angle = np.array(CAMERA[motion_list[1]]["angle"])
133
+ T = np.array(CAMERA[motion_list[1]]["T"])
134
+ RT_1 = get_camera_motion(angle, T, speed, 8)
135
+
136
+ RT = combine_camera_motion(RT_0, RT_1)
137
+
138
+ elif mode == "Customized Mode 2: Both A and B":
139
+ angle = np.array(CAMERA[motion_list[0]]["angle"]) + np.array(CAMERA[motion_list[1]]["angle"])
140
+ T = np.array(CAMERA[motion_list[0]]["T"]) + np.array(CAMERA[motion_list[1]]["T"])
141
+ RT = get_camera_motion(angle, T, speed, 16)
142
+
143
+
144
+ # return RT.reshape(-1, 12)
145
+ return RT
146
+
gradio_utils/flow_utils.py ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+
3
+
4
+ def sigma_matrix2(sig_x, sig_y, theta):
5
+ """Calculate the rotated sigma matrix (two dimensional matrix).
6
+ Args:
7
+ sig_x (float):
8
+ sig_y (float):
9
+ theta (float): Radian measurement.
10
+ Returns:
11
+ ndarray: Rotated sigma matrix.
12
+ """
13
+ d_matrix = np.array([[sig_x**2, 0], [0, sig_y**2]])
14
+ u_matrix = np.array([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]])
15
+ return np.dot(u_matrix, np.dot(d_matrix, u_matrix.T))
16
+
17
+
18
+ def mesh_grid(kernel_size):
19
+ """Generate the mesh grid, centering at zero.
20
+ Args:
21
+ kernel_size (int):
22
+ Returns:
23
+ xy (ndarray): with the shape (kernel_size, kernel_size, 2)
24
+ xx (ndarray): with the shape (kernel_size, kernel_size)
25
+ yy (ndarray): with the shape (kernel_size, kernel_size)
26
+ """
27
+ ax = np.arange(-kernel_size // 2 + 1., kernel_size // 2 + 1.)
28
+ xx, yy = np.meshgrid(ax, ax)
29
+ xy = np.hstack((xx.reshape((kernel_size * kernel_size, 1)), yy.reshape(kernel_size * kernel_size,
30
+ 1))).reshape(kernel_size, kernel_size, 2)
31
+ return xy, xx, yy
32
+
33
+
34
+ def pdf2(sigma_matrix, grid):
35
+ """Calculate PDF of the bivariate Gaussian distribution.
36
+ Args:
37
+ sigma_matrix (ndarray): with the shape (2, 2)
38
+ grid (ndarray): generated by :func:`mesh_grid`,
39
+ with the shape (K, K, 2), K is the kernel size.
40
+ Returns:
41
+ kernel (ndarrray): un-normalized kernel.
42
+ """
43
+ inverse_sigma = np.linalg.inv(sigma_matrix)
44
+ kernel = np.exp(-0.5 * np.sum(np.dot(grid, inverse_sigma) * grid, 2))
45
+ return kernel
46
+
47
+ def bivariate_Gaussian(kernel_size, sig_x, sig_y, theta, grid=None, isotropic=True):
48
+ """Generate a bivariate isotropic or anisotropic Gaussian kernel.
49
+ In the isotropic mode, only `sig_x` is used. `sig_y` and `theta` is ignored.
50
+ Args:
51
+ kernel_size (int):
52
+ sig_x (float):
53
+ sig_y (float):
54
+ theta (float): Radian measurement.
55
+ grid (ndarray, optional): generated by :func:`mesh_grid`,
56
+ with the shape (K, K, 2), K is the kernel size. Default: None
57
+ isotropic (bool):
58
+ Returns:
59
+ kernel (ndarray): normalized kernel.
60
+ """
61
+ if grid is None:
62
+ grid, _, _ = mesh_grid(kernel_size)
63
+ if isotropic:
64
+ sigma_matrix = np.array([[sig_x**2, 0], [0, sig_x**2]])
65
+ else:
66
+ sigma_matrix = sigma_matrix2(sig_x, sig_y, theta)
67
+ kernel = pdf2(sigma_matrix, grid)
68
+ kernel = kernel / np.sum(kernel)
69
+ return kernel
gradio_utils/traj_utils.py ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import cv2
2
+ import numpy as np
3
+
4
+ from gradio_utils.flow_utils import bivariate_Gaussian
5
+
6
+ OBJECT_MOTION_MODE = ["Provided Trajectory", "Custom Trajectory"]
7
+
8
+ PROVIDED_TRAJS = {
9
+ "horizon_1": "examples/trajectories/horizon_2.txt",
10
+ "swaying_1": "examples/trajectories/shake_1.txt",
11
+ "swaying_2": "examples/trajectories/shake_2.txt",
12
+ "swaying_3": "examples/trajectories/shaking_10.txt",
13
+ "curve_1": "examples/trajectories/curve_1.txt",
14
+ "curve_2": "examples/trajectories/curve_2.txt",
15
+ "curve_3": "examples/trajectories/curve_3.txt",
16
+ "curve_4": "examples/trajectories/curve_4.txt",
17
+ }
18
+
19
+
20
+ def read_points(file, video_len=16, reverse=False):
21
+ with open(file, 'r') as f:
22
+ lines = f.readlines()
23
+ points = []
24
+ for line in lines:
25
+ x, y = line.strip().split(',')
26
+ points.append((int(x), int(y)))
27
+ if reverse:
28
+ points = points[::-1]
29
+
30
+ if len(points) > video_len:
31
+ skip = len(points) // video_len
32
+ points = points[::skip]
33
+ points = points[:video_len]
34
+
35
+ return points
36
+
37
+ def get_provided_traj(traj_name):
38
+ traj = read_points(PROVIDED_TRAJS[traj_name])
39
+ # xrange from 256 to 1024
40
+ traj = [[int(1024*x/256), int(1024*y/256)] for x,y in traj]
41
+ return traj
42
+
43
+ blur_kernel = bivariate_Gaussian(99, 10, 10, 0, grid=None, isotropic=True)
44
+
45
+ def process_points(points):
46
+ frames = 16
47
+ defualt_points = [[512,512]]*16
48
+
49
+ if len(points) < 2:
50
+ return defualt_points
51
+ elif len(points) >= frames:
52
+ skip = len(points)//frames
53
+ return points[::skip][:15] + points[-1:]
54
+ else:
55
+ insert_num = frames - len(points)
56
+ insert_num_dict = {}
57
+ interval = len(points) - 1
58
+ n = insert_num // interval
59
+ m = insert_num % interval
60
+ for i in range(interval):
61
+ insert_num_dict[i] = n
62
+ for i in range(m):
63
+ insert_num_dict[i] += 1
64
+
65
+ res = []
66
+ for i in range(interval):
67
+ insert_points = []
68
+ x0,y0 = points[i]
69
+ x1,y1 = points[i+1]
70
+
71
+ delta_x = x1 - x0
72
+ delta_y = y1 - y0
73
+ for j in range(insert_num_dict[i]):
74
+ x = x0 + (j+1)/(insert_num_dict[i]+1)*delta_x
75
+ y = y0 + (j+1)/(insert_num_dict[i]+1)*delta_y
76
+ insert_points.append([int(x), int(y)])
77
+
78
+ res += points[i:i+1] + insert_points
79
+ res += points[-1:]
80
+ return res
81
+
82
+ def get_flow(points, video_len=16):
83
+ optical_flow = np.zeros((video_len, 256, 256, 2), dtype=np.float32)
84
+ for i in range(video_len-1):
85
+ p = points[i]
86
+ p1 = points[i+1]
87
+ optical_flow[i+1, p[1], p[0], 0] = p1[0] - p[0]
88
+ optical_flow[i+1, p[1], p[0], 1] = p1[1] - p[1]
89
+ for i in range(1, video_len):
90
+ optical_flow[i] = cv2.filter2D(optical_flow[i], -1, blur_kernel)
91
+
92
+
93
+ return optical_flow
94
+
95
+
96
+ def process_traj(points, device='cpu'):
97
+ xy_range = 1024
98
+ points = process_points(points)
99
+ points = [[int(256*x/xy_range), int(256*y/xy_range)] for x,y in points]
100
+
101
+ optical_flow = get_flow(points)
102
+ # optical_flow = torch.tensor(optical_flow).to(device)
103
+
104
+ return optical_flow
gradio_utils/utils.py ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import plotly.express as px
3
+ import plotly.graph_objects as go
4
+
5
+ def vis_camera(RT_list, rescale_T=1):
6
+ fig = go.Figure()
7
+ showticklabels = True
8
+ visible = True
9
+ scene_bounds = 2
10
+ base_radius = 2.5
11
+ zoom_scale = 1.5
12
+ fov_deg = 50.0
13
+
14
+ edges = [(0, 1), (0, 2), (0, 3), (1, 2), (2, 3), (3, 1), (3, 4)]
15
+
16
+ colors = px.colors.qualitative.Plotly
17
+
18
+ cone_list = []
19
+ n = len(RT_list)
20
+ for i, RT in enumerate(RT_list):
21
+ R = RT[:,:3]
22
+ T = RT[:,-1]/rescale_T
23
+ cone = calc_cam_cone_pts_3d(R, T, fov_deg)
24
+ cone_list.append((cone, (i*1/n, "green"), f"view_{i}"))
25
+
26
+
27
+ for (cone, clr, legend) in cone_list:
28
+ for (i, edge) in enumerate(edges):
29
+ (x1, x2) = (cone[edge[0], 0], cone[edge[1], 0])
30
+ (y1, y2) = (cone[edge[0], 1], cone[edge[1], 1])
31
+ (z1, z2) = (cone[edge[0], 2], cone[edge[1], 2])
32
+ fig.add_trace(go.Scatter3d(
33
+ x=[x1, x2], y=[y1, y2], z=[z1, z2], mode='lines',
34
+ line=dict(color=clr, width=3),
35
+ name=legend, showlegend=(i == 0)))
36
+ fig.update_layout(
37
+ height=500,
38
+ autosize=True,
39
+ # hovermode=False,
40
+ margin=go.layout.Margin(l=0, r=0, b=0, t=0),
41
+
42
+ showlegend=True,
43
+ legend=dict(
44
+ yanchor='bottom',
45
+ y=0.01,
46
+ xanchor='right',
47
+ x=0.99,
48
+ ),
49
+ scene=dict(
50
+ aspectmode='manual',
51
+ aspectratio=dict(x=1, y=1, z=1.0),
52
+ camera=dict(
53
+ center=dict(x=0.0, y=0.0, z=0.0),
54
+ up=dict(x=0.0, y=-1.0, z=0.0),
55
+ eye=dict(x=scene_bounds/2, y=-scene_bounds/2, z=-scene_bounds/2),
56
+ ),
57
+
58
+ xaxis=dict(
59
+ range=[-scene_bounds, scene_bounds],
60
+ showticklabels=showticklabels,
61
+ visible=visible,
62
+ ),
63
+
64
+
65
+ yaxis=dict(
66
+ range=[-scene_bounds, scene_bounds],
67
+ showticklabels=showticklabels,
68
+ visible=visible,
69
+ ),
70
+
71
+
72
+ zaxis=dict(
73
+ range=[-scene_bounds, scene_bounds],
74
+ showticklabels=showticklabels,
75
+ visible=visible,
76
+ )
77
+ ))
78
+ return fig
79
+
80
+
81
+ def calc_cam_cone_pts_3d(R_W2C, T_W2C, fov_deg, scale=0.1, set_canonical=False, first_frame_RT=None):
82
+ fov_rad = np.deg2rad(fov_deg)
83
+ R_W2C_inv = np.linalg.inv(R_W2C)
84
+
85
+ # Camera pose center:
86
+ T = np.zeros_like(T_W2C) - T_W2C
87
+ T = np.dot(R_W2C_inv, T)
88
+ cam_x = T[0]
89
+ cam_y = T[1]
90
+ cam_z = T[2]
91
+ if set_canonical:
92
+ T = np.zeros_like(T_W2C)
93
+ T = np.dot(first_frame_RT[:,:3], T) + first_frame_RT[:,-1]
94
+ T = T - T_W2C
95
+ T = np.dot(R_W2C_inv, T)
96
+ cam_x = T[0]
97
+ cam_y = T[1]
98
+ cam_z = T[2]
99
+
100
+ # vertex
101
+ corn1 = np.array([np.tan(fov_rad / 2.0), 0.5*np.tan(fov_rad / 2.0), 1.0]) *scale
102
+ corn2 = np.array([-np.tan(fov_rad / 2.0), 0.5*np.tan(fov_rad / 2.0), 1.0]) *scale
103
+ corn3 = np.array([0, -0.25*np.tan(fov_rad / 2.0), 1.0]) *scale
104
+ corn4 = np.array([0, -0.5*np.tan(fov_rad / 2.0), 1.0]) *scale
105
+
106
+ corn1 = corn1 - T_W2C
107
+ corn2 = corn2 - T_W2C
108
+ corn3 = corn3 - T_W2C
109
+ corn4 = corn4 - T_W2C
110
+
111
+ corn1 = np.dot(R_W2C_inv, corn1)
112
+ corn2 = np.dot(R_W2C_inv, corn2)
113
+ corn3 = np.dot(R_W2C_inv, corn3)
114
+ corn4 = np.dot(R_W2C_inv, corn4)
115
+
116
+ # Now attach as offset to actual 3D camera position:
117
+ corn_x1 = corn1[0]
118
+ corn_y1 = corn1[1]
119
+ corn_z1 = corn1[2]
120
+
121
+ corn_x2 = corn2[0]
122
+ corn_y2 = corn2[1]
123
+ corn_z2 = corn2[2]
124
+
125
+ corn_x3 = corn3[0]
126
+ corn_y3 = corn3[1]
127
+ corn_z3 = corn3[2]
128
+
129
+ corn_x4 = corn4[0]
130
+ corn_y4 = corn4[1]
131
+ corn_z4 = corn4[2]
132
+
133
+
134
+ xs = [cam_x, corn_x1, corn_x2, corn_x3, corn_x4, ]
135
+ ys = [cam_y, corn_y1, corn_y2, corn_y3, corn_y4, ]
136
+ zs = [cam_z, corn_z1, corn_z2, corn_z3, corn_z4, ]
137
+
138
+ return np.array([xs, ys, zs]).T
139
+
140
+
141
+
142
+ # T_base = [
143
+ # [1.,0.,0.], ## W2C x 的正方向: 相机朝左 left
144
+ # [-1.,0.,0.], ## W2C x 的负方向: 相机朝右 right
145
+ # [0., 1., 0.], ## W2C y 的正方向: 相机朝上 up
146
+ # [0.,-1.,0.], ## W2C y 的负方向: 相机朝下 down
147
+ # [0.,0.,1.], ## W2C z 的正方向: 相机往前 zoom out
148
+ # [0.,0.,-1.], ## W2C z 的负方向: 相机往前 zoom in
149
+ # ]
150
+ # radius = 1
151
+ # n = 16
152
+ # # step =
153
+ # look_at = np.array([0, 0, 0.8]).reshape(3,1)
154
+ # # look_at = np.array([0, 0, 0.2]).reshape(3,1)
155
+
156
+ # T_list = []
157
+ # base_R = np.array([[1., 0., 0.],
158
+ # [0., 1., 0.],
159
+ # [0., 0., 1.]])
160
+ # res = []
161
+ # res_forsave = []
162
+ # T_range = 1.8
163
+
164
+
165
+
166
+ # for i in range(0, 16):
167
+ # # theta = (1)*np.pi*i/n
168
+
169
+ # R = base_R[:,:3]
170
+ # T = np.array([0.,0.,1.]).reshape(3,1) * (i/n)*2
171
+ # RT = np.concatenate([R,T], axis=1)
172
+ # res.append(RT)
173
+
174
+ # fig = vis_camera(res)
175
+
lvdm/basics.py ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # adopted from
2
+ # https://github.com/openai/improved-diffusion/blob/main/improved_diffusion/gaussian_diffusion.py
3
+ # and
4
+ # https://github.com/lucidrains/denoising-diffusion-pytorch/blob/7706bdfc6f527f58d33f84b7b522e61e6e3164b3/denoising_diffusion_pytorch/denoising_diffusion_pytorch.py
5
+ # and
6
+ # https://github.com/openai/guided-diffusion/blob/0ba878e517b276c45d1195eb29f6f5f72659a05b/guided_diffusion/nn.py
7
+ #
8
+ # thanks!
9
+
10
+ import numpy as np
11
+ from einops import repeat
12
+
13
+ import torch
14
+ import torch.nn as nn
15
+ import torch.nn.functional as F
16
+
17
+ from utils.utils import instantiate_from_config
18
+
19
+
20
+ def disabled_train(self, mode=True):
21
+ """Overwrite model.train with this function to make sure train/eval mode
22
+ does not change anymore."""
23
+ return self
24
+
25
+ def zero_module(module):
26
+ """
27
+ Zero out the parameters of a module and return it.
28
+ """
29
+ for p in module.parameters():
30
+ p.detach().zero_()
31
+ return module
32
+
33
+ def scale_module(module, scale):
34
+ """
35
+ Scale the parameters of a module and return it.
36
+ """
37
+ for p in module.parameters():
38
+ p.detach().mul_(scale)
39
+ return module
40
+
41
+
42
+ def conv_nd(dims, *args, **kwargs):
43
+ """
44
+ Create a 1D, 2D, or 3D convolution module.
45
+ """
46
+ if dims == 1:
47
+ return nn.Conv1d(*args, **kwargs)
48
+ elif dims == 2:
49
+ return nn.Conv2d(*args, **kwargs)
50
+ elif dims == 3:
51
+ return nn.Conv3d(*args, **kwargs)
52
+ raise ValueError(f"unsupported dimensions: {dims}")
53
+
54
+
55
+ def linear(*args, **kwargs):
56
+ """
57
+ Create a linear module.
58
+ """
59
+ return nn.Linear(*args, **kwargs)
60
+
61
+
62
+ def avg_pool_nd(dims, *args, **kwargs):
63
+ """
64
+ Create a 1D, 2D, or 3D average pooling module.
65
+ """
66
+ if dims == 1:
67
+ return nn.AvgPool1d(*args, **kwargs)
68
+ elif dims == 2:
69
+ return nn.AvgPool2d(*args, **kwargs)
70
+ elif dims == 3:
71
+ return nn.AvgPool3d(*args, **kwargs)
72
+ raise ValueError(f"unsupported dimensions: {dims}")
73
+
74
+
75
+ def nonlinearity(type='silu'):
76
+ if type == 'silu':
77
+ return nn.SiLU()
78
+ elif type == 'leaky_relu':
79
+ return nn.LeakyReLU()
80
+
81
+
82
+ class GroupNormSpecific(nn.GroupNorm):
83
+ def forward(self, x):
84
+ return super().forward(x.float()).type(x.dtype)
85
+
86
+
87
+ def normalization(channels, num_groups=32):
88
+ """
89
+ Make a standard normalization layer.
90
+ :param channels: number of input channels.
91
+ :return: an nn.Module for normalization.
92
+ """
93
+ return GroupNormSpecific(num_groups, channels)
94
+
95
+
96
+ class HybridConditioner(nn.Module):
97
+
98
+ def __init__(self, c_concat_config, c_crossattn_config):
99
+ super().__init__()
100
+ self.concat_conditioner = instantiate_from_config(c_concat_config)
101
+ self.crossattn_conditioner = instantiate_from_config(c_crossattn_config)
102
+
103
+ def forward(self, c_concat, c_crossattn):
104
+ c_concat = self.concat_conditioner(c_concat)
105
+ c_crossattn = self.crossattn_conditioner(c_crossattn)
106
+ return {'c_concat': [c_concat], 'c_crossattn': [c_crossattn]}
lvdm/common.py ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os, math
2
+ import numpy as np
3
+ from inspect import isfunction
4
+
5
+ import torch
6
+ from torch import nn
7
+ import torch.nn.functional as F
8
+ import torch.distributed as dist
9
+
10
+
11
+ def gather_data(data, return_np=True):
12
+ ''' gather data from multiple processes to one list '''
13
+ data_list = [torch.zeros_like(data) for _ in range(dist.get_world_size())]
14
+ dist.all_gather(data_list, data) # gather not supported with NCCL
15
+ if return_np:
16
+ data_list = [data.cpu().numpy() for data in data_list]
17
+ return data_list
18
+
19
+ def autocast(f):
20
+ def do_autocast(*args, **kwargs):
21
+ with torch.cuda.amp.autocast(enabled=True,
22
+ dtype=torch.get_autocast_gpu_dtype(),
23
+ cache_enabled=torch.is_autocast_cache_enabled()):
24
+ return f(*args, **kwargs)
25
+ return do_autocast
26
+
27
+
28
+ def extract_into_tensor(a, t, x_shape):
29
+ b, *_ = t.shape
30
+ out = a.gather(-1, t)
31
+ return out.reshape(b, *((1,) * (len(x_shape) - 1)))
32
+
33
+
34
+ def noise_like(shape, device, repeat=False):
35
+ repeat_noise = lambda: torch.randn((1, *shape[1:]), device=device).repeat(shape[0], *((1,) * (len(shape) - 1)))
36
+ noise = lambda: torch.randn(shape, device=device)
37
+ return repeat_noise() if repeat else noise()
38
+
39
+
40
+ def default(val, d):
41
+ if exists(val):
42
+ return val
43
+ return d() if isfunction(d) else d
44
+
45
+ def exists(val):
46
+ return val is not None
47
+
48
+ def identity(*args, **kwargs):
49
+ return nn.Identity()
50
+
51
+ def uniq(arr):
52
+ return{el: True for el in arr}.keys()
53
+
54
+ def mean_flat(tensor):
55
+ """
56
+ Take the mean over all non-batch dimensions.
57
+ """
58
+ return tensor.mean(dim=list(range(1, len(tensor.shape))))
59
+
60
+ def ismap(x):
61
+ if not isinstance(x, torch.Tensor):
62
+ return False
63
+ return (len(x.shape) == 4) and (x.shape[1] > 3)
64
+
65
+ def isimage(x):
66
+ if not isinstance(x,torch.Tensor):
67
+ return False
68
+ return (len(x.shape) == 4) and (x.shape[1] == 3 or x.shape[1] == 1)
69
+
70
+ def max_neg_value(t):
71
+ return -torch.finfo(t.dtype).max
72
+
73
+ def shape_to_str(x):
74
+ shape_str = "x".join([str(x) for x in x.shape])
75
+ return shape_str
76
+
77
+ def init_(tensor):
78
+ dim = tensor.shape[-1]
79
+ std = 1 / math.sqrt(dim)
80
+ tensor.uniform_(-std, std)
81
+ return tensor
82
+
83
+ #import deepspeed
84
+ #ckpt = deepspeed.checkpointing.checkpoint
85
+ ckpt = torch.utils.checkpoint.checkpoint
86
+ def checkpoint(func, inputs, params, flag):
87
+ """
88
+ Evaluate a function without caching intermediate activations, allowing for
89
+ reduced memory at the expense of extra compute in the backward pass.
90
+ :param func: the function to evaluate.
91
+ :param inputs: the argument sequence to pass to `func`.
92
+ :param params: a sequence of parameters `func` depends on but does not
93
+ explicitly take as arguments.
94
+ :param flag: if False, disable gradient checkpointing.
95
+ """
96
+ if flag:
97
+ try:
98
+ return ckpt(func, *inputs)
99
+ except:
100
+ args = tuple(inputs) + tuple(params)
101
+ return CheckpointFunction.apply(func, len(inputs), *args)
102
+ else:
103
+ return func(*inputs)
104
+
105
+
106
+ class CheckpointFunction(torch.autograd.Function):
107
+ @staticmethod
108
+ @torch.cuda.amp.custom_fwd
109
+ def forward(ctx, run_function, length, *args):
110
+ ctx.run_function = run_function
111
+ ctx.input_tensors = list(args[:length])
112
+ ctx.input_params = list(args[length:])
113
+
114
+ with torch.no_grad():
115
+ output_tensors = ctx.run_function(*ctx.input_tensors)
116
+ return output_tensors
117
+
118
+ @staticmethod
119
+ @torch.cuda.amp.custom_bwd # add this
120
+ def backward(ctx, *output_grads):
121
+ '''
122
+ for x in ctx.input_tensors:
123
+ if isinstance(x, int):
124
+ print('-----------------', ctx.run_function)
125
+ '''
126
+ ctx.input_tensors = [x.detach().requires_grad_(True) for x in ctx.input_tensors]
127
+ with torch.enable_grad():
128
+ # Fixes a bug where the first op in run_function modifies the
129
+ # Tensor storage in place, which is not allowed for detach()'d
130
+ # Tensors.
131
+ shallow_copies = [x.view_as(x) for x in ctx.input_tensors]
132
+ output_tensors = ctx.run_function(*shallow_copies)
133
+ input_grads = torch.autograd.grad(
134
+ output_tensors,
135
+ ctx.input_tensors + ctx.input_params,
136
+ output_grads,
137
+ allow_unused=True,
138
+ )
139
+ del ctx.input_tensors
140
+ del ctx.input_params
141
+ del output_tensors
142
+ return (None, None) + input_grads
lvdm/distributions.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import numpy as np
3
+
4
+
5
+ class AbstractDistribution:
6
+ def sample(self):
7
+ raise NotImplementedError()
8
+
9
+ def mode(self):
10
+ raise NotImplementedError()
11
+
12
+
13
+ class DiracDistribution(AbstractDistribution):
14
+ def __init__(self, value):
15
+ self.value = value
16
+
17
+ def sample(self):
18
+ return self.value
19
+
20
+ def mode(self):
21
+ return self.value
22
+
23
+
24
+ class DiagonalGaussianDistribution(object):
25
+ def __init__(self, parameters, deterministic=False):
26
+ self.parameters = parameters
27
+ self.mean, self.logvar = torch.chunk(parameters, 2, dim=1)
28
+ self.logvar = torch.clamp(self.logvar, -30.0, 20.0)
29
+ self.deterministic = deterministic
30
+ self.std = torch.exp(0.5 * self.logvar)
31
+ self.var = torch.exp(self.logvar)
32
+ if self.deterministic:
33
+ self.var = self.std = torch.zeros_like(self.mean).to(device=self.parameters.device)
34
+
35
+ def sample(self, noise=None):
36
+ if noise is None:
37
+ noise = torch.randn(self.mean.shape)
38
+
39
+ x = self.mean + self.std * noise.to(device=self.parameters.device)
40
+ return x
41
+
42
+ def kl(self, other=None):
43
+ if self.deterministic:
44
+ return torch.Tensor([0.])
45
+ else:
46
+ if other is None:
47
+ return 0.5 * torch.sum(torch.pow(self.mean, 2)
48
+ + self.var - 1.0 - self.logvar,
49
+ dim=[1, 2, 3])
50
+ else:
51
+ return 0.5 * torch.sum(
52
+ torch.pow(self.mean - other.mean, 2) / other.var
53
+ + self.var / other.var - 1.0 - self.logvar + other.logvar,
54
+ dim=[1, 2, 3])
55
+
56
+ def nll(self, sample, dims=[1,2,3]):
57
+ if self.deterministic:
58
+ return torch.Tensor([0.])
59
+ logtwopi = np.log(2.0 * np.pi)
60
+ return 0.5 * torch.sum(
61
+ logtwopi + self.logvar + torch.pow(sample - self.mean, 2) / self.var,
62
+ dim=dims)
63
+
64
+ def mode(self):
65
+ return self.mean
66
+
67
+
68
+ def normal_kl(mean1, logvar1, mean2, logvar2):
69
+ """
70
+ source: https://github.com/openai/guided-diffusion/blob/27c20a8fab9cb472df5d6bdd6c8d11c8f430b924/guided_diffusion/losses.py#L12
71
+ Compute the KL divergence between two gaussians.
72
+ Shapes are automatically broadcasted, so batches can be compared to
73
+ scalars, among other use cases.
74
+ """
75
+ tensor = None
76
+ for obj in (mean1, logvar1, mean2, logvar2):
77
+ if isinstance(obj, torch.Tensor):
78
+ tensor = obj
79
+ break
80
+ assert tensor is not None, "at least one argument must be a Tensor"
81
+
82
+ # Force variances to be Tensors. Broadcasting helps convert scalars to
83
+ # Tensors, but it does not work for torch.exp().
84
+ logvar1, logvar2 = [
85
+ x if isinstance(x, torch.Tensor) else torch.tensor(x).to(tensor)
86
+ for x in (logvar1, logvar2)
87
+ ]
88
+
89
+ return 0.5 * (
90
+ -1.0
91
+ + logvar2
92
+ - logvar1
93
+ + torch.exp(logvar1 - logvar2)
94
+ + ((mean1 - mean2) ** 2) * torch.exp(-logvar2)
95
+ )
lvdm/ema.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from torch import nn
3
+
4
+
5
+ class LitEma(nn.Module):
6
+ def __init__(self, model, decay=0.9999, use_num_upates=True):
7
+ super().__init__()
8
+ if decay < 0.0 or decay > 1.0:
9
+ raise ValueError('Decay must be between 0 and 1')
10
+
11
+ self.m_name2s_name = {}
12
+ self.register_buffer('decay', torch.tensor(decay, dtype=torch.float32))
13
+ self.register_buffer('num_updates', torch.tensor(0,dtype=torch.int) if use_num_upates
14
+ else torch.tensor(-1,dtype=torch.int))
15
+
16
+ for name, p in model.named_parameters():
17
+ if p.requires_grad:
18
+ #remove as '.'-character is not allowed in buffers
19
+ s_name = name.replace('.','')
20
+ self.m_name2s_name.update({name:s_name})
21
+ self.register_buffer(s_name,p.clone().detach().data)
22
+
23
+ self.collected_params = []
24
+
25
+ def forward(self,model):
26
+ decay = self.decay
27
+
28
+ if self.num_updates >= 0:
29
+ self.num_updates += 1
30
+ decay = min(self.decay,(1 + self.num_updates) / (10 + self.num_updates))
31
+
32
+ one_minus_decay = 1.0 - decay
33
+
34
+ with torch.no_grad():
35
+ m_param = dict(model.named_parameters())
36
+ shadow_params = dict(self.named_buffers())
37
+
38
+ for key in m_param:
39
+ if m_param[key].requires_grad:
40
+ sname = self.m_name2s_name[key]
41
+ shadow_params[sname] = shadow_params[sname].type_as(m_param[key])
42
+ shadow_params[sname].sub_(one_minus_decay * (shadow_params[sname] - m_param[key]))
43
+ else:
44
+ assert not key in self.m_name2s_name
45
+
46
+ def copy_to(self, model):
47
+ m_param = dict(model.named_parameters())
48
+ shadow_params = dict(self.named_buffers())
49
+ for key in m_param:
50
+ if m_param[key].requires_grad:
51
+ m_param[key].data.copy_(shadow_params[self.m_name2s_name[key]].data)
52
+ else:
53
+ assert not key in self.m_name2s_name
54
+
55
+ def store(self, parameters):
56
+ """
57
+ Save the current parameters for restoring later.
58
+ Args:
59
+ parameters: Iterable of `torch.nn.Parameter`; the parameters to be
60
+ temporarily stored.
61
+ """
62
+ self.collected_params = [param.clone() for param in parameters]
63
+
64
+ def restore(self, parameters):
65
+ """
66
+ Restore the parameters stored with the `store` method.
67
+ Useful to validate the model with EMA parameters without affecting the
68
+ original optimization process. Store the parameters before the
69
+ `copy_to` method. After validation (or model saving), use this to
70
+ restore the former parameters.
71
+ Args:
72
+ parameters: Iterable of `torch.nn.Parameter`; the parameters to be
73
+ updated with the stored parameters.
74
+ """
75
+ for c_param, param in zip(self.collected_params, parameters):
76
+ param.data.copy_(c_param.data)