From e4be7bfe45b8c61f23d926d32feb3f22101942bb Mon Sep 17 00:00:00 2001
From: Olegs NIKISINS <onikisins@italix03.idiap.ch>
Date: Fri, 18 Jan 2019 19:03:08 +0100
Subject: [PATCH] Removed duplicated functions from quality_assessment_config,
 now imported from quality_assessment_config_128

---
 .../celeb_a/quality_assessment_config.py      | 108 +-----------------
 .../celeb_a/quality_assessment_config_128.py  |   4 +-
 2 files changed, 3 insertions(+), 109 deletions(-)

diff --git a/bob/pad/face/config/quality_assessment/celeb_a/quality_assessment_config.py b/bob/pad/face/config/quality_assessment/celeb_a/quality_assessment_config.py
index 70420d5e..cdf772f2 100644
--- a/bob/pad/face/config/quality_assessment/celeb_a/quality_assessment_config.py
+++ b/bob/pad/face/config/quality_assessment/celeb_a/quality_assessment_config.py
@@ -33,57 +33,7 @@ from bob.bio.video.preprocessor import Wrapper
 
 import numpy as np
 
-# =============================================================================
-def detect_eyes_in_bw_image(image):
-    """
-    Detect eyes in the image using OpenCV.
-
-    **Parameters:**
-
-    ``image`` : 2D :py:class:`numpy.ndarray`
-        A BW image to detect the eyes in.
-
-    **Returns:**
-
-    ``eyes`` : 2D :py:class:`numpy.ndarray`
-        An array containing coordinates of the bounding boxes of detected eyes.
-        The dimensionality of the array:
-        ``num_of_detected_eyes x coordinates_of_bbx``
-    """
-
-    eye_model = pkg_resources.resource_filename('bob.pad.face.config',
-                                                'quality_assessment/models/eye_detector.xml')
-
-    eye_cascade = cv2.CascadeClassifier(eye_model)
-
-    eyes = eye_cascade.detectMultiScale(image)
-
-    return eyes
-
-
-# =============================================================================
-def load_datafile(file_name):
-    """
-    Load data from file given filename. Here the data file is an hdf5 file
-    containing a framecontainer with one frame. The data in the frame is
-    a BW image of the facial region.
-
-    **Parameters:**
-
-    ``file_name`` : str
-        Absolute name of the file.
-
-    **Returns:**
-
-    ``data`` : 2D :py:class:`numpy.ndarray`
-        Data array containing the image of the facial region.
-    """
-
-    frame_container = Wrapper().read_data(file_name)
-
-    data = frame_container[0][1]
-
-    return data
+from bob.pad.face.config.quality_assessment.celeb_a.quality_assessment_config_128 import detect_eyes_in_bw_image, load_datafile, assess_quality
 
 
 # =============================================================================
@@ -98,59 +48,3 @@ assess_quality_kwargs = {}
 assess_quality_kwargs["eyes_expected"] = eyes_expected
 assess_quality_kwargs["threshold"] = 7
 
-
-# =============================================================================
-def assess_quality(data, eyes_expected, threshold):
-    """
-    Assess the quality of the data sample, which in this case is an image of
-    the face of the size 64x64 pixels. The quality assessment is based on the
-    eye detection. If two eyes are detected, and they are located in the
-    pre-defined positions, then quality is good, otherwise the quality is low.
-
-    **Parameters:**
-
-    ``data`` : 2D :py:class:`numpy.ndarray`
-        Data array containing the image of the facial region. The size of the
-        image is 64x64.
-
-    ``eyes_expected`` : list
-        A list containing expected coordinates of the eyes. The format is
-        as follows:
-        [ [left_y, left_x], [right_y, right_x] ]
-
-    ``threshold`` : int
-        A maximum allowed distance between expected and detected centers of
-        the eyes.
-
-    **Returns:**
-
-    ``quality_flag`` : bool
-        ``True`` for good quality data, ``False`` otherwise.
-    """
-
-    quality_flag = False
-
-    eyes = detect_eyes_in_bw_image(data)
-
-    if isinstance(eyes, np.ndarray):
-
-        if eyes.shape[0] == 2: # only consider the images with two eyes detected
-
-            # coordinates of detected centers of the eyes: [ [left_y, left_x], [right_y, right_x] ]:
-            eyes_detected = []
-            for (ex,ey,ew,eh) in eyes:
-                eyes_detected.append( [ey + eh/2., ex + ew/2.] )
-
-            dists = [] # dits between detected and expected:
-            for a, b in zip(eyes_detected, eyes_expected):
-                dists.append( np.linalg.norm(np.array(a)-np.array(b)) )
-
-            max_dist = np.max(dists)
-
-            if max_dist < threshold:
-
-                quality_flag = True
-
-    return quality_flag
-
-
diff --git a/bob/pad/face/config/quality_assessment/celeb_a/quality_assessment_config_128.py b/bob/pad/face/config/quality_assessment/celeb_a/quality_assessment_config_128.py
index d7b80a7f..3eb4e087 100644
--- a/bob/pad/face/config/quality_assessment/celeb_a/quality_assessment_config_128.py
+++ b/bob/pad/face/config/quality_assessment/celeb_a/quality_assessment_config_128.py
@@ -109,7 +109,7 @@ assess_quality_kwargs["threshold"] = 10
 def assess_quality(data, eyes_expected, threshold):
     """
     Assess the quality of the data sample, which in this case is an image of
-    the face of the size 128x128 pixels. The quality assessment is based on the
+    the face of the size (face_size x face_size) pixels. The quality assessment is based on the
     eye detection. If two eyes are detected, and they are located in the
     pre-defined positions, then quality is good, otherwise the quality is low.
 
@@ -117,7 +117,7 @@ def assess_quality(data, eyes_expected, threshold):
 
     ``data`` : 2D :py:class:`numpy.ndarray`
         Data array containing the image of the facial region. The size of the
-        image is 128x128.
+        image is (face_size x face_size).
 
     ``eyes_expected`` : list
         A list containing expected coordinates of the eyes. The format is
-- 
GitLab