5.2.1 Exercise specification playlist
Exercises are specified using a hierarchical data model based on the Labanotation. This data model is shown in Figure 26. But a real life performance of an exercise happens in a sequential instead of a hierarchical manner, therefore the exercise specification needs to be converted to a sequential format. This sequential “playlist” contains all successive segments, and takes the “repeat” and “next segment” information in to account. When a certain segment has to be repeated 5 times, it will be placed in the
KinectRecorder getRelativeJointPosition (x,y,z) HorizontalDirectionDetector amount accent VerticalDirectionDetector amount accent RotationDetector amount accent RelativeDetector amount accent xmlParser exercise Exercise SegmentSet BodyPart HorizontalDirection Rotation VerticalDirection Relative Duration WindowSampler getWindowStart getWindowEnd returnWindowTranslation WindowSizes getDurations return Window Sizes
SimpleTranslationResult
getDetectorResults return Combined result
ResultWeighter
getResults return final Result
ResultInterpreter
check against Exercise return faults
Personalization
50
playlist 5 times. The exercise playlist indicates at each moment in time what each body part must do. Because not every body part performs an action all the time, the relevant number of body parts can change depending on the segment. If a body part is not available at a certain time, this means that this body part does not perform a relevant action at that time. The actions of this body part at such a moment are ignored. When it is important that the body part is kept at a constant position, this specification should explicitly state this, for example by indicating the Horizontal direction is “Place”. 5.2.2 Sample window lengths
Based on the duration of all translations in the exercise specification, a suitable sampling window duration is chosen. The duration of a window is the time in between two samples of skeleton positions. These two positions are subtracted from each other, to get the relative movement of the window, which is the translation at the given time. The shortest window at which the movement data is sampled should be at least as short as the shortest duration of the translations in the exercise specification. In practice even a shorter window is needed, because sampling of the windows is not perfectly in sync with the performance of the actions. As discussed in the next paragraph, the system can sample using multiple window sizes. The longer windows are all an exact multiplication of the shortest window to keep implementation simple. The duration of the longest window is related to the duration of the longest translation. The other windows are equally divided between the shortest and longest window, rounded to be multiples of the shortest window.
Figure 28: All joints of the Kinect skeleton model.
5.2.3 Relevant Body Parts
In paragraph 4.3.1 the different joint models which can be used to describe the movements, are discussed. Not all joints in these models are part of the Kinect skeleton model, therefore a translation between the body part names used in the exercise specification, and the Kinect “compliant” joints must be made. Body parts without a direct equivalent are: Body, Upper Body, Lower Body, Arm and Leg. The “Body” is by definition the most important body part in the Labanotation hierarchy, and the equivalent exists in the Kinect hierarchy as well: “Hip Center”. Movement of the “Upper body” is related to movement of the following Kinect joints: Shoulder Center/Left/Right and the Head. The “Lower body” relates to Hip Center/Left/Right and the Spline. For the upper and lower body, the central joints (Hip Center and Shoulder Center) represent the movement best, because these are in the center of mass of a relatively ridged part of the body. “Arm” relates to the left or right Wrist, Hand and Elbow. And last, the “Leg” relates to the left or right Knee, Ankle and Foot. For the arms and legs, the movement of the extremities is more important than the movement of the elbow or knee, because
51
the movement is limited in the parent joint (hip/shoulder), and elbow or knee are close to the parent joint.
Most of the body parts are present at both the left and the right side of the body. In the exercise specification the following identifiers are available to control which side is meant: both, left, right, affected and non-affected (see paragraph 4.3.5). These modifiers are ignored for body parts that have no left and right version: Hip center, Spine, Shoulder center and head. For the other body parts, the option “both” will place both the left and right version in the list of body parts that need to be tracked (the relevant body part list). For the options “left” and “right” evidently, the left or right version of the body part is placed in the list. The “affected” and “non-affected” options are substituted by left or right, based on the “affected” field in the personalization options (see paragraph 4.3.5). Summarized: the body part parser reads through the whole exercise specification. It places each body part which has an active role in the exercise in the relevant body part list, but only after it is translated to a specific Kinect compliant joint.