private void createSkeletonInstances(UserData user) throws Exception { skeletonIstances = new ArrayList<Instance>(); Skeleton skeleton = user.getSkeleton(); double torso_conf = skeleton.getJoint(JointType.TORSO).getPositionConfidence(); if (torso_conf >= TORSO_CONF) { // se TORSO rilevato correttamente : IMPORTANTE per la correttezza // delle distanze dei vari limb Point3D<Float> torso_pos = skeleton.getJoint(JointType.TORSO).getPosition(); // save origin's coordinates x_torso = (Float) torso_pos.getX(); y_torso = (Float) torso_pos.getY(); z_torso = (Float) torso_pos.getZ(); createLimbInstance(skeleton, TRACKER_HEAD_LIMB, HEAD_ABOUT, head_att); createLimbInstance(skeleton, TRACKER_BODY_UPRIGHT_LIMB, BODY_UPRIGHT_ABOUT, body_upright_att); createLimbInstance( skeleton, TRACKER_BODY_STAN_SLANTING_LIMB, BODY_STAN_SLANTING_ABOUT, body_stan_slanting_att); createLimbInstance( skeleton, TRACKER_BODY_SIT_SLANTING_LIMB, BODY_SIT_SLANTING_ABOUT, body_sit_slanting_att); createLimbInstance(skeleton, TRACKER_LEFT_ARM_LIMB, LEFT_ARM_ABOUT, left_arm_att); createLimbInstance(skeleton, TRACKER_RIGHT_ARM_LIMB, RIGHT_ARM_ABOUT, right_arm_att); createLimbInstance(skeleton, TRACKER_LEFT_LEG_LIMB, LEFT_LEG_ABOUT, left_leg_att); createLimbInstance(skeleton, TRACKER_RIGHT_LEG_LIMB, RIGHT_LEG_ABOUT, right_leg_att); sendInstance(); } }
private void createLimbInstance( Skeleton skeleton, int limb, int[] limb_about, List<Attribute> limb_att) { int att = 1; Instance ist = new DenseInstance((SPATIAL_COORD * limb_about.length) + 1); limb_att = classifier.getLimbFeatureDataSet(limb); for (int i = 0; i < limb_about.length; i++) { if (limb_about[i] != TORSO) { /* * il punto di riferimento per tutti i joint (meno che per il * TORSO), ossia il centro degli assi che descrivono lo spazio * in cui si possono muovere è il TORSO stesso. */ Point3D<Float> joint = skeleton.getJoint(SKELETON_JOINT(limb_about[i])).getPosition(); ist.setValue((Attribute) limb_att.get(att), (joint.getX() - x_torso)); ist.setValue((Attribute) limb_att.get(att + 1), (joint.getY() - y_torso)); ist.setValue((Attribute) limb_att.get(att + 2), (joint.getZ() - z_torso)); att += 3; } else { /* * il punto di riferimento per il BODY invece è il punto con * coordinate (0, -Ytorso, 0), e cioè, il punto sul pavimento * esattamente perpendicolare al TORSO stesso */ Point3D<Float> left_foot = skeleton.getJoint(JointType.LEFT_FOOT).getPosition(); Point3D<Float> right_foot = skeleton.getJoint(JointType.RIGHT_FOOT).getPosition(); // save the two probably torso's new coordinates float torso_footSX = y_torso - left_foot.getY(); float torso_footDX = y_torso - right_foot.getY(); float y_torso_rifFoot = (torso_footSX > torso_footDX) ? torso_footSX : torso_footDX; ist.setValue((Attribute) limb_att.get(att), 0); ist.setValue((Attribute) limb_att.get(att + 1), y_torso_rifFoot); ist.setValue((Attribute) limb_att.get(att + 2), 0); att += 3; } } skeletonIstances.add(ist); }