public MySkeleton(MySkeleton a, MySkeleton b, long ABtimeDif, long AThisTimeDif) { foreach (DictionaryEntry pair in a.getJoints()) { String jointName = (String)pair.Key; JointPosition apos = a.getJoint(jointName); JointPosition bpos = b.getJoint(jointName); float cx = ((float)AThisTimeDif / (float)ABtimeDif) * (bpos.x - apos.x) + apos.x; float cy = ((float)AThisTimeDif / (float)ABtimeDif) * (bpos.y - apos.y) + apos.y; float cz = ((float)AThisTimeDif / (float)ABtimeDif) * (bpos.z - apos.z) + apos.z; joints.Add(jointName, new JointPosition(cx, cy, cz)); } }
public List <MySkeletonFrame> interpolate(MySkeletonFrame next) { List <MySkeletonFrame> results = new List <MySkeletonFrame>(); long gap = next.getTime() - getTime(); long numOfSpans = gap / (long)33; if (numOfSpans == 0) { return(results); } long interval = gap / numOfSpans; for (int i = 1; i < numOfSpans; i++) { MySkeleton interSkeleton = new MySkeleton(this.skeleton, next.skeleton, next.getTime() - this.getTime(), (long)i * interval); MySkeletonFrame interpolation = new MySkeletonFrame(interSkeleton, this.timeTag + (long)i * interval); results.Add(interpolation); } return(results); }
/// <summary> /// load the recorded raw frames of the project located in selectedPath /// </summary> private void open_selectedPath_project() { recorded_color_frames = new List <MyColorFrame>(); recorded_skeleton_frames = new List <MySkeletonFrame>(); String[] rgbFilePaths = Directory.GetFiles(selectedPath + "\\raw\\rgb", "*.jpg"); foreach (String filePath in rgbFilePaths) { long timeTag = long.Parse(filePath.Split('\\').Last().Substring(0, filePath.Split('\\').Last().Length - 4)); System.Drawing.Bitmap img = (System.Drawing.Bitmap)System.Drawing.Bitmap.FromFile(filePath); recorded_color_frames.Add(new MyColorFrame(timeTag, img)); } if (File.Exists(selectedPath + "\\raw\\skeleton.txt")) { using (StreamReader r = new StreamReader(selectedPath + "\\raw\\skeleton.txt")) { String headline = r.ReadLine(); while (headline != null && headline != "") { long timeTag = long.Parse(headline.Split(' ')[0]); MySkeleton skeleton = new MySkeleton(int.Parse(headline.Split(' ')[1])); for (int i = 0; i < 20; i++) { String line = r.ReadLine(); String jointName = line.Split(' ')[0]; float x = float.Parse(line.Split(' ')[1]); float y = float.Parse(line.Split(' ')[2]); float z = float.Parse(line.Split(' ')[3]); skeleton.addJoint(jointName, x, y, z); } recorded_skeleton_frames.Add(new MySkeletonFrame(skeleton, timeTag)); r.ReadLine(); headline = r.ReadLine(); } } } case_count = Directory.GetDirectories(selectedPath + "\\cases").Count(); }
/// <summary> /// simply converts a 3d point to display on 640 * 480 : 2d frame /// </summary> /// <param name="bg">frame to draw skeleton on</param> /// <param name="skeleton">skeleton of the frame</param> /// <param name="initsize">skeleton frame initial size</param> /// <param name="proportion">ratio of skeleton fram scale</param> /// <param name="paintskeleton">determines whether or not all skeleton bones should be painted</param> /// <param name="hidedead">whether or not the head should be hided with a black square or not</param> private static System.Drawing.Image paint(Image bg, MySkeleton skeleton, Point initsize, double proportion, Boolean paintskeleton, Boolean hidehead) { if (skeleton == null) { return(bg); } Graphics g = Graphics.FromImage(bg); Pen bonePen = new Pen(System.Drawing.ColorTranslator.FromHtml("#008000"), 6); Pen jointPen = new Pen(System.Drawing.ColorTranslator.FromHtml("#44c044"), 4); Point head = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.Head.ToString()), initsize, proportion); Point shoulderCenter = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.ShoulderCenter.ToString()), initsize, proportion); Point shoulderLeft = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.ShoulderLeft.ToString()), initsize, proportion); Point shoulderRight = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.ShoulderRight.ToString()), initsize, proportion); Point ankleLeft = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.AnkleLeft.ToString()), initsize, proportion); Point ankleRight = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.AnkleRight.ToString()), initsize, proportion); Point elbowLeft = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.ElbowLeft.ToString()), initsize, proportion); Point elbowRight = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.ElbowRight.ToString()), initsize, proportion); Point footLeft = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.FootLeft.ToString()), initsize, proportion); Point footRight = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.FootRight.ToString()), initsize, proportion); Point handLeft = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.HandLeft.ToString()), initsize, proportion); Point handRight = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.HandRight.ToString()), initsize, proportion); Point hipCenter = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.HipCenter.ToString()), initsize, proportion); Point hipLeft = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.HipLeft.ToString()), initsize, proportion); Point hipRight = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.HipRight.ToString()), initsize, proportion); Point kneeLeft = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.KneeLeft.ToString()), initsize, proportion); Point kneeRight = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.KneeRight.ToString()), initsize, proportion); Point spine = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.Spine.ToString()), initsize, proportion); Point wristLeft = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.WristLeft.ToString()), initsize, proportion); Point wristRight = SkeletonPointConverter.convertAndScale(skeleton.getJoint(JointType.WristRight.ToString()), initsize, proportion); if (paintskeleton) { g.DrawLine(bonePen, head, shoulderCenter); g.DrawLine(bonePen, shoulderCenter, shoulderLeft); g.DrawLine(bonePen, shoulderCenter, shoulderRight); g.DrawLine(bonePen, shoulderCenter, spine); g.DrawLine(bonePen, spine, hipCenter); g.DrawLine(bonePen, hipCenter, hipLeft); g.DrawLine(bonePen, hipCenter, hipRight); g.DrawLine(bonePen, shoulderLeft, elbowLeft); g.DrawLine(bonePen, elbowLeft, wristLeft); g.DrawLine(bonePen, wristLeft, handLeft); g.DrawLine(bonePen, shoulderRight, elbowRight); g.DrawLine(bonePen, elbowRight, wristRight); g.DrawLine(bonePen, wristRight, handRight); g.DrawLine(bonePen, hipLeft, kneeLeft); g.DrawLine(bonePen, kneeLeft, ankleLeft); g.DrawLine(bonePen, ankleLeft, footLeft); g.DrawLine(bonePen, hipRight, kneeRight); g.DrawLine(bonePen, kneeRight, ankleRight); g.DrawLine(bonePen, ankleRight, footRight); g.DrawEllipse(jointPen, head.X - 2, head.Y - 2, 4, 4); g.DrawEllipse(jointPen, shoulderCenter.X - 2, shoulderCenter.Y - 2, 4, 4); g.DrawEllipse(jointPen, shoulderLeft.X - 2, shoulderLeft.Y - 2, 4, 4); g.DrawEllipse(jointPen, shoulderRight.X - 2, shoulderRight.Y - 2, 4, 4); g.DrawEllipse(jointPen, elbowLeft.X - 2, elbowLeft.Y - 2, 4, 4); g.DrawEllipse(jointPen, elbowRight.X - 2, elbowRight.Y - 2, 4, 4); g.DrawEllipse(jointPen, handLeft.X - 2, handLeft.Y - 2, 4, 4); g.DrawEllipse(jointPen, handRight.X - 2, handRight.Y - 2, 4, 4); g.DrawEllipse(jointPen, wristLeft.X - 2, wristLeft.Y - 2, 4, 4); g.DrawEllipse(jointPen, wristRight.X - 2, wristRight.Y - 2, 4, 4); g.DrawEllipse(jointPen, hipCenter.X - 2, hipCenter.Y - 2, 4, 4); g.DrawEllipse(jointPen, hipLeft.X - 2, hipLeft.Y - 2, 4, 4); g.DrawEllipse(jointPen, hipRight.X - 2, hipRight.Y - 2, 4, 4); g.DrawEllipse(jointPen, kneeLeft.X - 2, kneeLeft.Y - 2, 4, 4); g.DrawEllipse(jointPen, kneeRight.X - 2, kneeRight.Y - 2, 4, 4); g.DrawEllipse(jointPen, footLeft.X - 2, footLeft.Y - 2, 4, 4); g.DrawEllipse(jointPen, footRight.X - 2, footRight.Y - 2, 4, 4); g.DrawEllipse(jointPen, spine.X - 2, spine.Y - 2, 4, 4); g.DrawEllipse(jointPen, ankleLeft.X - 2, ankleLeft.Y - 2, 4, 4); g.DrawEllipse(jointPen, ankleRight.X - 2, ankleRight.Y - 2, 4, 4); } if (hidehead) { Point headCoverSize = getHeadCoverSize(skeleton.getJoint(JointType.Head.ToString()).z); int coverx = head.X - Convert.ToInt32(headCoverSize.X / 2); int covery = head.Y - Convert.ToInt32(headCoverSize.Y / 3); System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black); g.FillRectangle(myBrush, new Rectangle(coverx, covery, headCoverSize.X, headCoverSize.Y)); } return(bg); }
/// <summary> /// draw on a background and also hide head /// </summary> /// <param name="img">background to draw skeleton on</param> /// <param name="skeleton">skeleton to be drawn on the background</param> public static System.Drawing.Image hideHead(Image img, MySkeleton skeleton) { return(paint(img, skeleton, new Point(640, 480), (double)(271.0 / 300.0), false, true)); }
/// <summary> /// draw on a blank black frame /// </summary> /// <param name="skeleton">skeleton to draw</param> public static System.Drawing.Image paintonblank(MySkeleton skeleton) { return(paint(new Bitmap(640, 480), skeleton, new Point(640, 480), 1, true, false)); }
public MySkeletonFrame(long timeTag) { this.skeleton = null; this.timeTag = timeTag; }
public MySkeletonFrame(MySkeleton skeleton, long timeTag) { this.skeleton = skeleton; this.timeTag = timeTag; }
public MySkeletonFrame(Skeleton skeleton, long timeTag) { this.skeleton = new MySkeleton(skeleton); this.timeTag = timeTag; }