Multikinect:Imal
Notes and resources about the multi-kinect motion capture system developped in collaboration with numediart.org.
Contents
Residence
Imal, 2015
Mise en place d'un setup de 4 kinect v2 avec KSkeletonSuite, version prototype, du 28/12/2015 au 08/01/2015.
- rbm: radhwan ben mardhkour
- fz: frankiezafe
Target
- Validation de la faisabilité
- Identification des problèmes de déployement
- Identification des limites du dispositif
- Performance, stablité logicielle, etc.
- Champs de vision
- Positionnement des points
- Premier essai dans Unity3D
Préparatifs
todos
- RBM
- déployement du soft de calibration sur les slaves -> possible en simple copy/paste?
- déployement du soft de calibration sur le master
- procédure à suivre pour la compilation
- version VS
- libs en statik?
- ou possible en simple copy/paste?
- sauvegarde au niveau master des matrices de transformation des slaves
- FZ
- adaptation du merger au format Kinect V2 (25 points)
- adaptation du streamer pour envoi des rotations
- compilation de l'enregisteur OSC sur windows
- Matos:
- 4 kinects V2
- 3 zotac
- 1 tour highend
- (en option) 2 tour low-profile
setup
- tout est cool: il est "facile" de déployer les softs sur d'autres machines, donc les zotac et les kinects sont suffisants
- les 3 zotac (2 fz & 1 rbm) sont reliés en réseau à la tour de frankiezafe
- sur les zotacs
- un slave de calibration (rbm)
- un slave de stream (fz)
- sur la tour
- un slave de calibration (rbm)
- un slave de stream (fz)
- un master de calibration (rbm)
- un master de fusion (fz)
- enregistreur OSC
- unity
- c'est la merde: pas possible de déployer les slaves de calibration facilement (sans recompilation)
- les zotacs ne peuvent donc pas acceuillir les slaves de calibration :(
- utilisation des 2 tours low profile alienware de rdm pour la calibration - collecte progressive des nuages de points dans le master de calibration (rbm)
- copie des matrices dans les zotacs
Meetings
2015/12/02
démo du système de calibration
attendees:
- radhwan ben mardhkour
- françois zajéga
calibration
- test avec 2 kinects 2, regardant l'espace du même coté, avec un offset de 2.5m et un theta de 60° (à la grosse morblute)
- calibration ok - programmes en qt, fully functional,
- technos: Kinect studio, PCL & QT
matrices sauvées en .yml:
%YAML:1.0 rt_matrix: !!opencv-matrix rows: 4 cols: 4 dt: f data: [ -6.84245110e-001, 1.30183369e-001, 7.17538059e-001, -2.41557217e+000, 7.28974819e-001, 1.49234354e-001, 6.68075502e-001, -1.25812507e+000, -2.01090146e-002, 9.80194569e-001, -1.97013259e-001, 1.19529927e+000, 0., 0., 0., 1. ]
problème lors de la correction de la calibration > le centre de rotation reste l'origine du cloud et non le centre du monde
tests de fusion de skeletons
- différence de taille moindre qu'en kinect 360
- pieds correctement placés
cas limites (niveau slave)
- rotation sur soi-même, solutions envisagées
- sur base du vecteur pointant vers l'avant au niveau des épaules pour les membres supérieurs
- sur base du vecteur pointant vers l'avant au niveau des hanches pour les membres inférieurs
- descendre la confidence dès que ces vecteurs s'approchent de la perpendiculaire à l'axe optique
- membres invisibles d'un des 2 points de vue
- segment/segment, vérifier la direction en fonction à l'axe optique > quand le segment est dans la même direction que cet axe, diminué la confidence du tail (et des points suivants dans la hiérarchie?
autre: ne prendre en compte que les rotations et utiliser un template de squelette pour la taille des segments (peut-etre ajusté séparement) en somme, moyenne pondéré au niveau des rotations locales et non des positions > moins de variations et de squelettes bizarres
Sources
Main applications
K2Streamer
streamer of skeletons, uses a data/configuration.xml file
<kstreamerv2 version="0.200000">
enabling/disabling display of information on screen
<display cam="1" skel_position="1" skel_orientation="0" skel_info="1"></display>
fov_* are used for confidence adaptation
<kinect> <skeletons max_skeletons="6.000000"></skeletons> <fov_znear meters="1.000000"></fov_znear> <fov_zbest meters="2.000000"></fov_zbest> <fov_zfar meters="6.000000"></fov_zfar> <fov_securetheta degree="5"></fov_securetheta> </kinect>
network id is used to open a range of specific ports based on slot:port
<network id="2"> <osc_out> <slot ip="192.168.0.12" port="23000" active="1"></slot> <slot ip="192.168.0.12" port="25000" active="1"></slot> </osc_out> <osc_in> <slot port="23000" active="1"></slot> </osc_in> </network>
yml file are generated by the calibration system; if specified, the .yml overwrite the matrix values specified in row:col
<matrix4x4 yml="masterCalibration_2.yml"> <row id="0"> <col id="0" value="0.704366"></col> <col id="1" value="0.000000"></col> <col id="2" value="-0.709837"></col> <col id="3" value="0.000000"></col> </row> <row id="1"> <col id="0" value="0.000000"></col> <col id="1" value="1.000000"></col> <col id="2" value="0.000000"></col> <col id="3" value="0.000000"></col> </row> <row id="2"> <col id="0" value="0.709837"></col> <col id="1" value="0.000000"></col> <col id="2" value="0.704366"></col> <col id="3" value="0.000000"></col> </row> <row id="3"> <col id="0" value="-1.428571"></col> <col id="1" value="1.330049"></col> <col id="2" value="0.000000"></col> <col id="3" value="1.000000"></col> </row> </matrix4x4> </kstreamerv2>
source: kinectskeletonstreamerv2
K2Merger
merger of skeletons emitted by the streamers
Will be compliant with any kind of kinect stream (OpenNI, Kinect SDK 1.8 & Kinect SDK 2). Not done yet.
source: kinectskeletonmerger
Utils
- K2OscdumpRecorder - plays osc dumps recorded with K2OscRecorder
- K2OscdumpPlayer - plays osc dumps recorded with K2OscRecorder
Resources
platforms & libraries
- Qt - C++ application framework
- PCL - library for 2D/3D image and point cloud processing - BSD license
- Openframeworks - C++ creative coding framework
repositories
- KSkeletonSuite - main repository for current and future developments
- KinectSkeletonConfigurator - manual configuration of KinectSkeletonStreamer (osc)
- KinectSkeletonMerger - Merger of KinectSkeletonStreamer (osc)
- KinectSkeletonStreamer - Kinect 360 OSC streamer
- KinectSkeletonStreamerV2 - Kinect 2 OSC streamer
- K2UdpStreamer - Kinect 2 UDP streamer (not working)
related projects
- Bloom, a garden fed by motion - artistic & technical research
--Frankiezafe (talk) 15:04, 22 December 2015 (CET)