From 5261d6916bfb5304a8cabb9ce22608145d57957e Mon Sep 17 00:00:00 2001 From: Tadas Baltrusaitis Date: Mon, 15 Jan 2018 08:56:27 +0000 Subject: [PATCH] More work on overlays with multiple faces --- gui/OpenFaceOffline/MainWindow.xaml.cs | 23 +++++++++++-------- .../UI_items/OverlayImage.xaml.cs | 18 +++++++++------ 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/gui/OpenFaceOffline/MainWindow.xaml.cs b/gui/OpenFaceOffline/MainWindow.xaml.cs index d9b1a70..0597924 100644 --- a/gui/OpenFaceOffline/MainWindow.xaml.cs +++ b/gui/OpenFaceOffline/MainWindow.xaml.cs @@ -514,14 +514,6 @@ namespace OpenFaceOffline } else { - if(new_image) - { - video.OverlayLines = lines; - } - else - { - video.OverlayLines.AddRange(lines.GetRange(0, lines.Count)); - } List landmark_points = new List(); foreach (var p in landmarks) @@ -536,8 +528,19 @@ namespace OpenFaceOffline } - video.OverlayPoints = landmark_points; - video.OverlayEyePoints = eye_landmark_points; + if (new_image) + { + video.OverlayLines = lines; + video.OverlayPoints = landmark_points; + video.OverlayEyePoints = eye_landmark_points; + } + else + { + // In case of multiple faces just add them to the existing drawing list + video.OverlayLines.AddRange(lines.GetRange(0, lines.Count)); + video.OverlayPoints.AddRange(landmark_points.GetRange(0, landmark_points.Count)); + video.OverlayEyePoints.AddRange(eye_landmark_points.GetRange(0, eye_landmark_points.Count)); + } video.GazeLines = gaze_lines; } } diff --git a/gui/OpenFaceOffline/UI_items/OverlayImage.xaml.cs b/gui/OpenFaceOffline/UI_items/OverlayImage.xaml.cs index f4733e5..64c7a33 100644 --- a/gui/OpenFaceOffline/UI_items/OverlayImage.xaml.cs +++ b/gui/OpenFaceOffline/UI_items/OverlayImage.xaml.cs @@ -140,19 +140,23 @@ namespace OpenFaceOffline var q1 = new Point(ActualWidth * OverlayEyePoints[id].X / width, ActualHeight * OverlayEyePoints[id].Y / height); + // The the eye points can be defined for multiple faces, turn id's to be relevant to one face + int id_internal = id % 56; + int multiplier = id / 56; + int next_point = id + 1; - if (id == 7) next_point = 0; - if (id == 19) next_point = 8; - if (id == 27) next_point = 20; + if (id_internal == 7) next_point = 0 * multiplier; + if (id_internal == 19) next_point = 8 * multiplier; + if (id_internal == 27) next_point = 20 * multiplier; - if (id == 35) next_point = 28; - if (id == 47) next_point = 36; - if (id == 55) next_point = 48; + if (id_internal == 35) next_point = 28 * multiplier; + if (id_internal == 47) next_point = 36 * multiplier; + if (id_internal == 55) next_point = 48 * multiplier; var q2 = new Point(ActualWidth * OverlayEyePoints[next_point].X / width, ActualHeight * OverlayEyePoints[next_point].Y / height); - if (id < 28 && (id < 8 || id > 19) || (id>=28 &&(id-28<8 || id-28 >19))) + if (id_internal < 28 && (id_internal < 8 || id_internal > 19) || (id_internal >= 28 &&(id_internal - 28<8 || id_internal - 28 >19))) { dc.DrawLine(new Pen(new SolidColorBrush(Color.FromArgb(200, (byte)(240), (byte)(30), (byte)100)), 1.5 * scaling_p), q1, q2); }