2015-05-28 9 views
10

Obecnie pracuję nad projektem wykorzystującym Kinect, który wymaga, abym wiedział, gdzie dana osoba patrzy w tym czasie, dla którego zorientowałem się, że muszę znaleźć linię wzroku tej osoby.Jak wykryć linię wzroku osoby korzystającej z kinect?

W tej chwili mogę znaleźć punkt głowy szkieletu osoby, ale nie mogę śledzić ruchu gałek ocznych.

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

Tutaj point.X i point.Y są głównymi punktami szkieletu.

+0

Nie odtworzyłem sondy Kinect na zawsze, ale czy nie jest możliwe wykrycie obrotu głowy? –

+0

@JohnOdom jak myślisz, aby użyć rotacji głowy w moim problemie ... Nie mogę uzyskać twojego pomysłu .. chociaż mogę wymyślić zmiany w pozycji głowy przy użyciu współrzędnych szkieletu –

+0

Myślałem o tym, czy jesteś w stanie śledzić rotacji głowy (0 stopni w obliczu kinetycznym) można określić "linię widzenia", sprawdzając, ile się obróciło. Przykład: jeśli głowica obróciła się o +45 stopni na zboczu (oś Z w górę/dół), użytkownik patrzy w lewo. To może brzmieć jak przesada, ale to wszystko, co mogę zaoferować, nie zaglądając do kinect SDK. –

Odpowiedz

1

Czy obejrzałeś przykładowy projekt FaceBasics?

Wierzę, że chcesz użyć FaceFrameSource/FaceFrameReader (uwaga: nie HDFace). Możesz uzyskać orientację twarzy jako Quarternion (a przykładowy projekt tłumaczy to na Pitch/Yaw/Roll).

Łącząc to z lokalizacją 3D głowy ze szkieletu, myślę, że powinieneś być w stanie stworzyć przybliżoną linię widzenia.

Osłona twarzy zawierająca informacje na temat orientacji (5. wideo, pomiń około 18:20 - twoje pytanie zostanie zadane o 21:49).

EDYTOWANIE: Szorstki dowód koncepcji pokazujący modyfikacje wykonane w przykładowym projekcie FaceBasics - dodano do ~ linii 565, zaraz po narysowaniu informacji o twarzy (potrzebowałem również zmienić zakres pitch/yaw/roll zdefiniowany kilka linii powyżej i ustaw ich domyślne wartości na 0). Tworzy to okrąg na głowę i żółtą linię patrząc na przybliżoną lokalizację spojrzenia.

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, HeadPoint, 70, 70); 

EDIT 2: prostu zobaczyłem Twój nowy komentarz mówiąc, że używasz SDK v1.8 - moja odpowiedź będzie wyłączony z v2.0, a ja nie mogę mówić za jak będzie inaczej z starszy SDK/czujnik.

+0

Tak Widziałem te filmy, a modyfikowanie kodu twarzy dla linii wzroku wydaje mi się bardzo trudnym zadaniem, ponieważ zawierało różne moduły, które były od siebie wzajemnie zależne ... dzięki –

+0

Myślę, że będziesz mieć bardzo trudne, jeśli chcesz śledzić orientację twarzy, ale bez korzystania z FaceFrameSource. –

+0

właśnie dostałem kinect v2 i adapter ... będą wdrażać twoje sugestie teraz ... dadzą znać o dalszych aktualizacjach –

Powiązane problemy