public void analyze() { bfpa = this.parent.bodyFrameHandler.bodyFramePreAnalysis; apa = this.parent.audioHandler.audioPreAnalysis; searchMistakes(); saveCurrentBodyAsOldBody(); }
public BodyFrameHandler(KinectSensor kinectSensor) { kinectImage= new Image(); bodyFramePreAnalysis = new BodyFramePreAnalysis(null); this.kinectSensor = kinectSensor; this.coordinateMapper = this.kinectSensor.CoordinateMapper; FrameDescription frameDescription = this.kinectSensor.DepthFrameSource.FrameDescription; // get size of joint space this.displayWidth = frameDescription.Width; this.displayHeight = frameDescription.Height; // open the reader for the body frames this.bodyFrameReader = this.kinectSensor.BodyFrameSource.OpenReader(); // a bone defined as a line between two joints this.bones = new List<Tuple<JointType, JointType>>(); // Torso this.bones.Add(new Tuple<JointType, JointType>(JointType.Head, JointType.Neck)); this.bones.Add(new Tuple<JointType, JointType>(JointType.Neck, JointType.SpineShoulder)); this.bones.Add(new Tuple<JointType, JointType>(JointType.SpineShoulder, JointType.SpineMid)); this.bones.Add(new Tuple<JointType, JointType>(JointType.SpineMid, JointType.SpineBase)); this.bones.Add(new Tuple<JointType, JointType>(JointType.SpineShoulder, JointType.ShoulderRight)); this.bones.Add(new Tuple<JointType, JointType>(JointType.SpineShoulder, JointType.ShoulderLeft)); this.bones.Add(new Tuple<JointType, JointType>(JointType.SpineBase, JointType.HipRight)); this.bones.Add(new Tuple<JointType, JointType>(JointType.SpineBase, JointType.HipLeft)); // Right Arm this.bones.Add(new Tuple<JointType, JointType>(JointType.ShoulderRight, JointType.ElbowRight)); this.bones.Add(new Tuple<JointType, JointType>(JointType.ElbowRight, JointType.WristRight)); this.bones.Add(new Tuple<JointType, JointType>(JointType.WristRight, JointType.HandRight)); this.bones.Add(new Tuple<JointType, JointType>(JointType.HandRight, JointType.HandTipRight)); this.bones.Add(new Tuple<JointType, JointType>(JointType.WristRight, JointType.ThumbRight)); // Left Arm this.bones.Add(new Tuple<JointType, JointType>(JointType.ShoulderLeft, JointType.ElbowLeft)); this.bones.Add(new Tuple<JointType, JointType>(JointType.ElbowLeft, JointType.WristLeft)); this.bones.Add(new Tuple<JointType, JointType>(JointType.WristLeft, JointType.HandLeft)); this.bones.Add(new Tuple<JointType, JointType>(JointType.HandLeft, JointType.HandTipLeft)); this.bones.Add(new Tuple<JointType, JointType>(JointType.WristLeft, JointType.ThumbLeft)); // Right Leg this.bones.Add(new Tuple<JointType, JointType>(JointType.HipRight, JointType.KneeRight)); this.bones.Add(new Tuple<JointType, JointType>(JointType.KneeRight, JointType.AnkleRight)); this.bones.Add(new Tuple<JointType, JointType>(JointType.AnkleRight, JointType.FootRight)); // Left Leg this.bones.Add(new Tuple<JointType, JointType>(JointType.HipLeft, JointType.KneeLeft)); this.bones.Add(new Tuple<JointType, JointType>(JointType.KneeLeft, JointType.AnkleLeft)); this.bones.Add(new Tuple<JointType, JointType>(JointType.AnkleLeft, JointType.FootLeft)); // populate body colors, one for each BodyIndex this.bodyColors = new List<Pen>(); this.bodyColors.Add(new Pen(Brushes.Red, 6)); this.bodyColors.Add(new Pen(Brushes.Orange, 6)); this.bodyColors.Add(new Pen(Brushes.Green, 6)); this.bodyColors.Add(new Pen(Brushes.Blue, 6)); this.bodyColors.Add(new Pen(Brushes.Indigo, 6)); this.bodyColors.Add(new Pen(Brushes.Violet, 6)); this.drawingGroup = new DrawingGroup(); // Create an image source that we can use in our image control this.skeletonImageSource = new DrawingImage(this.drawingGroup); //if (this.bodyFrameReader != null) //{ // this.bodyFrameReader.FrameArrived += this.Reader_FrameArrived; //} }
public void AnalyseRules() { noMistake = true; bfpa = this.parent.bodyFrameHandler.bodyFramePreAnalysis; apa = this.parent.audioHandler.audioPreAnalysis; checkPeriodicMovements(); //DETECT HAND MOVEMENT CODE bfpa.calcIsMovingArms(); /**Structure of switch blocks: * If good: - end mistake that is busy, if there is one. * If not good: -Same Type Mistake Busy --Change gravity to worst kind --set bool to true -Different Type Mistake Busy --End that mistake and add the new one --set bool to true -No Mistake Busy --Start new mistake --set bool to true * */ volumeMistake = false; cadenceMistake = false; postureMistake = false; handMovementMistake = false; if(parent.freestyleMode!=null) { if (parent.freestyleMode.myState == PresentationTrainer.FreestyleMode.currentState.play) { checkMistakes(); checkStyle(); Mistake biggestMistake = findBiggestMistake(); //Style biggestStyle = findBiggestStyle(); fireBiggestEvent(biggestMistake, null); } } saveCurrentBodyAsOldBody(); }