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; }
// 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(); })); }
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); }
/// <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); }
// 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(); })); }