├── license.txt
├── hand_spheres.jpg
├── hand_cylinders.jpg
├── loop.oni
├── hand-object.oni
├── .gitattributes
├── runme.bat
├── runme.sh
├── .gitignore
├── media
├── cube.obj
├── cylinder_low.obj
├── openni.xml
├── sphere_low.obj
└── hand_right_low_RH.xml
├── libraries_README.txt
├── README.md
└── src
├── SingleHandTracking.py
└── HandObjectTracking.py
/license.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FORTH-ModelBasedTracker/HandTracker/HEAD/license.txt
--------------------------------------------------------------------------------
/hand_spheres.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FORTH-ModelBasedTracker/HandTracker/HEAD/hand_spheres.jpg
--------------------------------------------------------------------------------
/hand_cylinders.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FORTH-ModelBasedTracker/HandTracker/HEAD/hand_cylinders.jpg
--------------------------------------------------------------------------------
/loop.oni:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:1cf7a082fc983d8ffd3ef92f728bc1f45ce50df96cb6b26354ffbbe4bc503927
3 | size 38766259
4 |
--------------------------------------------------------------------------------
/hand-object.oni:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:b431df21a858da1c00d08f500aa163960525935e7a70e6a642b424ee93523d45
3 | size 161930523
4 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | hand-object.oni filter=lfs diff=lfs merge=lfs -text
2 | loop.oni filter=lfs diff=lfs merge=lfs -text
3 | hand-object.oni filter=lfs diff=lfs merge=lfs -text
4 |
--------------------------------------------------------------------------------
/runme.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | echo MBV_LIBS Environment variable should point to the MBV libraries folder.
3 | echo MBV_LIBS %MBV_LIBS%
4 | echo Setting PATH and PYTHONPATH
5 | set PATH=%MBV_LIBS%\libs;%PATH%
6 | set PYTHONPATH=%MBV_LIBS%\python_libs;%PYTHONPATH%
7 |
8 | echo "Running the Single Hand Tracker script..."
9 | python src\SingleHandTracking.py
--------------------------------------------------------------------------------
/runme.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | echo "MBV_LIBS Environment variable should point to the MBV libraries folder."
3 | echo "MBV_LIBS" $MBV_LIBS
4 | echo "Setting LD_LIBRARY_PATH and PYTHONPATH"
5 | export LD_LIBRARY_PATH=$MBV_LIBS/libs:$LD_LIBRARY_PATH
6 | export PYTHONPATH=$MBV_LIBS/python_libs:$PYTHONPATH
7 |
8 | echo "Running the Single Hand Tracker script..."
9 | python src/SingleHandTracking.py
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 |
5 | # C extensions
6 | *.so
7 |
8 | # Distribution / packaging
9 | .Python
10 | env/
11 | build/
12 | develop-eggs/
13 | dist/
14 | eggs/
15 | lib/
16 | lib64/
17 | parts/
18 | sdist/
19 | var/
20 | *.egg-info/
21 | .installed.cfg
22 | *.egg
23 |
24 | # Installer logs
25 | pip-log.txt
26 | pip-delete-this-directory.txt
27 |
28 | # Unit test / coverage reports
29 | htmlcov/
30 | .tox/
31 | .coverage
32 | .cache
33 | nosetests.xml
34 | coverage.xml
35 |
36 | # Translations
37 | *.mo
38 | *.pot
39 |
40 | # Django stuff:
41 | *.log
42 |
43 | # Sphinx documentation
44 | docs/_build/
45 | .idea
46 |
--------------------------------------------------------------------------------
/media/cube.obj:
--------------------------------------------------------------------------------
1 | # Blender v2.64 (sub 0) OBJ File: ''
2 | # www.blender.org
3 | mtllib cube.mtl
4 | o Cube
5 | v 1.000000 -1.000000 -1.000000
6 | v 1.000000 -1.000000 1.000000
7 | v -1.000000 -1.000000 1.000000
8 | v -1.000000 -1.000000 -1.000000
9 | v 1.000000 1.000000 -0.999999
10 | v 0.999999 1.000000 1.000001
11 | v -1.000000 1.000000 1.000000
12 | v -1.000000 1.000000 -1.000000
13 | vn 0.000000 -1.000000 0.000000
14 | vn 0.000000 1.000000 0.000000
15 | vn 1.000000 0.000000 0.000000
16 | vn -0.000000 -0.000000 1.000000
17 | vn -1.000000 -0.000000 -0.000000
18 | vn 0.000000 0.000000 -1.000000
19 | usemtl Material
20 | s off
21 | f 1//1 2//1 3//1 4//1
22 | f 5//2 8//2 7//2 6//2
23 | f 1//3 5//3 6//3 2//3
24 | f 2//4 6//4 7//4 3//4
25 | f 3//5 7//5 8//5 4//5
26 | f 5//6 1//6 4//6 8//6
27 |
--------------------------------------------------------------------------------
/libraries_README.txt:
--------------------------------------------------------------------------------
1 | =======================================================
2 | = FORTH Model Based Vision and Hand Tracker Libraries =
3 | =======================================================
4 |
5 | Info
6 | ------
7 |
8 | Project Home: http://cvrlcode.ics.forth.gr/handtracking/
9 | Github: https://github.com/FORTH-ModelBasedTracker
10 |
11 | Licence
12 | --------
13 |
14 | For the licence of the FORTH MBV libraries check the
15 | licence.txt.
16 |
17 | This package contains third party libs with different licences
18 | Check each project's home page for licence information:
19 |
20 | * Boost: http://www.boost.org/
21 | * CUDA runtime: https://developer.nvidia.com/cuda-zone
22 | * OpenMesh: http://www.openmesh.org/
23 | * OpenCV: http://opencv.org/license.html
24 | * GLEW: http://glew.sourceforge.net/credits.html
25 | * FreeGLUT: http://freeglut.sourceforge.net/
26 | * Thread Building Blocks: https://www.threadingbuildingblocks.org/licensing
27 | * Bullet: http://bulletphysics.org/mediawiki-1.5.8/index.php/LICENSE
28 | * Python: https://www.python.org/download/releases/2.7/license/
29 | * OpenNI: https://github.com/OpenNI/OpenNI/blob/master/LICENSE
30 | * Kinect 2 SDK: http://download.microsoft.com/download/0/D/C/0DC5308E-36A7-4DCD-B299-B01CDFC8E345/Kinect-SDK2.0-EULA_en-US.pdf
31 |
32 | ==========================================================
33 |
--------------------------------------------------------------------------------
/media/cylinder_low.obj:
--------------------------------------------------------------------------------
1 | # Blender v2.64 (sub 0) OBJ File: ''
2 | # www.blender.org
3 | mtllib cylinder.mtl
4 | o Cylinder
5 | v 0.000000 1.000000 -1.000000
6 | v 0.000001 1.000000 1.000000
7 | v 0.587786 0.809016 1.000000
8 | v 0.587785 0.809017 -1.000000
9 | v 0.951057 0.309016 1.000000
10 | v 0.951057 0.309017 -1.000000
11 | v 0.951056 -0.309018 1.000000
12 | v 0.951056 -0.309017 -1.000000
13 | v 0.587784 -0.809018 1.000000
14 | v 0.587785 -0.809017 -1.000000
15 | v -0.000002 -1.000000 1.000000
16 | v -0.000000 -1.000000 -1.000000
17 | v -0.587787 -0.809016 1.000000
18 | v -0.587785 -0.809017 -1.000000
19 | v -0.951057 -0.309015 1.000000
20 | v -0.951056 -0.309017 -1.000000
21 | v -0.951056 0.309020 1.000000
22 | v -0.951056 0.309017 -1.000000
23 | v -0.587783 0.809019 1.000000
24 | v -0.587785 0.809017 -1.000000
25 | vn 0.309018 0.951056 -0.000000
26 | vn 0.309017 0.951057 0.000000
27 | vn 0.809018 0.587784 -0.000000
28 | vn 0.809017 0.587785 0.000000
29 | vn 1.000000 -0.000001 -0.000000
30 | vn 1.000000 -0.000000 0.000000
31 | vn 0.809016 -0.587786 -0.000000
32 | vn 0.809017 -0.587785 0.000000
33 | vn 0.309015 -0.951057 -0.000000
34 | vn 0.309017 -0.951057 0.000000
35 | vn -0.309019 -0.951056 -0.000000
36 | vn -0.309017 -0.951056 0.000000
37 | vn -0.809018 -0.587783 -0.000000
38 | vn -0.809017 -0.587785 0.000000
39 | vn -1.000000 0.000003 -0.000000
40 | vn -1.000000 0.000000 0.000000
41 | vn -0.809015 0.587788 -0.000000
42 | vn -0.809017 0.587785 0.000000
43 | vn -0.309017 0.951057 0.000000
44 | vn -0.309015 0.951057 -0.000000
45 | usemtl
46 | s off
47 | f 1//1 2//1 3//1
48 | f 4//2 1//2 3//2
49 | f 4//3 3//3 5//3
50 | f 5//4 6//4 4//4
51 | f 6//5 5//5 7//5
52 | f 7//6 8//6 6//6
53 | f 8//7 7//7 9//7
54 | f 9//8 10//8 8//8
55 | f 10//9 9//9 11//9
56 | f 11//10 12//10 10//10
57 | f 12//11 11//11 13//11
58 | f 13//12 14//12 12//12
59 | f 14//13 13//13 15//13
60 | f 15//14 16//14 14//14
61 | f 16//15 15//15 17//15
62 | f 17//16 18//16 16//16
63 | f 18//17 17//17 19//17
64 | f 19//18 20//18 18//18
65 | f 2//19 1//19 20//19
66 | f 20//20 19//20 2//20
67 |
--------------------------------------------------------------------------------
/media/openni.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
38 |
39 |
40 |
48 |
49 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/media/sphere_low.obj:
--------------------------------------------------------------------------------
1 | # Blender v2.64 (sub 0) OBJ File: ''
2 | # www.blender.org
3 | mtllib sphere.mtl
4 | o Sphere
5 | v 0.262869 -0.809012 -0.525738
6 | v -0.276385 -0.850640 -0.447215
7 | v -0.162456 -0.499995 -0.850654
8 | v 0.425323 -0.309011 -0.850654
9 | v 0.723600 -0.525720 -0.447215
10 | v 0.000000 0.000000 -1.000000
11 | v 0.850648 0.000000 -0.525736
12 | v 0.425323 0.309011 -0.850654
13 | v 0.723600 0.525720 -0.447215
14 | v -0.688189 -0.499997 -0.525736
15 | v -0.894425 0.000000 -0.447215
16 | v -0.525730 0.000000 -0.850652
17 | v -0.688189 0.499997 -0.525736
18 | v -0.276385 0.850640 -0.447215
19 | v -0.162456 0.499995 -0.850654
20 | v 0.262869 0.809012 -0.525738
21 | v 0.951058 -0.309013 0.000000
22 | v 0.951058 0.309013 0.000000
23 | v 0.894425 0.000000 0.447215
24 | v 0.000000 -1.000000 0.000000
25 | v 0.587786 -0.809017 0.000000
26 | v 0.276385 -0.850640 0.447215
27 | v -0.951058 -0.309013 0.000000
28 | v -0.587786 -0.809017 0.000000
29 | v -0.723600 -0.525720 0.447215
30 | v -0.587786 0.809017 0.000000
31 | v -0.951058 0.309013 0.000000
32 | v -0.723600 0.525720 0.447215
33 | v 0.587786 0.809017 0.000000
34 | v 0.000000 1.000000 0.000000
35 | v 0.276385 0.850640 0.447215
36 | v 0.688189 -0.499997 0.525736
37 | v -0.262869 -0.809012 0.525738
38 | v -0.850648 0.000000 0.525736
39 | v -0.262869 0.809012 0.525738
40 | v 0.688189 0.499997 0.525736
41 | v 0.162456 -0.499995 0.850654
42 | v 0.525730 0.000000 0.850652
43 | v 0.000000 0.000000 1.000000
44 | v -0.425323 -0.309011 0.850654
45 | v -0.425323 0.309011 0.850654
46 | v 0.162456 0.499995 0.850654
47 | vn -0.038547 -0.748789 -0.661687
48 | vn 0.187594 -0.577345 -0.794658
49 | vn 0.471318 -0.583121 -0.661687
50 | vn 0.102381 -0.315090 -0.943523
51 | vn 0.700228 -0.268049 -0.661687
52 | vn 0.607060 0.000000 -0.794656
53 | vn 0.700228 0.268049 -0.661688
54 | vn 0.331305 0.000000 -0.943524
55 | vn -0.724044 -0.194734 -0.661694
56 | vn -0.491119 -0.356821 -0.794658
57 | vn -0.408939 -0.628443 -0.661686
58 | vn -0.268034 -0.194737 -0.943523
59 | vn -0.408939 0.628443 -0.661686
60 | vn -0.491119 0.356821 -0.794657
61 | vn -0.724044 0.194734 -0.661694
62 | vn -0.268034 0.194736 -0.943523
63 | vn 0.471317 0.583121 -0.661687
64 | vn 0.187594 0.577345 -0.794658
65 | vn -0.038547 0.748789 -0.661687
66 | vn 0.102381 0.315090 -0.943523
67 | vn 0.904981 -0.268049 -0.330393
68 | vn 0.982246 0.000000 -0.187599
69 | vn 0.992077 0.000000 0.125631
70 | vn 0.904981 0.268049 -0.330393
71 | vn 0.024726 -0.943519 -0.330395
72 | vn 0.303531 -0.934171 -0.187597
73 | vn 0.306568 -0.943519 0.125651
74 | vn 0.534590 -0.777851 -0.330395
75 | vn -0.889698 -0.315092 -0.330386
76 | vn -0.794656 -0.577348 -0.187595
77 | vn -0.802607 -0.583125 0.125648
78 | vn -0.574584 -0.748793 -0.330397
79 | vn -0.574584 0.748793 -0.330397
80 | vn -0.794656 0.577348 -0.187595
81 | vn -0.802607 0.583125 0.125648
82 | vn -0.889698 0.315092 -0.330386
83 | vn 0.534590 0.777851 -0.330395
84 | vn 0.303531 0.934171 -0.187597
85 | vn 0.306568 0.943519 0.125651
86 | vn 0.024726 0.943519 -0.330395
87 | vn 0.574584 -0.748793 0.330397
88 | vn 0.794656 -0.577348 0.187595
89 | vn 0.889698 -0.315092 0.330386
90 | vn 0.802607 -0.583125 -0.125648
91 | vn -0.534590 -0.777851 0.330395
92 | vn -0.303531 -0.934171 0.187597
93 | vn -0.024726 -0.943519 0.330395
94 | vn -0.306568 -0.943519 -0.125651
95 | vn -0.904981 0.268049 0.330393
96 | vn -0.982246 0.000000 0.187599
97 | vn -0.904981 -0.268049 0.330393
98 | vn -0.992077 -0.000000 -0.125631
99 | vn -0.024726 0.943519 0.330395
100 | vn -0.303531 0.934171 0.187597
101 | vn -0.534590 0.777851 0.330395
102 | vn -0.306568 0.943519 -0.125651
103 | vn 0.889698 0.315092 0.330386
104 | vn 0.794656 0.577348 0.187595
105 | vn 0.574584 0.748793 0.330397
106 | vn 0.802607 0.583125 -0.125648
107 | vn 0.408939 -0.628443 0.661686
108 | vn 0.491119 -0.356821 0.794658
109 | vn 0.268034 -0.194737 0.943523
110 | vn 0.724044 -0.194734 0.661694
111 | vn -0.471317 -0.583121 0.661687
112 | vn -0.187594 -0.577345 0.794658
113 | vn -0.102381 -0.315090 0.943523
114 | vn 0.038547 -0.748789 0.661687
115 | vn -0.700228 0.268049 0.661687
116 | vn -0.607060 0.000000 0.794656
117 | vn -0.331305 0.000000 0.943524
118 | vn -0.700228 -0.268049 0.661687
119 | vn 0.038547 0.748789 0.661687
120 | vn -0.187594 0.577345 0.794658
121 | vn -0.102381 0.315090 0.943523
122 | vn -0.471318 0.583121 0.661687
123 | vn 0.724044 0.194734 0.661694
124 | vn 0.491119 0.356821 0.794658
125 | vn 0.268034 0.194737 0.943523
126 | vn 0.408939 0.628443 0.661686
127 | usemtl
128 | s off
129 | f 1//1 2//1 3//1
130 | f 4//2 1//2 3//2
131 | f 5//3 1//3 4//3
132 | f 3//4 6//4 4//4
133 | f 7//5 5//5 4//5
134 | f 4//6 8//6 7//6
135 | f 9//7 7//7 8//7
136 | f 4//8 6//8 8//8
137 | f 10//9 11//9 12//9
138 | f 12//10 3//10 10//10
139 | f 2//11 10//11 3//11
140 | f 12//12 6//12 3//12
141 | f 13//13 14//13 15//13
142 | f 15//14 12//14 13//14
143 | f 11//15 13//15 12//15
144 | f 15//16 6//16 12//16
145 | f 16//17 9//17 8//17
146 | f 8//18 15//18 16//18
147 | f 14//19 16//19 15//19
148 | f 8//20 6//20 15//20
149 | f 17//21 5//21 7//21
150 | f 7//22 18//22 17//22
151 | f 19//23 17//23 18//23
152 | f 18//24 7//24 9//24
153 | f 2//25 1//25 20//25
154 | f 1//26 21//26 20//26
155 | f 22//27 20//27 21//27
156 | f 21//28 1//28 5//28
157 | f 23//29 11//29 10//29
158 | f 10//30 24//30 23//30
159 | f 25//31 23//31 24//31
160 | f 24//32 10//32 2//32
161 | f 26//33 14//33 13//33
162 | f 13//34 27//34 26//34
163 | f 28//35 26//35 27//35
164 | f 27//36 13//36 11//36
165 | f 29//37 9//37 16//37
166 | f 16//38 30//38 29//38
167 | f 31//39 29//39 30//39
168 | f 30//40 16//40 14//40
169 | f 32//41 22//41 21//41
170 | f 21//42 17//42 32//42
171 | f 19//43 32//43 17//43
172 | f 17//44 21//44 5//44
173 | f 33//45 25//45 24//45
174 | f 24//46 20//46 33//46
175 | f 22//47 33//47 20//47
176 | f 20//48 24//48 2//48
177 | f 34//49 28//49 27//49
178 | f 27//50 23//50 34//50
179 | f 25//51 34//51 23//51
180 | f 23//52 27//52 11//52
181 | f 35//53 31//53 30//53
182 | f 30//54 26//54 35//54
183 | f 28//55 35//55 26//55
184 | f 26//56 30//56 14//56
185 | f 36//57 19//57 18//57
186 | f 18//58 29//58 36//58
187 | f 31//59 36//59 29//59
188 | f 29//60 18//60 9//60
189 | f 37//61 22//61 32//61
190 | f 32//62 38//62 37//62
191 | f 39//63 37//63 38//63
192 | f 38//64 32//64 19//64
193 | f 40//65 25//65 33//65
194 | f 33//66 37//66 40//66
195 | f 39//67 40//67 37//67
196 | f 37//68 33//68 22//68
197 | f 41//69 28//69 34//69
198 | f 34//70 40//70 41//70
199 | f 39//71 41//71 40//71
200 | f 40//72 34//72 25//72
201 | f 42//73 31//73 35//73
202 | f 35//74 41//74 42//74
203 | f 39//75 42//75 41//75
204 | f 41//76 35//76 28//76
205 | f 38//77 19//77 36//77
206 | f 36//78 42//78 38//78
207 | f 39//79 38//79 42//79
208 | f 42//80 36//80 31//80
209 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # CVRL FORTH HandTracker
2 |
3 |
4 | ## Description
5 |
6 | This script uses the Model Based Vision (MBV) libraries created by the Computer Vision and Robotics Lab at ICS/FORTH. The libraries are free for academic and non-profit use under this [licence](license.txt).
7 |
8 | It implements a hand tracker pipeline described first in [Oikonomidis et al: Efficient model-based 3D tracking of hand articulations using Kinect](http://users.ics.forth.gr/~argyros/mypapers/2011_09_bmvc_kinect_hand_tracking.pdf).
9 |
10 |
11 | The software tracks the 3D position, orientation and full articulation of a human hand from markerless visual observations. The developed method:
12 |
13 | * estimates the full articulation of a hand (26 DoFs redundantly encoded in 27 parameters) involved in unconstrained motion
14 | * operates on input acquired by easy-to-install and widely used/supported RGB-D cameras (e.g. Kinect, Xtion)
15 | * does not require markers, special gloves
16 | * performs at a rate of 30fps in modern architectures (GPU acceleration)
17 | * does not require calibration
18 | * does not rely on any proprietary built-in tracking technologies (Nite, OpenNI, Kinect SDK)
19 |
20 |
21 |
22 | ## Citation
23 |
24 | If you use any part of this work please cite the following:
25 |
26 | Oikonomidis, Iason, Nikolaos Kyriazis, and Antonis A. Argyros. "Efficient model-based 3D tracking of hand articulations using Kinect." BMVC. Vol. 1. No. 2. 2011.
27 | ```
28 | @inproceedings{oikonomidis2011efficient,
29 | title={Efficient model-based 3D tracking of hand articulations using Kinect.},
30 | author={Oikonomidis, Iason and Kyriazis, Nikolaos and Argyros, Antonis A},
31 | booktitle={BMVC},
32 | volume={1},
33 | number={2},
34 | pages={3},
35 | year={2011}
36 | }
37 | ```
38 |
39 | **Notice**: The citation targets are subject to change. Please make sure to use the latest information provided.
40 |
41 | ## Hardware Requirements
42 |
43 | System requirements:
44 |
45 | - Hardware
46 | - Multi-core Intel CPU
47 | - 1 GB of RAM or more
48 | - CUDA-enabled GPU
49 | - 512MB GPU RAM or more
50 | - CUDA compute capability > 1.0
51 | - OpenGL 3.3
52 | - Software
53 | - OS
54 | - 64bit Windows 8 or newer
55 | - 64bit Ubuntu 14.04 Linux
56 | - Environment
57 | - **Python 2.7 64bit**
58 | - Drivers
59 | - [Latest CUDA driver](https://developer.nvidia.com/cuda-downloads)
60 | - OpenNI driver
61 | - Kinect 2 driver
62 |
63 | ## Download links
64 |
65 |
66 | - [Ubuntu 3D hand tracking](http://cvrlcode.ics.forth.gr/files/mbv/v1.1/MBV_PythonAPI_Linux_1.1.zip)
67 | - [Windows 3D hand tracking](http://cvrlcode.ics.forth.gr/files/mbv/v1.1/MBV_PythonAPI_Win_1.1.zip)
68 |
69 | ### Windows Dependencies
70 |
71 | - [Visual C++ **64bit** Redistributable Packages for Visual Studio 2013](https://www.microsoft.com/en-us/download/details.aspx?id=40784)
72 | - [OpenNI 1.x SDK for Windows 8 **64bit** and newer](http://cvrlcode.ics.forth.gr/web_share/OpenNI/OpenNI_SDK/OpenNI_1.x/OpenNI-Win64-1.5.7.10-Dev.zip) (install prior to sensor driver)
73 | - [OpenNI 1.x sensor driver for 8 Windows **64bit** and newer](http://cvrlcode.ics.forth.gr/web_share/OpenNI/OpenNI_SDK/OpenNI_1.x/Sensor_Driver/Sensor-Win64-5.1.6.6-Redist.zip)
74 | - [Kinect 2 SDK for Windows 8 **64bit** and newer](http://www.microsoft.com/en-us/download/details.aspx?id=44561)
75 |
76 | ## Installation and usage
77 |
78 | As a first step, download the package that matches your OS from [the download section](#download). Extract the downloaded package to a location and set an environment variable named MBV_LIBS to point to this location. For example, if the package is extracted to the path c:\Users\User\Documents\FORTH\HANDTRACKER (Windows) or /home/user/FORTH/HANDTRACKER (Ubuntu), do the following from the command line:
79 |
80 |
81 | Ubuntu:
82 |
83 | ```
84 | export MBV_LIBS=/home/user/FORTH/HANDTRACKER
85 | ```
86 |
87 | Windows:
88 |
89 | ```
90 | set MBV_LIBS=c:\Users\User\Documents\FORTH\HANDTRACKER
91 | ```
92 |
93 | The provided package has some external dependencies, listed below. One such dependency is a working Python 2.7 environment.
94 |
95 | **Notice:** Make sure the Python version is 2.7 64bit.
96 |
97 | **Notice:** Binaries were build against CUDA 7.5. This might require the user to update the GPU driver to the latest version. In the lack of a supported driver, an error message of the form "*CUDA driver version is insufficient for CUDA runtime version*" is issued.
98 |
99 | ### Ubuntu
100 |
101 | Install opencv, thread building blocks (TBB) python and numpy by executing the following in the command line:
102 |
103 | ```
104 | sudo apt-get install libopencv-dev libtbb2 python-numpy python-opencv
105 | ```
106 |
107 | If you plan to use openni1.x (required for running some of the example scripts), also execute:
108 |
109 | ```
110 | sudo apt-get install libopenni0 libopenni-sensor-primesense0
111 | ```
112 |
113 | Make sure that you have nvidia driver 352 or newer installed. Use the
114 | "Additional Drivers" tool to select the correct driver version.
115 |
116 | ### Windows
117 |
118 | OpenCV is statically built with the provided binaries. Thread building blocks is bundled with the downloadable package. The rest of the dependencies should be downloaded from the download section. For python support it is suggested to use [anaconda] (https://www.continuum.io/downloads). After installing Anaconda, the installation of numpy is a simple as executing the following in the command line:
119 |
120 | ```
121 | conda install numpy
122 | ```
123 |
124 | **Notice:** Binaries were built against numpy 1.10.1. If a numpy related error (import or other) is issued, updating numpy to this version will be required. In Anaconda it would suffice to execute the following, from the command line:
125 |
126 | ```
127 | conda update numpy
128 | ```
129 |
130 | ### Usage
131 |
132 | Make sure the current working directory is the root of HandTracker and that MBV_LIBS is set.
133 |
134 | Run the `runme.sh` (Ubuntu) or `runme.bat` (Windows) script to test the hand tracker. Press `s` to stop/start 3D hand tracking.
135 |
136 | **Notice:** Be aware that the first execution will take a significant amount of time, CPU and memory. This is due to the intermediate CUDA code being compiled. This will only happen once, as the compilation result is cached. In Ubuntu the cache limit might be too restricting and in these cases caching will fail, leading to recompilation at every execution. To remedy this the size can be increased as follows (command line):
137 |
138 | ```
139 | export CUDA_CACHE_MAXSIZE=2147483648
140 | ```
141 |
142 |
143 | ## Contact
144 |
145 | For questions, comments and any kind of feedback please use the github issues, and the wiki.
146 |
147 |
--------------------------------------------------------------------------------
/src/SingleHandTracking.py:
--------------------------------------------------------------------------------
1 | """
2 | FORTH Model based hand tracker.
3 | Single Hand tracking pipeline using FORTH libraries.
4 |
5 | """
6 |
7 | # Core stuff, like containers.
8 | import PyMBVCore as Core
9 | # Image acquisition.
10 | import PyMBVAcquisition as Acquisition
11 | # 3D Multi-hypothesis rendering.
12 | import PyMBVRendering as Rendering
13 | # Conversion of hypotheses to 3D renderables.
14 | import PyMBVDecoding as dec
15 | # A library which puts together the aforementioned
16 | # and some extras to make up 3D hand tracking.
17 | import PyHandTracker as HT
18 |
19 | # OpenCV.
20 | import cv2 as cv
21 | # Timing.
22 | from time import clock
23 |
24 | import time
25 |
26 | if __name__ == '__main__':
27 | print "Creating Renderer..."
28 |
29 | # Turn off logging
30 | Core.InitLog(['handTracker', 'log.severity', 'error'])
31 |
32 | # The 3D renderer is a singleton. The single instance is accessed.
33 | renderer = Rendering.RendererOGLCudaExposed.get()
34 | # OpenCV coordinate system is right handed but the renderer's
35 | # coordinate system is left handed. Conversion is handled, but
36 | # in the process front facing triangles become back facing triangles.
37 | # Thus, we inverse the culling order.
38 | # Try to set it to CullBack or CullNone to see the differences.
39 | renderer.culling = Rendering.RendererOGLBase.Culling.CullFront
40 |
41 | # An exposed renderer is one whose data are exposed through
42 | # some API. The hand tracker lib requires such a renderer.
43 | erenderer = Rendering.ExposedRenderer(renderer, renderer)
44 |
45 | # Create the hand tracker lib
46 | # params:
47 | # - width (2048): max width preallocated for rendering
48 | # - height (2048): max height preallocated for rendering
49 | # - tileWidth (64): width of hypothesis rendering tile
50 | # - tileHeight (64): height of hypothesis rendering tile
51 | # With the given parameter the handtracker lib will be able to
52 | # render at most (2048/64)x(2048x64)=1024 hypotheses in parallel.
53 | # The greatest this number the more the hypothesis evaluation
54 | # throughput. Default optimization only requires to render 64
55 | # hypotheses at a time.
56 | ht = HT.HandTrackerLib(2048, 2048, 64, 64, erenderer)
57 |
58 | # Create a decoder, i.e. an object which can transform
59 | # 27-D parameter vectors to 3D renderable hands.
60 | handDec = dec.GenericDecoder()
61 | # A description for a hand can be found at a file.
62 | handDec.loadFromFile("media/hand_right_low_RH.xml")
63 | # Set the decoder to the hand tracker lib.
64 | ht.decoder = handDec
65 |
66 | # Setup randomization variances to use during heuristic search.
67 | posvar = [10, 10, 10] # 3D global translation variance
68 | rotvar = [0.1, 0.1, 0.1, 0.1] # Quaternion global rotation variance
69 | fingervar = [ 0.1, 0.1, 0.1, 0.1] # Per finger relative angles variance
70 |
71 | # 27-D = 3D position + 4D rotation + 5 x 4D per finger angles.
72 | ht.variances = Core.DoubleVector( posvar + rotvar + 5 * fingervar)
73 |
74 | print "Variances: ",list(ht.variances)
75 | print "Low Bounds: ",list(ht.lowBounds)
76 | print "High Bounds: ",list(ht.highBounds)
77 | print "Randomization Indices: ",list(ht.randomizationIndices)
78 |
79 | # Set the PSO budget, i.e. particles and generations.
80 | ht.particles = 64
81 | ht.generations = 25
82 |
83 | print "Starting Grabber..."
84 |
85 | # Initialize RGBD acquisition. We will be acquiring images
86 | # from a saved sequence, in oni format.
87 |
88 | # User should define a path to a saved sequence in oni format.
89 | # Set path to empty string to perform live capture from an existing sensor.
90 | oniPath = 'loop.oni'
91 | acq = Acquisition.OpenNIGrabber(True, True, 'media/openni.xml', oniPath, True)
92 | acq.initialize()
93 |
94 | # Initialization for the hand pose of the first frame is specified.
95 | # If track is lost, resetting will revert track to this pose.
96 | defaultInitPos = Core.ParamVector([ 0, 80, 900, 0, 0, 1, 0, 1.20946707135219810e-001, 1.57187812868051640e+000, 9.58033504364020840e-003, -1.78593063562731860e-001, 7.89636216585289100e-002, 2.67967456875403400e+000, 1.88385552327860720e-001, 2.20049375319072360e-002, -4.09740579183203310e-002, 1.52145111735213370e+000, 1.48366400350912500e-001, 2.85607073734409630e-002, -4.53781680931323280e-003, 1.52743247624671910e+000, 1.01751907812505270e-001, 1.08706683246161150e-001, 8.10845240231484330e-003, 1.49009228214971090e+000, 4.64716068193632560e-002, -1.44370358851376110e-001])
97 |
98 | # The 3D hand pose, as is tracked in the tracking loop.
99 | currentHandPose = defaultInitPos
100 |
101 | # State.
102 | paused = False
103 | delay = {True:0,False:1}
104 | frame = 0
105 | count=0
106 | tracking = len(oniPath) > 0
107 | actualFPS = 0.0
108 |
109 | print "Entering main Loop."
110 | while True:
111 | loopStart = time.time()*1000;
112 | try:
113 | # Acquire images and image calibrations and break if unsuccessful.
114 | # imgs is a list of numpy.andrray and clbs a list of Core.CameraMeta.
115 | # The two lists are of equal size and elements correspond to one another.
116 | # In OpenNIGrabber, the first image is the depth and the second is the RGB.
117 | # In the media/openni.xml file it is specified that the depth will be aligned
118 | # to the RGB image and that mirroring will be off. The resolution is VGA.
119 | # It is not obligatory to use the OpenNIGrabber. As long as you can somehow provide
120 | # aligned depth and RGB images and corresponding Core.CameraMeta, you can use 3D
121 | # hand tracking.
122 | imgs, clbs = acq.grab()
123 | except:
124 | break
125 |
126 | # Get the depth calibration to extract some basic info.
127 | c = clbs[0]
128 | width,height = int(c.width),int(c.height)
129 |
130 | # Step 1: configure 3D rendering to match depth calibration.
131 | # step1_setupVirtualCamera returns a view matrix and a projection matrix (graphics).
132 | viewMatrix,projectionMatrix = ht.step1_setupVirtualCamera(c)
133 |
134 | # Step 2: compute the bounding box of the previously tracked hand pose.
135 | # For the sake of efficiency, search is performed in the vicinity of
136 | # the previous hand tracking solution. Rendering will be constrained
137 | # in the bounding box (plus some padding) of the previous tracking solution,
138 | # in image space.
139 | # The user might chose to bypass this call and compute a bounding box differently,
140 | # so as to incorporate other information as well.
141 | bb = ht.step2_computeBoundingBox(currentHandPose, width, height, 0.1)
142 |
143 | # Step 3: Zoom rendering to given bounding box.
144 | # The renderer is configures so as to map its projection space
145 | # to the given bounding box, i.e. zoom in.
146 | ht.step3_zoomVirtualCamera(projectionMatrix, bb,width,height)
147 |
148 | # Step 4: Preprocess input.
149 | # RGBD frames are processed to as to isolate the hand.
150 | # This is usually done through skin color detection in the RGB frame.
151 | # The user might chose to bypass this call and do foreground detection
152 | # in some other way. What is required is a labels image which is non-zero
153 | # for foreground and a depth image which contains depth values in mm.
154 | labels, depths = ht.step4_preprocessInput(imgs[1], imgs[0], bb)
155 |
156 | # Step5: Upload observations for GPU evaluation.
157 | # Hypothesis testing is performed on the GPU. Therefore, observations
158 | # are also uploaded to the GPU.
159 | ht.step5_setObservations(labels, depths)
160 |
161 | fps = 0
162 | if tracking:
163 | t = clock()
164 | # Step 6: Track.
165 | # Tracking is initialized with the solution for the previous frame
166 | # and computes the solution for the current frame. The user might
167 | # chose to initialize tracking from a pose other than the solution
168 | # from the previous frame. This solution needs to be 27-D for 3D
169 | # hand tracking with the specified decoder.
170 | score, currentHandPose = ht.step6_track(currentHandPose)
171 | t = clock() - t
172 | fps = 1.0 / t
173 |
174 |
175 | # Step 7 : Visualize.
176 | # This call superimposes a hand tracking solution on a RGB image
177 | viz = ht.step7_visualize(imgs[1], viewMatrix,projectionMatrix, currentHandPose)
178 | cv.putText(viz, 'UI FPS = %f, Track FPS = %f' % (actualFPS , fps), (20, 20), 0, 0.5, (0, 0, 255))
179 |
180 | cv.imshow("Hand Tracker",viz)
181 |
182 | key = cv.waitKey(delay[paused])
183 |
184 | # Press 's' to start/stop tracking.
185 | if key & 255 == ord('s'):
186 | tracking = not tracking
187 | currentHandPose = defaultInitPos
188 |
189 | # Press 'q' to quit.
190 | if key & 255 == ord('q'):
191 | break
192 |
193 | # Press 'p' to pause.
194 | if key &255 == ord('p'):
195 | paused = not paused
196 |
197 | frame += 1
198 | loopEnd = time.time()*1000;
199 | actualFPS = (1000.0/(loopEnd-loopStart))
200 |
201 |
202 |
--------------------------------------------------------------------------------
/src/HandObjectTracking.py:
--------------------------------------------------------------------------------
1 | """
2 | FORTH Model based hand tracker.
3 | Single Hand tracking pipeline using FORTH libraries.
4 |
5 | """
6 |
7 | # Core stuff, like containers.
8 | import PyMBVCore as Core
9 | # Image acquisition.
10 | import PyMBVAcquisition as Acquisition
11 | # 3D Multi-hypothesis rendering.
12 | import PyMBVRendering as Rendering
13 | # Conversion of hypotheses to 3D renderables.
14 | import PyMBVDecoding as dec
15 | # A library which puts together the aforementioned
16 | # and some extras to make up 3D hand tracking.
17 | import PyHandTracker as HT
18 |
19 | # OpenCV.
20 | import cv2 as cv
21 | # Timing.
22 | from time import clock
23 |
24 | import time
25 |
26 | if __name__ == '__main__':
27 | print "Creating Renderer..."
28 |
29 | # Turn off logging
30 | Core.InitLog(['handTracker', 'log.severity', 'error'])
31 |
32 | # The 3D renderer is a singleton. The single instance is accessed.
33 | renderer = Rendering.RendererOGLCudaExposed.get()
34 | # OpenCV coordinate system is right handed but the renderer's
35 | # coordinate system is left handed. Conversion is handled, but
36 | # in the process front facing triangles become back facing triangles.
37 | # Thus, we inverse the culling order.
38 | # Try to set it to CullBack or CullNone to see the differences.
39 | renderer.culling = Rendering.RendererOGLBase.Culling.CullFront
40 |
41 | # An exposed renderer is one whose data are exposed through
42 | # some API. The hand tracker lib requires such a renderer.
43 | erenderer = Rendering.ExposedRenderer(renderer, renderer)
44 |
45 | # Create the hand tracker lib
46 | # params:
47 | # - width (2048): max width preallocated for rendering
48 | # - height (2048): max height preallocated for rendering
49 | # - tileWidth (64): width of hypothesis rendering tile
50 | # - tileHeight (64): height of hypothesis rendering tile
51 | # With the given parameter the handtracker lib will be able to
52 | # render at most (2048/64)x(2048x64)=1024 hypotheses in parallel.
53 | # The greatest this number the more the hypothesis evaluation
54 | # throughput. Default optimization only requires to render 64
55 | # hypotheses at a time.
56 | ht = HT.HandTrackerLib(2048, 2048, 128, 128, erenderer)
57 |
58 | # Create a decoder, i.e. an object which can transform
59 | # 27-D parameter vectors to 3D renderable hands.
60 | handDec = dec.GenericDecoder()
61 | # A description for a hand can be found at a file.
62 | handDec.loadFromFile("media/hand_right_low_RH.xml")
63 |
64 |
65 | # Create a 6D rigid object decoder
66 | objectDec = dec.SingleRigidDecoder()
67 | objectDec.meshFilename = "media/cube.obj"
68 | objectDec.scale = Core.Vector3(120.0/2.0,60.0/2.0,50.0/2.0)
69 |
70 | # Create slice decoders for each decoder.
71 | # A slice decoder splits the param vector to the proper
72 | # points for each decoder
73 | handDecSlice = dec.SlicedDecoder(handDec)
74 | handDecSlice.slice = Core.UIntVector(range(0,27))
75 |
76 | objectDecSlice = dec.SlicedDecoder(objectDec)
77 | objectDecSlice.slice = Core.UIntVector(range(27,34))
78 |
79 | # Create a combination decoder for hand and object
80 | combDec = dec.DecoderCombination(handDecSlice, objectDecSlice)
81 |
82 | # Set the combination decoder to the hand tracker lib.
83 | ht.decoder = combDec
84 |
85 | # Setup randomization variances to use during heuristic search.
86 | posvar = [10, 10, 10] # 3D global translation variance
87 | rotvar = [0.1, 0.1, 0.1, 0.1] # Quaternion global rotation variance
88 | fingervar = [ 0.1, 0.1, 0.1, 0.1] # Per finger relative angles variance
89 |
90 | objectPosVar = [10, 10, 10] # 3D translation variance for the rigid object
91 | objectRotVar = [0.1, 0.1, 0.1, 0.1] # Quaternion for the rigid object rotation
92 |
93 | # 27-D + 6-D = 3D position + 4D rotation + 5 x 4D per finger angles + 3D object pos + 4D object rotation.
94 | ht.variances = Core.DoubleVector( posvar + rotvar + 5 * fingervar + objectPosVar + objectRotVar)
95 |
96 | # update the bounds for the hand-object combination
97 | objectLowBounds = [-2000.0, -2000.0, -2000.0, -1.0, -1.0, -1.0, -1.0]
98 | objectHighBounds = [2000.0, 2000.0, 2000.0, 1.0, 1.0, 1.0, 1.0]
99 |
100 | ht.lowBounds = Core.DoubleVector(list(ht.lowBounds) + objectLowBounds)
101 | ht.highBounds = Core.DoubleVector(list(ht.highBounds) + objectHighBounds)
102 |
103 | print "Variances: ",list(ht.variances)
104 | print "Low Bounds: ",list(ht.lowBounds)
105 | print "High Bounds: ",list(ht.highBounds)
106 | print "Randomization Indices: ",list(ht.randomizationIndices)
107 |
108 | # Set the PSO budget, i.e. particles and generations.
109 | ht.particles = 42
110 | ht.generations = 42
111 |
112 | print "Starting Grabber..."
113 |
114 | # Initialize RGBD acquisition. We will be acquiring images
115 | # from a saved sequence, in oni format.
116 |
117 | # User should define a path to a saved sequence in oni format.
118 | # Set path to empty string to perform live capture from an existing sensor.
119 | oniPath = 'hand-object.oni'
120 | acq = Acquisition.OpenNIGrabber(True, True, 'media/openni.xml', oniPath, True)
121 | acq.initialize()
122 |
123 | # Initialization for the hand pose of the first frame is specified.
124 | # If track is lost, resetting will revert track to this pose.
125 | defaultInitPos = Core.ParamVector([ 0, 80, 900, 0, 0, 1, 0, 1.20946707135219810e-001, 1.57187812868051640e+000, 9.58033504364020840e-003, -1.78593063562731860e-001, 7.89636216585289100e-002, 2.67967456875403400e+000, 1.88385552327860720e-001, 2.20049375319072360e-002, -4.09740579183203310e-002, 1.52145111735213370e+000, 1.48366400350912500e-001, 2.85607073734409630e-002, -4.53781680931323280e-003, 1.52743247624671910e+000, 1.01751907812505270e-001, 1.08706683246161150e-001, 8.10845240231484330e-003, 1.49009228214971090e+000, 4.64716068193632560e-002, -1.44370358851376110e-001,
126 |
127 | -50, 250, 800, -1, 0, 0, 1] # update the object initial position accordingly.
128 | )
129 |
130 | # The 3D hand pose, as is tracked in the tracking loop.
131 | currentHandPose = defaultInitPos
132 |
133 | # State.
134 | paused = False
135 | delay = {True:0,False:1}
136 | frame = 0
137 | count=0
138 | tracking = len(oniPath) > 0
139 | actualFPS = 0.0
140 |
141 | print "Entering main Loop."
142 | while True:
143 | loopStart = time.time()*1000;
144 | try:
145 | # Acquire images and image calibrations and break if unsuccessful.
146 | # imgs is a list of numpy.andrray and clbs a list of Core.CameraMeta.
147 | # The two lists are of equal size and elements correspond to one another.
148 | # In OpenNIGrabber, the first image is the depth and the second is the RGB.
149 | # In the media/openni.xml file it is specified that the depth will be aligned
150 | # to the RGB image and that mirroring will be off. The resolution is VGA.
151 | # It is not obligatory to use the OpenNIGrabber. As long as you can somehow provide
152 | # aligned depth and RGB images and corresponding Core.CameraMeta, you can use 3D
153 | # hand tracking.
154 | imgs, clbs = acq.grab()
155 | except:
156 | break
157 |
158 | # Get the depth calibration to extract some basic info.
159 | c = clbs[0]
160 | width,height = int(c.width),int(c.height)
161 |
162 | # Step 1: configure 3D rendering to match depth calibration.
163 | # step1_setupVirtualCamera returns a view matrix and a projection matrix (graphics).
164 | viewMatrix, projectionMatrix = ht.step1_setupVirtualCamera(c)
165 |
166 | # Step 2: compute the bounding box of the previously tracked hand pose.
167 | # For the sake of efficiency, search is performed in the vicinity of
168 | # the previous hand tracking solution. Rendering will be constrained
169 | # in the bounding box (plus some padding) of the previous tracking solution,
170 | # in image space.
171 | # The user might chose to bypass this call and compute a bounding box differently,
172 | # so as to incorporate other information as well.
173 | bb = ht.step2_computeBoundingBox(currentHandPose, width, height, 0.1)
174 |
175 | # Step 3: Zoom rendering to given bounding box.
176 | # The renderer is configures so as to map its projection space
177 | # to the given bounding box, i.e. zoom in.
178 | ht.step3_zoomVirtualCamera(projectionMatrix, bb,width,height)
179 |
180 | # Step 4: Preprocess input.
181 | # RGBD frames are processed to as to isolate the hand.
182 | # This is usually done through skin color detection in the RGB frame.
183 | # The user might chose to bypass this call and do foreground detection
184 | # in some other way. What is required is a labels image which is non-zero
185 | # for foreground and a depth image which contains depth values in mm.
186 | labels, depths = ht.step4_preprocessInput(imgs[1], imgs[0], bb)
187 |
188 | # Step5: Upload observations for GPU evaluation.
189 | # Hypothesis testing is performed on the GPU. Therefore, observations
190 | # are also uploaded to the GPU.
191 | ht.step5_setObservations(labels, depths)
192 |
193 | fps = 0
194 | if tracking:
195 | t = clock()
196 | # Step 6: Track.
197 | # Tracking is initialized with the solution for the previous frame
198 | # and computes the solution for the current frame. The user might
199 | # chose to initialize tracking from a pose other than the solution
200 | # from the previous frame. This solution needs to be 27-D for 3D
201 | # hand tracking with the specified decoder.
202 | score, currentHandPose = ht.step6_track(currentHandPose)
203 | t = clock() - t
204 | fps = 1.0 / t
205 |
206 |
207 | # Step 7 : Visualize.
208 | # This call superimposes a hand tracking solution on a RGB image
209 | viz = ht.step7_visualize(imgs[1], viewMatrix,projectionMatrix, currentHandPose)
210 | cv.putText(viz, 'UI FPS = %f, Track FPS = %f' % (actualFPS , fps), (20, 20), 0, 0.5, (0, 0, 255))
211 |
212 | cv.imshow("Hand Tracker",viz)
213 |
214 | key = cv.waitKey(delay[paused])
215 |
216 | # Press 's' to start/stop tracking.
217 | if key & 255 == ord('s'):
218 | tracking = not tracking
219 | currentHandPose = defaultInitPos
220 |
221 | # Press 'q' to quit.
222 | if key & 255 == ord('q'):
223 | break
224 |
225 | # Press 'p' to pause.
226 | if key &255 == ord('p'):
227 | paused = not paused
228 |
229 | frame += 1
230 | loopEnd = time.time()*1000;
231 | actualFPS = (1000.0/(loopEnd-loopStart))
232 |
233 |
234 |
--------------------------------------------------------------------------------
/media/hand_right_low_RH.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Notes:
6 | optimizable variables order:
7 | palm_pos.trans_X min: -2000 max: 2000 def: -200 var: 0
8 | palm_pos.trans_Y min: -2000 max: 2000 def: 0 var: 0
9 | palm_pos.trans_Z min: -2000 max: 2000 def: -900 var: 0
10 | palm_pos.qX min: -1 max: 1 def: 0 var: 0
11 | palm_pos.qY min: -1 max: 1 def: 0 var: 0
12 | palm_pos.qZ min: -1 max: 1 def: 1 var: 0
13 | palm_pos.qW min: -1 max: 1 def: 0 var: 0
14 | pinky_pos.Pitch min: 0 max: 1.57 def: 0 var: 0
15 | pinky_pos.Yaw min: 0.7 max: 2.2 def: 1.57 var: 0
16 | pinky2_pos.Pitch min: 0 max: 1.57 def: 0 var: 0
17 | pinky3Pos.Pitch min: 0 max: 1.57 def: 0 var: 0
18 | thumb_pos.Pitch min: 0 max: 1 def: 0 var: 0
19 | thumb_pos.Yaw min: 2.5 max: 3.14 def: 3.14 var: 0
20 | thumb2_pos.Pitch min: 0 max: 1.57 def: 0 var: 0
21 | thumb3_pos.Pitch min: 0 max: 1.57 def: 0 var: 0
22 | ring_pos.Pitch min: 0 max: 1.57 def: 0 var: 0
23 | ring_pos.Yaw min: 0.7 max: 2.2 def: 1.57 var: 0
24 | ring2_pos.Pitch min: 0 max: 1.57 def: 0 var: 0
25 | ring3_pos.Pitch min: 0 max: 1.57 def: 0 var: 0
26 | index_pos.Pitch min: 0 max: 1.57 def: 0 var: 0
27 | index_pos.Yaw min: 0.7 max: 2.2 def: 1.57 var: 0
28 | index2_pos.Pitch min: 0 max: 1.57 def: 0 var: 0
29 | index3_pos.Pitch min: 0 max: 1.57 def: 0 var: 0
30 | middle_pos.Pitch min: 0 max: 1.57 def: 0 var: 0
31 | middle_pos.Yaw min: 0.7 max: 2.2 def: 1.57 var: 0
32 | mid2_pos.Pitch min: 0 max: 1.57 def: 0 var: 0
33 | mid3_pos.Pitch min: 0 max: 1.57 def: 0 var: 0
34 | Total count: 27
35 |
36 | tree arrangement of the optimizable variables:
37 |
38 | -palm_pos ||| OPT
39 | | -scale
40 | | -palm_sph1_p
41 | | -palm_sph2_p
42 | | -palm_mesh_pos
43 | | -pinky_pos ||| OPT
44 | | | -pinky_sph_p
45 | | | -pinky_cyl_pos
46 | | | -pinky2_pos ||| OPT
47 | | | -pinky3Pos ||| OPT
48 | | | | -pinky3_sph_p
49 | | | | -pinky4_sph_p
50 | | | | -pinky3_cyl_pos
51 | | | -pinky2_sph_p
52 | | | -pinky2_cyl_pos
53 | | -thumb_pos ||| OPT
54 | | | -thumb_sph_p
55 | | | -thumb_cyl_p
56 | | | -thumb2_pos ||| OPT
57 | | | -thumb2_sph_p
58 | | | -thumb2_cyl_p
59 | | | -thumb3_pos ||| OPT
60 | | | -thumb4_sph_p
61 | | | -thumb3_cyl_p
62 | | | -thumb3_sph
63 | | -ring_pos ||| OPT
64 | | | -ring_sph_p
65 | | | -ring_cyl_p
66 | | | -ring2_pos ||| OPT
67 | | | -ring2_sph_p
68 | | | -ring2_cyl_p
69 | | | -ring3_pos ||| OPT
70 | | | -ring3_sph_p
71 | | | -ring4_sph_p
72 | | | -ring3_cyl_p
73 | | -index_pos ||| OPT
74 | | | -index_sph_p
75 | | | -index_cyl_p
76 | | | -index2_pos ||| OPT
77 | | | -index2_sph_p
78 | | | -index2_cyl_p
79 | | | -index3_pos ||| OPT
80 | | | -index3_sph_p
81 | | | -index3_cyl_p
82 | | | -index4_sph_p
83 | | -middle_pos ||| OPT
84 | | -mid_sph_p
85 | | -mid_cyl_p
86 | | -mid2_pos ||| OPT
87 | | -mid2_sph_p
88 | | -mid2_cyl_p
89 | | -mid3_pos ||| OPT
90 | | -mid3_sph_p
91 | | -mid3_cyl_p
92 | | -mid4_sph_p
93 |
94 |
95 | 55
96 |
97 | palm_pos
98 | ground
99 | TranslationQuaternion
100 | -200
101 | -2000
102 | 2000
103 | 1
104 | 0
105 | 0
106 | -2000
107 | 2000
108 | 1
109 | 0
110 | -900
111 | -2000
112 | 2000
113 | 1
114 | 0
115 | 0
116 | -1
117 | 1
118 | 1
119 | 0
120 | 0
121 | -1
122 | 1
123 | 1
124 | 0
125 | 1
126 | -1
127 | 1
128 | 1
129 | 0
130 | 0
131 | -1
132 | 1
133 | 1
134 | 0
135 |
136 |
137 | scale
138 | palm_pos
139 | scaling_uniform
140 | 0.89999998
141 | 0.5
142 | 1
143 | 0
144 | 0
145 |
146 |
147 | palm_sph1_p
148 | scale
149 | Trans_scale
150 | 0
151 | 0
152 | 0
153 | 0
154 | 0
155 | 30
156 | 0
157 | 30
158 | 0
159 | 0
160 | 0
161 | 0
162 | 0
163 | 0
164 | 0
165 | 50
166 | 0
167 | 50
168 | 0
169 | 0
170 | 20
171 | 0
172 | 20
173 | 0
174 | 0
175 | 10
176 | 0
177 | 10
178 | 0
179 | 0
180 |
181 |
182 | palm_sph2_p
183 | scale
184 | Trans_scale
185 | 0
186 | 0
187 | 0
188 | 0
189 | 0
190 | -30
191 | -30
192 | 0
193 | 0
194 | 0
195 | 0
196 | 0
197 | 0
198 | 0
199 | 0
200 | 50
201 | 0
202 | 50
203 | 0
204 | 0
205 | 20
206 | 0
207 | 20
208 | 0
209 | 0
210 | 10
211 | 0
212 | 10
213 | 0
214 | 0
215 |
216 |
217 | palm_mesh_pos
218 | scale
219 | Trans_RPYRot_Scaling
220 | 0
221 | 0
222 | 0
223 | 0
224 | 0
225 | 0
226 | 0
227 | 0
228 | 0
229 | 0
230 | 0
231 | 0
232 | 0
233 | 0
234 | 0
235 | 1.5700001
236 | 1.5700001
237 | 1.5700001
238 | 0
239 | 0
240 | 1.5700001
241 | 1.5700001
242 | 1.5700001
243 | 0
244 | 0
245 | 0
246 | 0
247 | 0
248 | 0
249 | 0
250 | 10
251 | 10
252 | 10
253 | 0
254 | 0
255 | 50
256 | 50
257 | 50
258 | 0
259 | 0
260 | 30
261 | 30
262 | 40
263 | 0
264 | 0
265 |
266 |
267 | pinky_pos
268 | scale
269 | TranslationRPYRotation
270 | 40.987499
271 | 40.987499
272 | 40.987499
273 | 0
274 | 0
275 | 40
276 | 40
277 | 40
278 | 0
279 | 0
280 | 0
281 | 0
282 | 0
283 | 0
284 | 0
285 | 0
286 | 0
287 | 0
288 | 0
289 | 0
290 | 0
291 | 0
292 | 1.5700001
293 | 1
294 | 0
295 | 1.5700001
296 | 0.69999999
297 | 2.2
298 | 1
299 | 0
300 |
301 |
302 | pinky_sph_p
303 | pinky_pos
304 | scaling_uniform
305 | 5
306 | 5
307 | 5
308 | 0
309 | 0
310 |
311 |
312 | pinky_cyl_pos
313 | pinky_pos
314 | Trans_RPYRot_Skew
315 | 10
316 | 10
317 | 10
318 | 0
319 | 0
320 | 0
321 | 0
322 | 0
323 | 0
324 | 0
325 | 0
326 | 0
327 | 0
328 | 0
329 | 0
330 | 0
331 | 0
332 | 0
333 | 0
334 | 0
335 | 1.5700001
336 | 0
337 | 1.5700001
338 | 0
339 | 0
340 | 0
341 | 0
342 | 0
343 | 0
344 | 0
345 | 20
346 | 10
347 | 20
348 | 0
349 | 0
350 | 5
351 | 5
352 | 5
353 | 0
354 | 0
355 | 5
356 | 5
357 | 5
358 | 0
359 | 0
360 | 2
361 | 2
362 | 2
363 | 0
364 | 0
365 | 1
366 | 1
367 | 1
368 | 0
369 | 0
370 |
371 |
372 | pinky2_pos
373 | pinky_pos
374 | TranslationRPYRotation
375 | 20
376 | 20
377 | 20
378 | 0
379 | 0
380 | 0
381 | 0
382 | 0
383 | 0
384 | 0
385 | 0
386 | 0
387 | 0
388 | 0
389 | 0
390 | 0
391 | 0
392 | 0
393 | 0
394 | 0
395 | 0
396 | 0
397 | 1.5700001
398 | 1
399 | 0
400 | 0
401 | 0
402 | 0
403 | 0
404 | 0
405 |
406 |
407 | pinky3Pos
408 | pinky2_pos
409 | TranslationRPYRotation
410 | 16
411 | 16
412 | 16
413 | 0
414 | 0
415 | 0
416 | 0
417 | 0
418 | 0
419 | 0
420 | 0
421 | 0
422 | 0
423 | 0
424 | 0
425 | 0
426 | 0
427 | 0
428 | 0
429 | 0
430 | 0
431 | 0
432 | 1.5700001
433 | 1
434 | 0
435 | 0
436 | 0
437 | 0
438 | 0
439 | 0
440 |
441 |
442 | pinky3_sph_p
443 | pinky3Pos
444 | scaling_uniform
445 | 5
446 | 5
447 | 5
448 | 0
449 | 0
450 |
451 |
452 | pinky4_sph_p
453 | pinky3Pos
454 | Trans_scaleU
455 | 20
456 | 20
457 | 20
458 | 0
459 | 0
460 | 0
461 | 0
462 | 0
463 | 0
464 | 0
465 | 0
466 | 0
467 | 0
468 | 0
469 | 0
470 | 5
471 | 0
472 | 5
473 | 0
474 | 0
475 |
476 |
477 | pinky3_cyl_pos
478 | pinky3Pos
479 | Trans_RPYRot_Skew
480 | 10
481 | 10
482 | 10
483 | 0
484 | 0
485 | 0
486 | 0
487 | 0
488 | 0
489 | 0
490 | 0
491 | 0
492 | 0
493 | 0
494 | 0
495 | 0
496 | 0
497 | 0
498 | 0
499 | 0
500 | 1.5700001
501 | 0
502 | 1.5700001
503 | 0
504 | 0
505 | 0
506 | 0
507 | 0
508 | 0
509 | 0
510 | 20
511 | 10
512 | 20
513 | 0
514 | 0
515 | 5
516 | 5
517 | 5
518 | 0
519 | 0
520 | 5
521 | 5
522 | 5
523 | 0
524 | 0
525 | 2
526 | 2
527 | 2
528 | 0
529 | 0
530 | 1
531 | 1
532 | 1
533 | 0
534 | 0
535 |
536 |
537 | pinky2_sph_p
538 | pinky2_pos
539 | scaling_uniform
540 | 5
541 | 5
542 | 5
543 | 0
544 | 0
545 |
546 |
547 | pinky2_cyl_pos
548 | pinky2_pos
549 | Trans_RPYRot_Skew
550 | 8
551 | 8
552 | 8
553 | 0
554 | 0
555 | 0
556 | 0
557 | 0
558 | 0
559 | 0
560 | 0
561 | 0
562 | 0
563 | 0
564 | 0
565 | 0
566 | 0
567 | 0
568 | 0
569 | 0
570 | 1.5700001
571 | 0
572 | 1.5700001
573 | 0
574 | 0
575 | 0
576 | 0
577 | 0
578 | 0
579 | 0
580 | 16
581 | 8
582 | 16
583 | 0
584 | 0
585 | 5
586 | 5
587 | 5
588 | 0
589 | 0
590 | 5
591 | 5
592 | 5
593 | 0
594 | 0
595 | 2
596 | 2
597 | 2
598 | 0
599 | 0
600 | 1
601 | 1
602 | 1
603 | 0
604 | 0
605 |
606 |
607 | thumb_pos
608 | scale
609 | TranslationRPYRotation
610 | 0
611 | 0
612 | 0
613 | 0
614 | 0
615 | -45
616 | -45
617 | -45
618 | 0
619 | 0
620 | 0
621 | 0
622 | 0
623 | 0
624 | 0
625 | -0.5
626 | 0
627 | 0.5
628 | 0
629 | 0
630 | 0
631 | 0
632 | 1
633 | 1
634 | 0
635 | 3.1400001
636 | 2.5
637 | 3.1400001
638 | 1
639 | 0
640 |
641 |
642 | thumb_sph_p
643 | thumb_pos
644 | scaling_uniform
645 | 5
646 | 5
647 | 5
648 | 0
649 | 0
650 |
651 |
652 | thumb_cyl_p
653 | thumb_pos
654 | Trans_RPYRot_Scaling
655 | 30
656 | 30
657 | 30
658 | 0
659 | 0
660 | 0
661 | 0
662 | 0
663 | 0
664 | 0
665 | 0
666 | 0
667 | 0
668 | 0
669 | 0
670 | 0
671 | 0
672 | 0
673 | 0
674 | 0
675 | 1.5700001
676 | 0
677 | 1.5700001
678 | 0
679 | 0
680 | 0
681 | 0
682 | 0
683 | 0
684 | 0
685 | 20
686 | 20
687 | 30
688 | 0
689 | 0
690 | 20
691 | 5
692 | 20
693 | 0
694 | 0
695 | 40
696 | 5
697 | 40
698 | 0
699 | 0
700 |
701 |
702 | thumb2_pos
703 | thumb_pos
704 | TranslationRPYRotation
705 | 60
706 | 60
707 | 60
708 | 0
709 | 0
710 | 0
711 | 0
712 | 0
713 | 0
714 | 0
715 | 0
716 | 0
717 | 0
718 | 0
719 | 0
720 | 0
721 | 0
722 | 0
723 | 0
724 | 0
725 | 0
726 | 0
727 | 1.5700001
728 | 1
729 | 0
730 | 0
731 | 0
732 | 0
733 | 0
734 | 0
735 |
736 |
737 | thumb2_sph_p
738 | thumb2_pos
739 | scaling_uniform
740 | 7
741 | 5
742 | 7
743 | 0
744 | 0
745 |
746 |
747 | thumb2_cyl_p
748 | thumb2_pos
749 | Trans_RPYRot_Skew
750 | 20
751 | 20
752 | 20
753 | 0
754 | 0
755 | 0
756 | 0
757 | 0
758 | 0
759 | 0
760 | 0
761 | 0
762 | 0
763 | 0
764 | 0
765 | 0
766 | 0
767 | 0
768 | 0
769 | 0
770 | 1.5700001
771 | 0
772 | 1.5700001
773 | 0
774 | 0
775 | 0
776 | 0
777 | 0
778 | 0
779 | 0
780 | 40
781 | 20
782 | 40
783 | 0
784 | 0
785 | 7
786 | 5
787 | 7
788 | 0
789 | 0
790 | 7
791 | 5
792 | 7
793 | 0
794 | 0
795 | 2
796 | 2
797 | 2
798 | 0
799 | 0
800 | 1
801 | 1
802 | 1
803 | 0
804 | 0
805 |
806 |
807 | thumb3_pos
808 | thumb2_pos
809 | TranslationRPYRotation
810 | 40
811 | 40
812 | 40
813 | 0
814 | 0
815 | 0
816 | 0
817 | 0
818 | 0
819 | 0
820 | 0
821 | 0
822 | 0
823 | 0
824 | 0
825 | 0
826 | 0
827 | 0
828 | 0
829 | 0
830 | 0
831 | 0
832 | 1.5700001
833 | 1
834 | 0
835 | 0
836 | 0
837 | 0
838 | 0
839 | 0
840 |
841 |
842 | thumb4_sph_p
843 | thumb3_pos
844 | Trans_scaleU
845 | 25
846 | 25
847 | 25
848 | 0
849 | 0
850 | 0
851 | 0
852 | 0
853 | 0
854 | 0
855 | 0
856 | 0
857 | 0
858 | 0
859 | 0
860 | 7
861 | 0
862 | 7
863 | 0
864 | 0
865 |
866 |
867 | thumb3_cyl_p
868 | thumb3_pos
869 | Trans_RPYRot_Skew
870 | 12.5
871 | 12.5
872 | 12.5
873 | 0
874 | 0
875 | 0
876 | 0
877 | 0
878 | 0
879 | 0
880 | 0
881 | 0
882 | 0
883 | 0
884 | 0
885 | 0
886 | 0
887 | 0
888 | 0
889 | 0
890 | 1.5700001
891 | 0
892 | 1.5700001
893 | 0
894 | 0
895 | 0
896 | 0
897 | 0
898 | 0
899 | 0
900 | 25
901 | 12.5
902 | 25
903 | 0
904 | 0
905 | 7
906 | 5
907 | 7
908 | 0
909 | 0
910 | 7
911 | 5
912 | 7
913 | 0
914 | 0
915 | 2
916 | 2
917 | 2
918 | 0
919 | 0
920 | 1
921 | 1
922 | 1
923 | 0
924 | 0
925 |
926 |
927 | thumb3_sph
928 | thumb3_pos
929 | scaling_uniform
930 | 7
931 | 5
932 | 7
933 | 0
934 | 0
935 |
936 |
937 | ring_pos
938 | scale
939 | TranslationRPYRotation
940 | 11.4653
941 | 11.4653
942 | 11.4653
943 | 0
944 | 0
945 | 40
946 | 40
947 | 40
948 | 0
949 | 0
950 | 0
951 | 0
952 | 0
953 | 0
954 | 0
955 | 0
956 | 0
957 | 0
958 | 0
959 | 0
960 | 0
961 | 0
962 | 1.5700001
963 | 1
964 | 0
965 | 1.5700001
966 | 0.69999999
967 | 2.2
968 | 1
969 | 0
970 |
971 |
972 | ring_sph_p
973 | ring_pos
974 | scaling_uniform
975 | 5
976 | 5
977 | 5
978 | 0
979 | 0
980 |
981 |
982 | ring_cyl_p
983 | ring_pos
984 | Trans_RPYRot_Skew
985 | 20
986 | 20
987 | 20
988 | 0
989 | 0
990 | 0
991 | 0
992 | 0
993 | 0
994 | 0
995 | 0
996 | 0
997 | 0
998 | 0
999 | 0
1000 | 0
1001 | 0
1002 | 0
1003 | 0
1004 | 0
1005 | 1.5700001
1006 | 0
1007 | 1.5700001
1008 | 0
1009 | 0
1010 | 0
1011 | 0
1012 | 0
1013 | 0
1014 | 0
1015 | 40
1016 | 20
1017 | 40
1018 | 0
1019 | 0
1020 | 5
1021 | 5
1022 | 5
1023 | 0
1024 | 0
1025 | 5
1026 | 5
1027 | 5
1028 | 0
1029 | 0
1030 | 2
1031 | 2
1032 | 2
1033 | 0
1034 | 0
1035 | 1
1036 | 1
1037 | 1
1038 | 0
1039 | 0
1040 |
1041 |
1042 | ring2_pos
1043 | ring_pos
1044 | TranslationRPYRotation
1045 | 40
1046 | 40
1047 | 40
1048 | 0
1049 | 0
1050 | 0
1051 | 0
1052 | 0
1053 | 0
1054 | 0
1055 | 0
1056 | 0
1057 | 0
1058 | 0
1059 | 0
1060 | 0
1061 | 0
1062 | 0
1063 | 0
1064 | 0
1065 | 0
1066 | 0
1067 | 1.5700001
1068 | 1
1069 | 0
1070 | 0
1071 | 0
1072 | 0
1073 | 0
1074 | 0
1075 |
1076 |
1077 | ring2_sph_p
1078 | ring2_pos
1079 | scaling_uniform
1080 | 5
1081 | 0
1082 | 5
1083 | 0
1084 | 0
1085 |
1086 |
1087 | ring2_cyl_p
1088 | ring2_pos
1089 | Trans_RPYRot_Skew
1090 | 10
1091 | 10
1092 | 10
1093 | 0
1094 | 0
1095 | 0
1096 | 0
1097 | 0
1098 | 0
1099 | 0
1100 | 0
1101 | 0
1102 | 0
1103 | 0
1104 | 0
1105 | 0
1106 | 0
1107 | 0
1108 | 0
1109 | 0
1110 | 1.5700001
1111 | 0
1112 | 1.5700001
1113 | 0
1114 | 0
1115 | 0
1116 | 0
1117 | 0
1118 | 0
1119 | 0
1120 | 20
1121 | 10
1122 | 20
1123 | 0
1124 | 0
1125 | 5
1126 | 5
1127 | 5
1128 | 0
1129 | 0
1130 | 5
1131 | 5
1132 | 5
1133 | 0
1134 | 0
1135 | 2
1136 | 2
1137 | 2
1138 | 0
1139 | 0
1140 | 1
1141 | 1
1142 | 1
1143 | 0
1144 | 0
1145 |
1146 |
1147 | ring3_pos
1148 | ring2_pos
1149 | TranslationRPYRotation
1150 | 20
1151 | 20
1152 | 20
1153 | 0
1154 | 0
1155 | 0
1156 | 0
1157 | 0
1158 | 0
1159 | 0
1160 | 0
1161 | 0
1162 | 0
1163 | 0
1164 | 0
1165 | 0
1166 | 0
1167 | 0
1168 | 0
1169 | 0
1170 | 0
1171 | 0
1172 | 1.5700001
1173 | 1
1174 | 0
1175 | 0
1176 | 0
1177 | 0
1178 | 0
1179 | 0
1180 |
1181 |
1182 | ring3_sph_p
1183 | ring3_pos
1184 | scaling_uniform
1185 | 5
1186 | 5
1187 | 5
1188 | 0
1189 | 0
1190 |
1191 |
1192 | ring4_sph_p
1193 | ring3_pos
1194 | Trans_scaleU
1195 | 20
1196 | 20
1197 | 20
1198 | 0
1199 | 0
1200 | 0
1201 | 0
1202 | 0
1203 | 0
1204 | 0
1205 | 0
1206 | 0
1207 | 0
1208 | 0
1209 | 0
1210 | 5
1211 | 0
1212 | 5
1213 | 0
1214 | 0
1215 |
1216 |
1217 | ring3_cyl_p
1218 | ring3_pos
1219 | Trans_RPYRot_Skew
1220 | 10
1221 | 10
1222 | 10
1223 | 0
1224 | 0
1225 | 0
1226 | 0
1227 | 0
1228 | 0
1229 | 0
1230 | 0
1231 | 0
1232 | 0
1233 | 0
1234 | 0
1235 | 0
1236 | 0
1237 | 0
1238 | 0
1239 | 0
1240 | 1.5700001
1241 | 0
1242 | 1.5700001
1243 | 0
1244 | 0
1245 | 0
1246 | 0
1247 | 0
1248 | 0
1249 | 0
1250 | 20
1251 | 10
1252 | 20
1253 | 0
1254 | 0
1255 | 5
1256 | 5
1257 | 5
1258 | 0
1259 | 0
1260 | 5
1261 | 5
1262 | 5
1263 | 0
1264 | 0
1265 | 2
1266 | 2
1267 | 2
1268 | 0
1269 | 0
1270 | 1
1271 | 1
1272 | 1
1273 | 0
1274 | 0
1275 |
1276 |
1277 | index_pos
1278 | scale
1279 | TranslationRPYRotation
1280 | -40.4869
1281 | -40.4869
1282 | -40.4869
1283 | 0
1284 | 0
1285 | 40
1286 | 40
1287 | 40
1288 | 0
1289 | 0
1290 | 0
1291 | 0
1292 | 0
1293 | 0
1294 | 0
1295 | 0
1296 | 0
1297 | 0
1298 | 0
1299 | 0
1300 | 0
1301 | 0
1302 | 1.5700001
1303 | 1
1304 | 0
1305 | 1.5700001
1306 | 0.69999999
1307 | 2.2
1308 | 1
1309 | 0
1310 |
1311 |
1312 | index_sph_p
1313 | index_pos
1314 | scaling_uniform
1315 | 5
1316 | 5
1317 | 5
1318 | 0
1319 | 0
1320 |
1321 |
1322 | index_cyl_p
1323 | index_pos
1324 | Trans_RPYRot_Skew
1325 | 17.5
1326 | 17.5
1327 | 17.5
1328 | 0
1329 | 0
1330 | 0
1331 | 0
1332 | 0
1333 | 0
1334 | 0
1335 | 0
1336 | 0
1337 | 0
1338 | 0
1339 | 0
1340 | 0
1341 | 0
1342 | 0
1343 | 0
1344 | 0
1345 | 1.5700001
1346 | 0
1347 | 1.5700001
1348 | 0
1349 | 0
1350 | 0
1351 | 0
1352 | 0
1353 | 0
1354 | 0
1355 | 35
1356 | 17.5
1357 | 35
1358 | 0
1359 | 0
1360 | 5
1361 | 5
1362 | 5
1363 | 0
1364 | 0
1365 | 5
1366 | 5
1367 | 5
1368 | 0
1369 | 0
1370 | 2
1371 | 2
1372 | 2
1373 | 0
1374 | 0
1375 | 1
1376 | 1
1377 | 1
1378 | 0
1379 | 0
1380 |
1381 |
1382 | index2_pos
1383 | index_pos
1384 | TranslationRPYRotation
1385 | 35
1386 | 35
1387 | 35
1388 | 0
1389 | 0
1390 | 0
1391 | 0
1392 | 0
1393 | 0
1394 | 0
1395 | 0
1396 | 0
1397 | 0
1398 | 0
1399 | 0
1400 | 0
1401 | 0
1402 | 0
1403 | 0
1404 | 0
1405 | 0
1406 | 0
1407 | 1.5700001
1408 | 1
1409 | 0
1410 | 0
1411 | 0
1412 | 0
1413 | 0
1414 | 0
1415 |
1416 |
1417 | index2_sph_p
1418 | index2_pos
1419 | scaling_uniform
1420 | 5
1421 | 5
1422 | 5
1423 | 0
1424 | 0
1425 |
1426 |
1427 | index2_cyl_p
1428 | index2_pos
1429 | Trans_RPYRot_Skew
1430 | 10
1431 | 10
1432 | 10
1433 | 0
1434 | 0
1435 | 0
1436 | 0
1437 | 0
1438 | 0
1439 | 0
1440 | 0
1441 | 0
1442 | 0
1443 | 0
1444 | 0
1445 | 0
1446 | 0
1447 | 0
1448 | 0
1449 | 0
1450 | 1.5700001
1451 | 0
1452 | 1.5700001
1453 | 0
1454 | 0
1455 | 0
1456 | 0
1457 | 0
1458 | 0
1459 | 0
1460 | 20
1461 | 10
1462 | 20
1463 | 0
1464 | 0
1465 | 5
1466 | 5
1467 | 5
1468 | 0
1469 | 0
1470 | 5
1471 | 5
1472 | 5
1473 | 0
1474 | 0
1475 | 2
1476 | 2
1477 | 2
1478 | 0
1479 | 0
1480 | 1
1481 | 1
1482 | 1
1483 | 0
1484 | 0
1485 |
1486 |
1487 | index3_pos
1488 | index2_pos
1489 | TranslationRPYRotation
1490 | 20
1491 | 20
1492 | 20
1493 | 0
1494 | 0
1495 | 0
1496 | 0
1497 | 0
1498 | 0
1499 | 0
1500 | 0
1501 | 0
1502 | 0
1503 | 0
1504 | 0
1505 | 0
1506 | 0
1507 | 0
1508 | 0
1509 | 0
1510 | 0
1511 | 0
1512 | 1.5700001
1513 | 1
1514 | 0
1515 | 0
1516 | 0
1517 | 0
1518 | 0
1519 | 0
1520 |
1521 |
1522 | index3_sph_p
1523 | index3_pos
1524 | scaling_uniform
1525 | 5
1526 | 5
1527 | 5
1528 | 0
1529 | 0
1530 |
1531 |
1532 | index3_cyl_p
1533 | index3_pos
1534 | Trans_RPYRot_Skew
1535 | 10
1536 | 10
1537 | 10
1538 | 0
1539 | 0
1540 | 0
1541 | 0
1542 | 0
1543 | 0
1544 | 0
1545 | 0
1546 | 0
1547 | 0
1548 | 0
1549 | 0
1550 | 0
1551 | 0
1552 | 0
1553 | 0
1554 | 0
1555 | 1.5700001
1556 | 0
1557 | 1.5700001
1558 | 0
1559 | 0
1560 | 0
1561 | 0
1562 | 0
1563 | 0
1564 | 0
1565 | 20
1566 | 10
1567 | 20
1568 | 0
1569 | 0
1570 | 5
1571 | 5
1572 | 5
1573 | 0
1574 | 0
1575 | 5
1576 | 5
1577 | 5
1578 | 0
1579 | 0
1580 | 2
1581 | 2
1582 | 2
1583 | 0
1584 | 0
1585 | 1
1586 | 1
1587 | 1
1588 | 0
1589 | 0
1590 |
1591 |
1592 | index4_sph_p
1593 | index3_pos
1594 | Trans_scaleU
1595 | 20
1596 | 20
1597 | 20
1598 | 0
1599 | 0
1600 | 0
1601 | 0
1602 | 0
1603 | 0
1604 | 0
1605 | 0
1606 | 0
1607 | 0
1608 | 0
1609 | 0
1610 | 5
1611 | 0
1612 | 5
1613 | 0
1614 | 0
1615 |
1616 |
1617 | middle_pos
1618 | scale
1619 | TranslationRPYRotation
1620 | -12.9642
1621 | -12.9642
1622 | -12.9642
1623 | 0
1624 | 0
1625 | 40
1626 | 40
1627 | 40
1628 | 0
1629 | 0
1630 | 0
1631 | 0
1632 | 0
1633 | 0
1634 | 0
1635 | 0
1636 | 0
1637 | 0
1638 | 0
1639 | 0
1640 | 0
1641 | 0
1642 | 1.5700001
1643 | 1
1644 | 0
1645 | 1.5700001
1646 | 0.69999999
1647 | 2.2
1648 | 1
1649 | 0
1650 |
1651 |
1652 | mid_sph_p
1653 | middle_pos
1654 | scaling_uniform
1655 | 5
1656 | 5
1657 | 5
1658 | 0
1659 | 0
1660 |
1661 |
1662 | mid_cyl_p
1663 | middle_pos
1664 | Trans_RPYRot_Skew
1665 | 22.5
1666 | 22.5
1667 | 22.5
1668 | 0
1669 | 0
1670 | 0
1671 | 0
1672 | 0
1673 | 0
1674 | 0
1675 | 0
1676 | 0
1677 | 0
1678 | 0
1679 | 0
1680 | 0
1681 | 0
1682 | 0
1683 | 0
1684 | 0
1685 | 1.5700001
1686 | 0
1687 | 1.5700001
1688 | 0
1689 | 0
1690 | 0
1691 | 0
1692 | 0
1693 | 0
1694 | 0
1695 | 45
1696 | 22.5
1697 | 45
1698 | 0
1699 | 0
1700 | 5
1701 | 5
1702 | 5
1703 | 0
1704 | 0
1705 | 5
1706 | 5
1707 | 5
1708 | 0
1709 | 0
1710 | 2
1711 | 2
1712 | 2
1713 | 0
1714 | 0
1715 | 1
1716 | 1
1717 | 1
1718 | 0
1719 | 0
1720 |
1721 |
1722 | mid2_pos
1723 | middle_pos
1724 | TranslationRPYRotation
1725 | 45
1726 | 45
1727 | 45
1728 | 0
1729 | 0
1730 | 0
1731 | 0
1732 | 0
1733 | 0
1734 | 0
1735 | 0
1736 | 0
1737 | 0
1738 | 0
1739 | 0
1740 | 0
1741 | 0
1742 | 0
1743 | 0
1744 | 0
1745 | 0
1746 | 0
1747 | 1.5700001
1748 | 1
1749 | 0
1750 | 0
1751 | 0
1752 | 0
1753 | 0
1754 | 0
1755 |
1756 |
1757 | mid2_sph_p
1758 | mid2_pos
1759 | scaling_uniform
1760 | 5
1761 | 5
1762 | 5
1763 | 0
1764 | 0
1765 |
1766 |
1767 | mid2_cyl_p
1768 | mid2_pos
1769 | Trans_RPYRot_Skew
1770 | 12.5
1771 | 12.5
1772 | 12.5
1773 | 0
1774 | 0
1775 | 0
1776 | 0
1777 | 0
1778 | 0
1779 | 0
1780 | 0
1781 | 0
1782 | 0
1783 | 0
1784 | 0
1785 | 0
1786 | 0
1787 | 0
1788 | 0
1789 | 0
1790 | 1.5700001
1791 | 0
1792 | 1.5700001
1793 | 0
1794 | 0
1795 | 0
1796 | 0
1797 | 0
1798 | 0
1799 | 0
1800 | 25
1801 | 12.5
1802 | 25
1803 | 0
1804 | 0
1805 | 5
1806 | 5
1807 | 5
1808 | 0
1809 | 0
1810 | 5
1811 | 5
1812 | 5
1813 | 0
1814 | 0
1815 | 2
1816 | 2
1817 | 2
1818 | 0
1819 | 0
1820 | 1
1821 | 1
1822 | 1
1823 | 0
1824 | 0
1825 |
1826 |
1827 | mid3_pos
1828 | mid2_pos
1829 | TranslationRPYRotation
1830 | 25
1831 | 25
1832 | 25
1833 | 0
1834 | 0
1835 | 0
1836 | 0
1837 | 0
1838 | 0
1839 | 0
1840 | 0
1841 | 0
1842 | 0
1843 | 0
1844 | 0
1845 | 0
1846 | 0
1847 | 0
1848 | 0
1849 | 0
1850 | 0
1851 | 0
1852 | 1.5700001
1853 | 1
1854 | 0
1855 | 0
1856 | 0
1857 | 0
1858 | 0
1859 | 0
1860 |
1861 |
1862 | mid3_sph_p
1863 | mid3_pos
1864 | scaling_uniform
1865 | 5
1866 | 0
1867 | 5
1868 | 0
1869 | 0
1870 |
1871 |
1872 | mid3_cyl_p
1873 | mid3_pos
1874 | Trans_RPYRot_Skew
1875 | 10.5
1876 | 10.5
1877 | 10.5
1878 | 0
1879 | 0
1880 | 0
1881 | 0
1882 | 0
1883 | 0
1884 | 0
1885 | 0
1886 | 0
1887 | 0
1888 | 0
1889 | 0
1890 | 0
1891 | 0
1892 | 0
1893 | 0
1894 | 0
1895 | 1.5700001
1896 | 0
1897 | 1.5700001
1898 | 0
1899 | 0
1900 | 0
1901 | 0
1902 | 0
1903 | 0
1904 | 0
1905 | 21
1906 | 10.5
1907 | 21
1908 | 0
1909 | 0
1910 | 5
1911 | 5
1912 | 5
1913 | 0
1914 | 0
1915 | 5
1916 | 5
1917 | 5
1918 | 0
1919 | 0
1920 | 2
1921 | 2
1922 | 2
1923 | 0
1924 | 0
1925 | 1
1926 | 1
1927 | 1
1928 | 0
1929 | 0
1930 |
1931 |
1932 | mid4_sph_p
1933 | mid3_pos
1934 | Trans_scaleU
1935 | 21
1936 | 21
1937 | 21
1938 | 0
1939 | 0
1940 | 0
1941 | 0
1942 | 0
1943 | 0
1944 | 0
1945 | 0
1946 | 0
1947 | 0
1948 | 0
1949 | 0
1950 | 5
1951 | 0
1952 | 5
1953 | 0
1954 | 0
1955 |
1956 | 37
1957 |
1958 | palm_sph1
1959 | palm_sph1_p
1960 | sphere_low.obj
1961 | green
1962 |
1963 |
1964 | palm_sph2
1965 | palm_sph2_p
1966 | sphere_low.obj
1967 | green
1968 |
1969 |
1970 | pinky_sphere
1971 | pinky_sph_p
1972 | sphere_low.obj
1973 | blue
1974 |
1975 |
1976 | pinky2_sphere
1977 | pinky2_sph_p
1978 | sphere_low.obj
1979 | blue
1980 |
1981 |
1982 | pinky3_sphere
1983 | pinky3_sph_p
1984 | sphere_low.obj
1985 | blue
1986 |
1987 |
1988 | pinky4_sph
1989 | pinky4_sph_p
1990 | sphere_low.obj
1991 | blue
1992 |
1993 |
1994 | ring_sphere
1995 | ring_sph_p
1996 | sphere_low.obj
1997 | blue
1998 |
1999 |
2000 | ring2_sphere
2001 | ring2_sph_p
2002 | sphere_low.obj
2003 | blue
2004 |
2005 |
2006 | ring3_sphere
2007 | ring3_sph_p
2008 | sphere_low.obj
2009 | blue
2010 |
2011 |
2012 | ring4_sphere
2013 | ring4_sph_p
2014 | sphere_low.obj
2015 | blue
2016 |
2017 |
2018 | mid_sphere
2019 | mid_sph_p
2020 | sphere_low.obj
2021 | white
2022 |
2023 |
2024 | mid2_sphere
2025 | mid2_sph_p
2026 | sphere_low.obj
2027 | blue
2028 |
2029 |
2030 | mid3_sphere
2031 | mid3_sph_p
2032 | sphere_low.obj
2033 | blue
2034 |
2035 |
2036 | mid4_sphere
2037 | mid4_sph_p
2038 | sphere_low.obj
2039 | blue
2040 |
2041 |
2042 | index_sphere
2043 | index_sph_p
2044 | sphere_low.obj
2045 | blue
2046 |
2047 |
2048 | index2_sphere
2049 | index2_sph_p
2050 | sphere_low.obj
2051 | blue
2052 |
2053 |
2054 | index3_sphere
2055 | index3_sph_p
2056 | sphere_low.obj
2057 | blue
2058 |
2059 |
2060 | index4_sphere
2061 | index4_sph_p
2062 | sphere_low.obj
2063 | blue
2064 |
2065 |
2066 | thumb_cyl
2067 | thumb_cyl_p
2068 | sphere_low.obj
2069 | red
2070 |
2071 |
2072 | thumb2_sphere
2073 | thumb2_sph_p
2074 | sphere_low.obj
2075 | blue
2076 |
2077 |
2078 | thumb3_sph
2079 | thumb3_sph
2080 | sphere_low.obj
2081 | blue
2082 |
2083 |
2084 | thumb4_sphere
2085 | thumb4_sph_p
2086 | sphere_low.obj
2087 | blue
2088 |
2089 |
2090 | palm1
2091 | palm_mesh_pos
2092 | cylinder_low.obj
2093 | purple
2094 |
2095 |
2096 | pinky_cyl
2097 | pinky_cyl_pos
2098 | cylinder_low.obj
2099 | white
2100 |
2101 |
2102 | pinky2_cyl
2103 | pinky2_cyl_pos
2104 | cylinder_low.obj
2105 | white
2106 |
2107 |
2108 | pinky3_cyl
2109 | pinky3_cyl_pos
2110 | cylinder_low.obj
2111 | white
2112 |
2113 |
2114 | ring_cyl
2115 | ring_cyl_p
2116 | cylinder_low.obj
2117 | white
2118 |
2119 |
2120 | ring2_cyl
2121 | ring2_cyl_p
2122 | cylinder_low.obj
2123 | white
2124 |
2125 |
2126 | ring3_cyl
2127 | ring3_cyl_p
2128 | cylinder_low.obj
2129 | white
2130 |
2131 |
2132 | mid_cyl
2133 | mid_cyl_p
2134 | cylinder_low.obj
2135 | white
2136 |
2137 |
2138 | mid2_cyl
2139 | mid2_cyl_p
2140 | cylinder_low.obj
2141 | white
2142 |
2143 |
2144 | mid3_cyl
2145 | mid3_cyl_p
2146 | cylinder_low.obj
2147 | white
2148 |
2149 |
2150 | index_cyl
2151 | index_cyl_p
2152 | cylinder_low.obj
2153 | white
2154 |
2155 |
2156 | index2_cyl
2157 | index2_cyl_p
2158 | cylinder_low.obj
2159 | white
2160 |
2161 |
2162 | index3_cyl
2163 | index3_cyl_p
2164 | cylinder_low.obj
2165 | white
2166 |
2167 |
2168 | thumb2_cyl
2169 | thumb2_cyl_p
2170 | cylinder_low.obj
2171 | white
2172 |
2173 |
2174 | thumb3_cyl
2175 | thumb3_cyl_p
2176 | cylinder_low.obj
2177 | white
2178 |
2179 | 6
2180 |
2181 | close_hand
2182 | add
2183 | -0.80000001
2184 | 0
2185 | 0
2186 | 0
2187 | 0
2188 | 0
2189 | 12
2190 | pinky_pos
2191 | Pitch
2192 | ring_pos
2193 | Pitch
2194 | index_pos
2195 | Pitch
2196 | middle_pos
2197 | Pitch
2198 | pinky2_pos
2199 | Pitch
2200 | pinky3Pos
2201 | Pitch
2202 | ring2_pos
2203 | Pitch
2204 | ring3_pos
2205 | Pitch
2206 | mid2_pos
2207 | Pitch
2208 | mid3_pos
2209 | Pitch
2210 | index2_pos
2211 | Pitch
2212 | index3_pos
2213 | Pitch
2214 |
2215 |
2216 | fingers_tips_radius
2217 | multiply
2218 | 0.80000001
2219 | 0
2220 | 0
2221 | 0
2222 | 1
2223 | 0
2224 | 10
2225 | pinky3_cyl_pos
2226 | skew_topRadius
2227 | ring3_cyl_p
2228 | skew_topRadius
2229 | index3_cyl_p
2230 | skew_topRadius
2231 | mid3_cyl_p
2232 | skew_topRadius
2233 | thumb3_cyl_p
2234 | skew_topRadius
2235 | pinky4_sph_p
2236 | scale
2237 | thumb4_sph_p
2238 | scale
2239 | ring4_sph_p
2240 | scale
2241 | index4_sph_p
2242 | scale
2243 | mid4_sph_p
2244 | scale
2245 |
2246 |
2247 | finger_midHighRadius
2248 | multiply
2249 | 0.89999998
2250 | 0
2251 | 0
2252 | 0
2253 | 1
2254 | 0
2255 | 15
2256 | thumb3_sph
2257 | scale
2258 | pinky2_cyl_pos
2259 | skew_topRadius
2260 | thumb2_cyl_p
2261 | skew_topRadius
2262 | index2_cyl_p
2263 | skew_topRadius
2264 | mid2_cyl_p
2265 | skew_topRadius
2266 | ring2_cyl_p
2267 | skew_topRadius
2268 | pinky3_sph_p
2269 | scale
2270 | index3_sph_p
2271 | scale
2272 | mid3_sph_p
2273 | scale
2274 | ring3_sph_p
2275 | scale
2276 | pinky3_cyl_pos
2277 | skew_baseRadius
2278 | thumb3_cyl_p
2279 | skew_baseRadius
2280 | index3_cyl_p
2281 | skew_baseRadius
2282 | mid3_cyl_p
2283 | skew_baseRadius
2284 | ring3_cyl_p
2285 | skew_baseRadius
2286 |
2287 |
2288 | finger_midLowRadius
2289 | multiply
2290 | 0.94999999
2291 | 0
2292 | 0
2293 | 0
2294 | 1
2295 | 0
2296 | 14
2297 | pinky2_cyl_pos
2298 | skew_baseRadius
2299 | thumb2_cyl_p
2300 | skew_baseRadius
2301 | ring2_cyl_p
2302 | skew_baseRadius
2303 | index2_cyl_p
2304 | skew_baseRadius
2305 | mid2_cyl_p
2306 | skew_baseRadius
2307 | mid2_sph_p
2308 | scale
2309 | index2_sph_p
2310 | scale
2311 | ring2_sph_p
2312 | scale
2313 | thumb2_sph_p
2314 | scale
2315 | pinky2_sph_p
2316 | scale
2317 | pinky_cyl_pos
2318 | skew_topRadius
2319 | ring_cyl_p
2320 | skew_topRadius
2321 | index_cyl_p
2322 | skew_topRadius
2323 | mid_cyl_p
2324 | skew_topRadius
2325 |
2326 |
2327 | finger_bottomRadius
2328 | multiply
2329 | 1
2330 | 0
2331 | 0
2332 | 0
2333 | 1
2334 | 0
2335 | 8
2336 | mid_cyl_p
2337 | skew_baseRadius
2338 | pinky_cyl_pos
2339 | skew_baseRadius
2340 | ring_cyl_p
2341 | skew_baseRadius
2342 | index_cyl_p
2343 | skew_baseRadius
2344 | pinky_sph_p
2345 | scale
2346 | ring_sph_p
2347 | scale
2348 | index_sph_p
2349 | scale
2350 | mid_sph_p
2351 | scale
2352 |
2353 |
2354 | fingers_thickness
2355 | multiply
2356 | 2
2357 | 0
2358 | 0
2359 | 0
2360 | 1
2361 | 0
2362 | 51
2363 | pinky_sph_p
2364 | scale
2365 | thumb_sph_p
2366 | scale
2367 | ring_sph_p
2368 | scale
2369 | index_sph_p
2370 | scale
2371 | pinky2_sph_p
2372 | scale
2373 | pinky3_sph_p
2374 | scale
2375 | pinky4_sph_p
2376 | scale
2377 | thumb2_sph_p
2378 | scale
2379 | thumb3_sph
2380 | scale
2381 | thumb4_sph_p
2382 | scale
2383 | index2_sph_p
2384 | scale
2385 | index3_sph_p
2386 | scale
2387 | index4_sph_p
2388 | scale
2389 | mid_sph_p
2390 | scale
2391 | mid2_sph_p
2392 | scale
2393 | mid3_sph_p
2394 | scale
2395 | mid4_sph_p
2396 | scale
2397 | ring2_sph_p
2398 | scale
2399 | ring3_sph_p
2400 | scale
2401 | ring4_sph_p
2402 | scale
2403 | pinky_cyl_pos
2404 | skew_baseRadius
2405 | pinky_cyl_pos
2406 | skew_topRadius
2407 | pinky2_cyl_pos
2408 | skew_baseRadius
2409 | pinky2_cyl_pos
2410 | skew_topRadius
2411 | pinky3_cyl_pos
2412 | skew_baseRadius
2413 | pinky3_cyl_pos
2414 | skew_topRadius
2415 | thumb2_cyl_p
2416 | skew_baseRadius
2417 | thumb2_cyl_p
2418 | skew_topRadius
2419 | thumb3_cyl_p
2420 | skew_topRadius
2421 | thumb3_cyl_p
2422 | skew_baseRadius
2423 | ring_cyl_p
2424 | skew_baseRadius
2425 | ring_cyl_p
2426 | skew_topRadius
2427 | ring2_cyl_p
2428 | skew_topRadius
2429 | ring2_cyl_p
2430 | skew_baseRadius
2431 | ring3_cyl_p
2432 | skew_baseRadius
2433 | ring3_cyl_p
2434 | skew_topRadius
2435 | index_cyl_p
2436 | skew_topRadius
2437 | index_cyl_p
2438 | skew_baseRadius
2439 | index2_cyl_p
2440 | skew_baseRadius
2441 | index2_cyl_p
2442 | skew_topRadius
2443 | index3_cyl_p
2444 | skew_topRadius
2445 | index3_cyl_p
2446 | skew_baseRadius
2447 | mid_cyl_p
2448 | skew_baseRadius
2449 | mid_cyl_p
2450 | skew_topRadius
2451 | mid2_cyl_p
2452 | skew_topRadius
2453 | mid2_cyl_p
2454 | skew_baseRadius
2455 | mid3_cyl_p
2456 | skew_baseRadius
2457 | mid3_cyl_p
2458 | skew_topRadius
2459 | palm_mesh_pos
2460 | scale_X
2461 | palm_sph1_p
2462 | scaleZ
2463 | palm_sph2_p
2464 | scaleZ
2465 |
2466 | 0
2467 |
2468 |
2469 |
--------------------------------------------------------------------------------