现在,我可以找到人的骨骼的头部,但不能跟踪眼睛的运动.
if (body.TrackingState == SkeletonTrackingState.Tracked){ Joint joint = body.Joints[JointType.head]; SkeletonPoint skeletonPoint = joint.position; // 2D coordinates in pixels System.Drawing.Point point = new System.Drawing.Point(); if (_mode == CameraMode.color) { // Skeleton-to-color mapPing colorImagePoint colorPoint = _sensor.CoordinateMapper.MapSkeletonPointTocolorPoint(skeletonPoint,colorImageFormat.RgbResolution640x480Fps30); point.X = colorPoint.X; point.Y = colorPoint.Y; //Console.Writeline(" X == " + point.X + " Y == " + point.Y); X = (int)Math.Floor(point.X + 0.5); Y = (int)Math.Floor(point.Y + 0.5); } // DRAWING... Ellipse ellipse = new Ellipse { Fill = System.windows.Media.Brushes.lightBlue,WIDth = 20,Height = 20 }; Canvas.Setleft(ellipse,point.X - ellipse.WIDth / 2); Canvas.Settop(ellipse,point.Y - ellipse.Height / 2); canvas.Children.Add(ellipse); }
这里的point.X和point.Y是骨架的头点.
解决方法 你看过FaceBasics示例项目吗?我相信你想使用FaceFrameSource / FaceFrameReader(注意:不是HDFace).您将能够将面部方向作为Quarternion(并且示例项目将其转换为俯仰/偏角/滚动).
结合头骨的三维位置从骨架,我想你应该能够创建一个近似的视线.
How-to Videos封面包括一些关于方向的信息(第5个视频,大约在18:20跳过 – 你的具体问题在21:49被问到).
编辑:
粗糙的概念证明,显示对FaceBasics示例项目进行的修改 – 添加到〜第565行,紧接在面部信息绘制之后(我还需要更改俯仰/偏航/滚动的范围,并将其默认值设置为0).这为头部创建了一个圆圈,并且看到一个近似凝视位置的黄线.
Joint headJoint = this.bodIEs[faceIndex].Joints[JointType.head];colorSpacePoint colorPoint = this.coordinateMapper.MapCameraPointTocolorSpace(headJoint.position);Point headPoint = new Point(colorPoint.X,colorPoint.Y);Point GazePoint = new Point(headPoint.X - Math.Sin((double)yaw * 0.0175) * 600,headPoint.Y - Math.Sin((double)pitch * 0.0175) * 600);drawingContext.Drawline(new Pen(System.windows.Media.Brushes.Yellow,5),headPoint,GazePoint);drawingContext.DrawEllipse(System.windows.Media.Brushes.lightBlue,null,70,70);
编辑2:刚刚看到您的新评论,表示您使用SDK v1.8 – 我的答案是从v2.0开始,我不能说旧的SDK /传感器的不同之处.
总结以上是内存溢出为你收集整理的c# – 如何使用kinect检测人的视线?全部内容,希望文章能够帮你解决c# – 如何使用kinect检测人的视线?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)