Exemplo n.º 1
0
 private void NiTeOnNewData(HandTracker handTracker)
 {
     try
     {
         if (Settings.Default.SmartCam && this.uTracker != null && this.uTracker.IsValid && this.hTracker != null &&
             this.hTracker.IsValid)
         {
             using (UserTrackerFrameRef userframe = this.uTracker.ReadFrame())
             {
                 using (HandTrackerFrameRef handframe = this.hTracker.ReadFrame())
                 {
                     foreach (GestureData gesture in handframe.Gestures)
                     {
                         if (!gesture.IsComplete)
                         {
                             continue;
                         }
                         PointF handPos = this.hTracker.ConvertHandCoordinatesToDepth(gesture.CurrentPosition);
                         short  userId  =
                             Marshal.ReadByte(
                                 userframe.UserMap.Pixels + (int)(handPos.Y * userframe.UserMap.DataStrideBytes)
                                 + (int)(handPos.X * 2));
                         if (userId > 0)
                         {
                             this.activeUserId = userId;
                         }
                     }
                     handframe.Release();
                 }
                 if (this.activeUserId > 0)
                 {
                     UserData user = userframe.GetUserById(this.activeUserId);
                     if (user.IsValid && user.IsVisible && user.CenterOfMass.Z > 0)
                     {
                         RectangleF position    = new RectangleF(0, 0, 0, 0);
                         PointF     botlocation = this.uTracker.ConvertJointCoordinatesToDepth(user.CenterOfMass);
                         int        pSize       =
                             (int)
                             (Math.Max((int)((4700 - user.CenterOfMass.Z) * 0.08), 50)
                              * ((float)userframe.UserMap.FrameSize.Height / 480));
                         position.Y                 = (int)botlocation.Y - pSize;
                         position.Height            = pSize;
                         position.X                 = (int)botlocation.X;
                         this.activePosition.X      = position.X / userframe.UserMap.FrameSize.Width;
                         this.activePosition.Width  = position.Width / userframe.UserMap.FrameSize.Width;
                         this.activePosition.Y      = position.Y / userframe.UserMap.FrameSize.Height;
                         this.activePosition.Height = position.Height / userframe.UserMap.FrameSize.Height;
                         userframe.Release();
                         return;
                     }
                 }
                 userframe.Release();
             }
         }
     }
     catch (Exception)
     {
     }
     this.activeUserId = 0;
 }
Exemplo n.º 2
0
        // ReSharper disable once ParameterHidesMember
        private void UserTrackerOnNewData(UserTracker userTracker)
        {
            if (!userTracker.IsValid)
            {
                return;
            }

            UserTrackerFrameRef frame = userTracker.ReadFrame();

            if (frame == null || !frame.IsValid)
            {
                return;
            }

            this.FillImageFromUserMap(frame.UserMap);

            using (Graphics g = Graphics.FromImage(this.image))
            {
                foreach (UserData user in frame.Users)
                {
                    if (user.CenterOfMass.Z > 0)
                    {
                        Point  p  = new Point();
                        PointF pf = userTracker.ConvertJointCoordinatesToDepth(user.CenterOfMass);
                        p.X = (int)pf.X - 5;
                        p.Y = (int)pf.Y - 5;
                        g.DrawEllipse(new Pen(Brushes.White, 5), new Rectangle(p, new Size(5, 5)));
                        g.DrawString("Center Of Mass", SystemFonts.DefaultFont, Brushes.White, p.X - 40, p.Y - 20);
                    }
                }

                g.Save();
            }

            this.Invoke(
                new MethodInvoker(
                    delegate
            {
                this.fps      = ((1000000 / (frame.Timestamp - this.lastTime)) + (this.fps * 4)) / 5;
                this.lastTime = frame.Timestamp;
                this.Text     = string.Format(
                    "Frame #{0} - Time: {1} - FPS: {2}",
                    frame.FrameIndex,
                    frame.Timestamp,
                    this.fps);
                this.pb_preview.Image = this.image.Clone(
                    new Rectangle(new Point(0, 0), this.image.Size),
                    PixelFormat.Format24bppRgb);
                frame.Release();
            }));
        }
Exemplo n.º 3
0
        public void UpdateTexture()
        {
            int                 width          = 640;
            int                 height         = 480;
            DataBox             mapSubresource = context.DeviceManager.Context.MapSubresource(TextureResource, 0, MapMode.WriteDiscard, MapFlags.None);
            VideoFrameRef       vidRef         = videoStream.ReadFrame();
            UserTrackerFrameRef usrRef         = KinectDevice.CurrentUserTrackerFrameRef;
            IntPtr              intPtr         = usrRef.UserMap.Pixels;

            byte[]      bits   = new byte[width * height * 3];
            byte[]      ubits  = new byte[width * height * 2];
            List <byte> drawed = new List <byte>();

            Marshal.Copy(vidRef.Data, bits, 0, width * height * 3);
            Marshal.Copy(intPtr, ubits, 0, width * height * 2);
            mapSubresource.Data.Seek(0, SeekOrigin.Begin);

            UserData cursorUser = KinectDevice.CurrentUserTrackerFrameRef.GetUserById(KinectDevice.UserCursor);
            var      targetSkel = cursorUser.Skeleton;

            for (int i = 0; i < width * height; i++)
            {
                short uid = BitConverter.ToInt16(ubits, i * 2);

                if (cursorUser.IsValid && uid == KinectDevice.UserCursor)
                {
                    if (targetSkel.State == Skeleton.SkeletonState.Calibrating)
                    {
                        drawed.Add(255);
                        drawed.Add(255);
                        drawed.Add(0);
                        drawed.Add(255);
                        continue;
                    }
                    else if (targetSkel.State == Skeleton.SkeletonState.Tracked)
                    {
                        drawed.Add(0);
                        drawed.Add(255);
                        drawed.Add(0);
                        drawed.Add(255);
                        continue;
                    }
                    else if (targetSkel.State == Skeleton.SkeletonState.None)
                    {
                        drawed.Add(0);
                        drawed.Add(255);
                        drawed.Add(255);
                        drawed.Add(255);
                        continue;
                    }
                }
                drawed.Add(bits[i * 3]);
                drawed.Add(bits[i * 3 + 1]);
                drawed.Add(bits[i * 3 + 2]);
                drawed.Add(255);
            }
            foreach (var trackedUser in KinectDevice.TrackedUsers)
            {
                UserData TargetUser = trackedUser.Value;
                foreach (var drawJoint in drawJoints)
                {
                    SkeletonJoint j1 = TargetUser.Skeleton.GetJoint(drawJoint.Item1);
                    SkeletonJoint j2 = TargetUser.Skeleton.GetJoint(drawJoint.Item2);
                    PointF        p1 =
                        KinectDevice.NiteUserTracker.ConvertJointCoordinatesToDepth(j1.Position);
                    PointF p2 =
                        KinectDevice.NiteUserTracker.ConvertJointCoordinatesToDepth(j2.Position);
                    byte blue = (byte)(255f * (j1.PositionConfidence + j2.PositionConfidence) / 2f);
                    DrawLine((int)p1.X, (int)p1.Y, (int)p2.X, (int)p2.Y, 2, new byte[] { (byte)(255 - blue), 0, blue, 255 }, drawed);
                }
            }

            mapSubresource.Data.WriteRange(drawed.ToArray());
            context.DeviceManager.Context.UnmapSubresource(TextureResource, 0);
        }
Exemplo n.º 4
0
        /// <summary>
        /// ITransformUpdaterのメンバーの実装
        /// </summary>
        public bool UpdateTransform()
        {
            UserTrackerFrameRef usrFrameRef = device.CurrentUserTrackerFrameRef;

            if (CurrentTrackUserId >= 0)
            {
                UserData[] usrs =
                    (from sk in usrFrameRef.Users where sk.UserId == CurrentTrackUserId select sk).ToArray();
                if (usrs.Length != 1)
                {
                    return(true);
                }
                Skeleton skeleton = usrs[0].Skeleton;
                if (skeleton.State == Skeleton.SkeletonState.Tracked)
                {
                    trackTarget = skeleton;
                    if (TrackingUser != null)
                    {
                        TrackingUser(this, usrs[0]);
                    }
                    PMXBone       head         = getBone("頭");
                    PMXBone       neck         = getBone("首");
                    PMXBone       torso        = getBone("上半身");
                    PMXBone       r_shoulder   = getBone("右腕");
                    PMXBone       r_elbow      = getBone("右ひじ");
                    PMXBone       r_hand       = getBone("右手首");
                    PMXBone       r_hip        = getBone("右足");
                    PMXBone       r_knee       = getBone("右ひざ");
                    PMXBone       r_foot       = getBone("右足首");
                    PMXBone       l_shoulder   = getBone("左腕");
                    PMXBone       l_elbow      = getBone("左ひじ");
                    PMXBone       l_hand       = getBone("左手首");
                    PMXBone       l_hip        = getBone("左足");
                    PMXBone       l_knee       = getBone("左ひざ");
                    PMXBone       l_foot       = getBone("左足首");
                    SkeletonJoint sj_head      = skeleton.GetJoint(SkeletonJoint.JointType.Head);
                    SkeletonJoint sj_neck      = skeleton.GetJoint(SkeletonJoint.JointType.Neck);
                    SkeletonJoint sj_rShoulder = skeleton.GetJoint(SkeletonJoint.JointType.RightShoulder);
                    SkeletonJoint sj_lShoulder = skeleton.GetJoint(SkeletonJoint.JointType.LeftShoulder);
                    SkeletonJoint sj_rElbow    = skeleton.GetJoint(SkeletonJoint.JointType.RightElbow);
                    SkeletonJoint sj_lElbow    = skeleton.GetJoint(SkeletonJoint.JointType.LeftElbow);
                    SkeletonJoint sj_r_hand    = skeleton.GetJoint(SkeletonJoint.JointType.RightHand);
                    SkeletonJoint sj_l_hand    = skeleton.GetJoint(SkeletonJoint.JointType.LeftHand);
                    SkeletonJoint sj_torso     = skeleton.GetJoint(SkeletonJoint.JointType.Torso);
                    SkeletonJoint sj_rHip      = skeleton.GetJoint(SkeletonJoint.JointType.RightHip);
                    SkeletonJoint sj_lHip      = skeleton.GetJoint(SkeletonJoint.JointType.LeftHip);
                    SkeletonJoint sj_rKnee     = skeleton.GetJoint(SkeletonJoint.JointType.RightKnee);
                    SkeletonJoint sj_lKnee     = skeleton.GetJoint(SkeletonJoint.JointType.LeftKnee);
                    SkeletonJoint sj_rFoot     = skeleton.GetJoint(SkeletonJoint.JointType.RightFoot);
                    SkeletonJoint sj_lFoot     = skeleton.GetJoint(SkeletonJoint.JointType.LeftFoot);
                    //腰のひねり
                    Vector3 shoulder_l2r =
                        Vector3.Normalize(
                            ToVector3(sj_rShoulder.Position) -
                            ToVector3(sj_lShoulder.Position));
                    Vector3 hip_l2r =
                        Vector3.Normalize(
                            ToVector3(sj_rHip.Position) -
                            ToVector3(sj_lHip.Position));
                    //shoulder_l2r.Normalize();hip_l2r.Normalize();
                    float angle = (float)Math.Acos(Math.Min(Vector3.Dot(shoulder_l2r, hip_l2r), 1f));
                    torso.Rotation *= Quaternion.RotationAxis(new Vector3(0, 1, 0), angle);
                    torso.UpdateGrobalPose();
                    getRotation(neck, head, skeleton, sj_neck,
                                sj_head);
                    getRotation(r_shoulder, r_elbow, skeleton,
                                sj_rShoulder, sj_rElbow);
                    getRotation(r_elbow, r_hand, skeleton,
                                sj_rElbow,
                                sj_r_hand);
                    getRotation(l_shoulder, l_elbow, skeleton,
                                sj_lShoulder, sj_lElbow);
                    getRotation(l_elbow, l_hand, skeleton,
                                sj_lElbow, sj_l_hand);
                    getRotation(torso, neck, skeleton, sj_torso, sj_neck);
                    getRotation(r_hip, r_knee, skeleton,
                                sj_rHip, sj_rKnee);
                    getRotation(r_knee, r_foot, skeleton,
                                sj_rKnee, sj_rFoot);
                    getRotation(l_hip, l_knee, skeleton,
                                sj_lHip, sj_lKnee);
                    getRotation(l_knee, l_foot, skeleton,
                                sj_lKnee, sj_lFoot);
                }
            }
            return(true);
        }
Exemplo n.º 5
0
        // ReSharper disable once ParameterHidesMember
        private void UserTrackerOnNewData(UserTracker userTracker)
        {
            if (!userTracker.IsValid)
            {
                return;
            }

            UserTrackerFrameRef frame = userTracker.ReadFrame();

            if (frame == null || !frame.IsValid)
            {
                return;
            }

            lock (this.image)
            {
                if (this.image.Width != frame.UserMap.FrameSize.Width ||
                    this.image.Height != frame.UserMap.FrameSize.Height)
                {
                    this.image = new Bitmap(
                        frame.UserMap.FrameSize.Width,
                        frame.UserMap.FrameSize.Height,
                        PixelFormat.Format24bppRgb);
                }

                using (Graphics g = Graphics.FromImage(this.image))
                {
                    g.FillRectangle(Brushes.Black, new Rectangle(new Point(0, 0), this.image.Size));
                    foreach (UserData user in frame.Users)
                    {
                        if (user.IsNew && user.IsVisible)
                        {
                            userTracker.StartSkeletonTracking(user.UserId);
                        }

                        if (user.IsVisible && user.Skeleton.State == Skeleton.SkeletonState.Tracked)
                        {
                            this.DrawLineBetweenJoints(
                                g,
                                user.Skeleton,
                                SkeletonJoint.JointType.RightHand,
                                SkeletonJoint.JointType.RightElbow);
                            this.DrawLineBetweenJoints(
                                g,
                                user.Skeleton,
                                SkeletonJoint.JointType.LeftHand,
                                SkeletonJoint.JointType.LeftElbow);

                            this.DrawLineBetweenJoints(
                                g,
                                user.Skeleton,
                                SkeletonJoint.JointType.RightElbow,
                                SkeletonJoint.JointType.RightShoulder);
                            this.DrawLineBetweenJoints(
                                g,
                                user.Skeleton,
                                SkeletonJoint.JointType.LeftElbow,
                                SkeletonJoint.JointType.LeftShoulder);

                            this.DrawLineBetweenJoints(
                                g,
                                user.Skeleton,
                                SkeletonJoint.JointType.RightFoot,
                                SkeletonJoint.JointType.RightKnee);
                            this.DrawLineBetweenJoints(
                                g,
                                user.Skeleton,
                                SkeletonJoint.JointType.LeftFoot,
                                SkeletonJoint.JointType.LeftKnee);

                            this.DrawLineBetweenJoints(
                                g,
                                user.Skeleton,
                                SkeletonJoint.JointType.RightKnee,
                                SkeletonJoint.JointType.RightHip);
                            this.DrawLineBetweenJoints(
                                g,
                                user.Skeleton,
                                SkeletonJoint.JointType.LeftKnee,
                                SkeletonJoint.JointType.LeftHip);

                            this.DrawLineBetweenJoints(
                                g,
                                user.Skeleton,
                                SkeletonJoint.JointType.RightShoulder,
                                SkeletonJoint.JointType.LeftShoulder);
                            this.DrawLineBetweenJoints(
                                g,
                                user.Skeleton,
                                SkeletonJoint.JointType.RightHip,
                                SkeletonJoint.JointType.LeftHip);

                            this.DrawLineBetweenJoints(
                                g,
                                user.Skeleton,
                                SkeletonJoint.JointType.RightShoulder,
                                SkeletonJoint.JointType.RightHip);
                            this.DrawLineBetweenJoints(
                                g,
                                user.Skeleton,
                                SkeletonJoint.JointType.LeftShoulder,
                                SkeletonJoint.JointType.LeftHip);

                            this.DrawLineBetweenJoints(
                                g,
                                user.Skeleton,
                                SkeletonJoint.JointType.Head,
                                SkeletonJoint.JointType.Neck);
                        }
                    }

                    g.Save();
                }
            }

            this.Invoke(
                new MethodInvoker(
                    delegate
            {
                this.fps      = ((1000000 / (frame.Timestamp - this.lastTime)) + (this.fps * 4)) / 5;
                this.lastTime = frame.Timestamp;
                this.Text     = string.Format(
                    "Frame #{0} - Time: {1} - FPS: {2}",
                    frame.FrameIndex,
                    frame.Timestamp,
                    this.fps);
                this.pb_preview.Image = this.image.Clone(
                    new Rectangle(new Point(0, 0), this.image.Size),
                    PixelFormat.Format24bppRgb);
                frame.Release();
            }));
        }