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();
        }
示例#4
0
        /// <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);
        }
示例#5
0
 /// <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));
 }
示例#6
0
 /// <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;
 }