//adds the GestureData obj and classLabel to database public Sequence Add(GestureData[] sequence, string classLabel) { if (sequence == null || sequence.Length == 0) return null; if (!Classes.Contains(classLabel)) Classes.Add(classLabel); int classIndex = Classes.IndexOf(classLabel); //create a new obj of Sequence class, to add to the Samples<Sequence> list Sequence sample = new Sequence() { Classes = Classes, //all the classes are stored in a list form SourcePath = sequence, //the GestureData obj is added Output = classIndex //the class label (int form) }; Samples.Add(sample); return sample; }
void TraceTrackedSkeletonJoints(JointCollection jCollection) { Point3D shl, shr, elbl, elbr, wrstl, wrstr, handl, handr, spine, head; if (flagRecording && frameCount >= 6) { //add check if jointdata is non null if (jCollection[JointType.ShoulderLeft].TrackingState == JointTrackingState.Tracked) { shl = new Point3D(jCollection[JointType.ShoulderLeft].Position.X, jCollection[JointType.ShoulderLeft].Position.Y, jCollection[JointType.ShoulderLeft].Position.Z); } else { shl = new Point3D(0,0,0); } if (jCollection[JointType.ShoulderRight].TrackingState == JointTrackingState.Tracked) { shr = new Point3D(jCollection[JointType.ShoulderRight].Position.X, jCollection[JointType.ShoulderRight].Position.Y, jCollection[JointType.ShoulderRight].Position.Z); } else { shr = new Point3D(0,0,0); } if(jCollection[JointType.ElbowLeft].TrackingState == JointTrackingState.Tracked) { elbl = new Point3D(jCollection[JointType.ElbowLeft].Position.X, jCollection[JointType.ElbowLeft].Position.Y, jCollection[JointType.ElbowLeft].Position.Z); } else { elbl = new Point3D(0,0,0); } if(jCollection[JointType.ElbowRight].TrackingState == JointTrackingState.Tracked ) { elbr = new Point3D(jCollection[JointType.ElbowRight].Position.X, jCollection[JointType.ElbowRight].Position.Y, jCollection[JointType.ElbowRight].Position.Z); } else { elbr = new Point3D(0,0,0); } if(jCollection[JointType.WristLeft].TrackingState == JointTrackingState.Tracked) { wrstl = new Point3D(jCollection[JointType.WristLeft].Position.X, jCollection[JointType.WristLeft].Position.Y, jCollection[JointType.WristLeft].Position.Z); } else { wrstl = new Point3D(0,0,0); } if(jCollection[JointType.WristRight].TrackingState == JointTrackingState.Tracked) { wrstr = new Point3D(jCollection[JointType.WristRight].Position.X, jCollection[JointType.WristRight].Position.Y, jCollection[JointType.WristRight].Position.Z); } else { wrstr = new Point3D(0,0,0); } if(jCollection[JointType.HandLeft].TrackingState == JointTrackingState.Tracked) { handl = new Point3D(jCollection[JointType.HandLeft].Position.X, jCollection[JointType.HandLeft].Position.Y, jCollection[JointType.HandLeft].Position.Z); } else { handl = new Point3D(0,0,0); } if(jCollection[JointType.HandRight].TrackingState == JointTrackingState.Tracked ) { handr = new Point3D(jCollection[JointType.HandRight].Position.X, jCollection[JointType.HandRight].Position.Y, jCollection[JointType.HandRight].Position.Z); } else { handr = new Point3D(0,0,0); } if(jCollection[JointType.Spine].TrackingState == JointTrackingState.Tracked ) { spine = new Point3D(jCollection[JointType.Spine].Position.X, jCollection[JointType.Spine].Position.Y, jCollection[JointType.Spine].Position.Z); } else { spine = new Point3D(0,0,0); } if(jCollection[JointType.Head].TrackingState == JointTrackingState.Tracked) { head = new Point3D(jCollection[JointType.Head].Position.X, jCollection[JointType.Head].Position.Y, jCollection[JointType.Head].Position.Z); } else { head = new Point3D(0,0,0); } //frameCount++; GestureData gd = new GestureData(shl, shr, elbl, elbr, wrstl, wrstr, handl, handr, spine, head); sequence.Add(gd); System.Diagnostics.Debug.WriteLine("Seq added==========="); frameCount = 0; } else if(flagRecording) { frameCount++; System.Diagnostics.Debug.Write("~"); } }
//point[] seq public static double[][] Preprocess(GestureData[] sequence) { double[][] result = new double[sequence.Length][]; for (int i = 0; i < sequence.Length; i++) //using hand right x,yz; hand left x,yz; elbow right x,yz; elbow left x,yz; wrist right x,y; wrist left x,y result[i] = new double[] { sequence[i].HandR.X, sequence[i].HandR.Y, sequence[i].HandR.Z, sequence[i].HandL.X, sequence[i].HandL.Y, sequence[i].HandL.Z, sequence[i].ElbowL.X, sequence[i].ElbowL.Y, sequence[i].ElbowL.Z, sequence[i].ElbowR.X, sequence[i].ElbowR.Y, sequence[i].ElbowR.Z, sequence[i].WristR.X, sequence[i].WristR.Y, sequence[i].WristL.X, sequence[i].WristL.Y }; //using only handRight for now to paint gesture double[][] zscores = Accord.Statistics.Tools.ZScores(result); return zscores.Add(10); }
void TraceTrackedSkeletonJoints(JointCollection jCollection) { Point3D shl, shr, elbl, elbr, wrstl, wrstr, handl, handr, spine, head; if (flagRecording && frameCount >= 6) { //add check if jointdata is non null if (jCollection[JointType.ShoulderLeft].TrackingState == JointTrackingState.Tracked) { shl = new Point3D(jCollection[JointType.ShoulderLeft].Position.X, jCollection[JointType.ShoulderLeft].Position.Y, jCollection[JointType.ShoulderLeft].Position.Z); } else { shl = new Point3D(0, 0, 0); } if (jCollection[JointType.ShoulderRight].TrackingState == JointTrackingState.Tracked) { shr = new Point3D(jCollection[JointType.ShoulderRight].Position.X, jCollection[JointType.ShoulderRight].Position.Y, jCollection[JointType.ShoulderRight].Position.Z); } else { shr = new Point3D(0, 0, 0); } if (jCollection[JointType.ElbowLeft].TrackingState == JointTrackingState.Tracked) { elbl = new Point3D(jCollection[JointType.ElbowLeft].Position.X, jCollection[JointType.ElbowLeft].Position.Y, jCollection[JointType.ElbowLeft].Position.Z); } else { elbl = new Point3D(0, 0, 0); } if (jCollection[JointType.ElbowRight].TrackingState == JointTrackingState.Tracked) { elbr = new Point3D(jCollection[JointType.ElbowRight].Position.X, jCollection[JointType.ElbowRight].Position.Y, jCollection[JointType.ElbowRight].Position.Z); } else { elbr = new Point3D(0, 0, 0); } if (jCollection[JointType.WristLeft].TrackingState == JointTrackingState.Tracked) { wrstl = new Point3D(jCollection[JointType.WristLeft].Position.X, jCollection[JointType.WristLeft].Position.Y, jCollection[JointType.WristLeft].Position.Z); } else { wrstl = new Point3D(0, 0, 0); } if (jCollection[JointType.WristRight].TrackingState == JointTrackingState.Tracked) { wrstr = new Point3D(jCollection[JointType.WristRight].Position.X, jCollection[JointType.WristRight].Position.Y, jCollection[JointType.WristRight].Position.Z); } else { wrstr = new Point3D(0, 0, 0); } if (jCollection[JointType.HandLeft].TrackingState == JointTrackingState.Tracked) { handl = new Point3D(jCollection[JointType.HandLeft].Position.X, jCollection[JointType.HandLeft].Position.Y, jCollection[JointType.HandLeft].Position.Z); } else { handl = new Point3D(0, 0, 0); } if (jCollection[JointType.HandRight].TrackingState == JointTrackingState.Tracked) { handr = new Point3D(jCollection[JointType.HandRight].Position.X, jCollection[JointType.HandRight].Position.Y, jCollection[JointType.HandRight].Position.Z); } else { handr = new Point3D(0, 0, 0); } if (jCollection[JointType.Spine].TrackingState == JointTrackingState.Tracked) { spine = new Point3D(jCollection[JointType.Spine].Position.X, jCollection[JointType.Spine].Position.Y, jCollection[JointType.Spine].Position.Z); } else { spine = new Point3D(0, 0, 0); } if (jCollection[JointType.Head].TrackingState == JointTrackingState.Tracked) { head = new Point3D(jCollection[JointType.Head].Position.X, jCollection[JointType.Head].Position.Y, jCollection[JointType.Head].Position.Z); } else { head = new Point3D(0, 0, 0); } //frameCount++; GestureData gd = new GestureData(shl, shr, elbl, elbr, wrstl, wrstr, handl, handr, spine, head); sequence.Add(gd); System.Diagnostics.Debug.WriteLine("Seq added==========="); frameCount = 0; } else if (flagRecording) { frameCount++; System.Diagnostics.Debug.Write("~"); } }
//point[] seq public static Bitmap ToBitmap(GestureData[] sequence) { if (sequence.Length == 0) return null; int xmax = (int)sequence.Max(x => x.HandR.X); int xmin = (int)sequence.Min(x => x.HandR.X); int ymax = (int)sequence.Max(x => x.HandR.Y); int ymin = (int)sequence.Min(x => x.HandR.Y); int width = xmax - xmin; int height = ymax - ymin; Bitmap bmp = new Bitmap(width + 16, height + 16); Graphics g = Graphics.FromImage(bmp); for (int i = 1; i < sequence.Length; i++) { int x = (int)sequence[i].HandR.X - xmin; int y = (int)sequence[i].HandR.Y - ymin; int p = (int)Accord.Math.Tools.Scale(0, sequence.Length, 0, 255, i); int prevX = (int)sequence[i - 1].HandR.X - xmin; int prevY = (int)sequence[i - 1].HandR.Y - ymin; using (Brush brush = new SolidBrush(Color.FromArgb(255 - p, 0, p))) using (Pen pen = new Pen(brush, 16)) { pen.StartCap = LineCap.Round; pen.EndCap = LineCap.Round; g.DrawLine(pen, prevX, prevY, x, y); } } return bmp; }