From a21eb531547aacb092682d9f66751c578419fe53 Mon Sep 17 00:00:00 2001 From: Guillaume HEUSCH <guillaume.heusch@idiap.ch> Date: Wed, 11 Jul 2018 10:12:04 +0200 Subject: [PATCH] [preprocessor] fixed the exception catching when landmarks are not detected --- .../face/preprocessor/LiPulseExtraction.py | 42 ++++++++++++------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/bob/pad/face/preprocessor/LiPulseExtraction.py b/bob/pad/face/preprocessor/LiPulseExtraction.py index 35a88d31..cd65389c 100644 --- a/bob/pad/face/preprocessor/LiPulseExtraction.py +++ b/bob/pad/face/preprocessor/LiPulseExtraction.py @@ -117,31 +117,45 @@ class LiPulseExtraction(Preprocessor): pyplot.show() # detect landmarks - try: - ldms = detector(frame) - except TypeError: - logger.warning("Exception caught -> problems with landmarks") - # looks like one video from replay mobile is upside down ! + ldms = detector(frame) + + if ldms is None: + logger.warning("Landmarks not detected ...") + + # looks like some videos from replay mobile are upside down ! rotated_shape = bob.ip.base.rotated_output_shape(frame, 180) frame_rotated = numpy.ndarray(rotated_shape, dtype=numpy.float64) from bob.ip.base import rotate bob.ip.base.rotate(frame, frame_rotated, 180) frame_rotated = frame_rotated.astype(numpy.uint8) - logger.warning("Rotating again ...") - try: - ldms = detector(frame_rotated) - except TypeError: + logger.warning("Rotating 180 degrees ...") + + # check the rotated frame + if self.debug: + from matplotlib import pyplot + pyplot.imshow(numpy.rollaxis(numpy.rollaxis(frame_rotated, 2),2)) + pyplot.show() + + ldms = detector(frame_rotated) + # if landmarks are still not detected, do nothing + if ldms is None: ldms = previous_ldms # so do nothing ... logger.warning("No mask detected in frame {}".format(i)) face_color[i] = [0, 0, 0] continue + frame = frame_rotated - - # landmarks have not been detected: use the one from previous frame + + # if landmarks are still not detected, use the one from previous frame (if any) if ldms is None: - ldms = previous_ldms - logger.warning("Frame {}: no landmarks detected, using the ones from previous frame".format(i)) + if previous_ldms is None: + logger.warning("No mask detected in frame {}".format(i)) + face_color[i] = [0, 0, 0] + continue + else: + ldms = previous_ldms + logger.warning("Frame {}: no landmarks detected, using the ones from previous frame".format(i)) if self.debug: from matplotlib import pyplot @@ -153,9 +167,7 @@ class LiPulseExtraction(Preprocessor): ldms = numpy.array(ldms) mask_points, mask = kp66_to_mask(frame, ldms, self.indent, self.debug) - face_color[i] = compute_average_colors_mask(frame, mask, self.debug) - logger.debug("Face color in frame {} = {}".format(i, face_color[i])) previous_ldms = ldms counter += 1 -- GitLab