Fixed tinyface annotator

parent 3e174653
Pipeline #51390 failed with stage
in 33 minutes and 38 seconds
......@@ -7,7 +7,7 @@ class BobIpTinyface(Base):
def __init__(self, **kwargs):
super(BobIpTinyface, self).__init__(**kwargs)
self.tinyface = bob.ip.facedetect.tinyface.TinyFacesDetector(prob_thresh=0.5)
self.detector = bob.ip.facedetect.tinyface.TinyFacesDetector(prob_thresh=0.5)
def annotate(self, image, **kwargs):
"""Annotates an image using tinyface
......@@ -25,6 +25,9 @@ class BobIpTinyface(Base):
Annotations with (topleft, bottomright) keys (or None).
"""
# return the annotations for the first/largest face
annotations = self.detector.detect(image)
if annotations is not None:
return annotations[0]
else:
......
......@@ -4,34 +4,49 @@ import bob.io.image
from bob.bio.face.annotator import (
BobIpFacedetect,
BobIpFlandmark,
min_face_size_validator)
min_face_size_validator,
)
from bob.bio.base.annotator import FailSafe
from bob.bio.face.annotator import BobIpMTCNN
from bob.bio.face.annotator import BobIpTinyface
import numpy
from bob.bio.base.test.utils import is_library_available
face_image = bob.io.base.load(
bob.io.base.test_utils.datafile(
'testimage.jpg', 'bob.ip.facedetect'
)
bob.io.base.test_utils.datafile("testimage.jpg", "bob.ip.facedetect")
)
def _assert_mtcnn(annot):
"""
Verifies that the MTCNN annotations are correct for ``faceimage.jpg``
"""
assert type(annot) is dict, annot
assert [int(x) for x in annot['topleft']] == [68, 76], annot
assert [int(x) for x in annot['bottomright']] == [344, 274], annot
assert [int(x) for x in annot['reye']] == [180, 129], annot
assert [int(x) for x in annot['leye']] == [175, 220], annot
assert numpy.allclose(annot['quality'], 0.9998975), annot
assert [int(x) for x in annot["topleft"]] == [68, 76], annot
assert [int(x) for x in annot["bottomright"]] == [344, 274], annot
assert [int(x) for x in annot["reye"]] == [180, 129], annot
assert [int(x) for x in annot["leye"]] == [175, 220], annot
assert numpy.allclose(annot["quality"], 0.9998975), annot
def _assert_tinyface(annot):
"""
Verifies that the Tinyface annotations are correct for ``faceimage.jpg``
"""
assert type(annot) is dict, annot
assert [int(x) for x in annot["topleft"]] == [59, 57], annot
assert [int(x) for x in annot["bottomright"]] == [338, 284], annot
assert [int(x) for x in annot["reye"]] == [162, 125], annot
assert [int(x) for x in annot["leye"]] == [162, 216], annot
def _assert_bob_ip_facedetect(annot):
assert annot['topleft'] == (110, 82), annot
assert annot['bottomright'] == (334, 268), annot
assert numpy.allclose(annot['quality'], 39.209601948013685), annot
assert annot["topleft"] == (110, 82), annot
assert annot["bottomright"] == (334, 268), annot
assert numpy.allclose(annot["quality"], 39.209601948013685), annot
@is_library_available("tensorflow")
def test_mtcnn_annotator():
......@@ -43,57 +58,71 @@ def test_mtcnn_annotator():
annot_batch = mtcnn_annotator(batch)
_assert_mtcnn(annot_batch[0])
@is_library_available("mxnet")
def test_tinyface_annotator():
"""
The Tiny face annotator should return the correct annotations.
"""
tinyface_annotator = BobIpTinyface()
batch = [face_image]
annot_batch = tinyface_annotator(batch)
_assert_tinyface(annot_batch[0])
def test_bob_ip_facedetect():
batch = [face_image]
annot = BobIpFacedetect()(batch)
_assert_bob_ip_facedetect(annot[0])
def test_bob_ip_facedetect_eyes():
batch = [face_image]
annot = BobIpFacedetect(eye_estimate=True)(batch)
_assert_bob_ip_facedetect(annot[0])
assert [int(x) for x in annot[0]['reye']] == [175, 128], annot
assert [int(x) for x in annot[0]['leye']] == [175, 221], annot
assert [int(x) for x in annot[0]["reye"]] == [175, 128], annot
assert [int(x) for x in annot[0]["leye"]] == [175, 221], annot
def test_fail_safe():
annotator = FailSafe(
[BobIpFacedetect(eye_estimate=True)],
required_keys=('reye', 'leye'),
[BobIpFacedetect(eye_estimate=True)], required_keys=("reye", "leye"),
)
batch = [face_image]
annot = annotator(batch)
_assert_bob_ip_facedetect(annot[0])
assert [int(x) for x in annot[0]['reye']] == [175, 128], annot
assert [int(x) for x in annot[0]['leye']] == [175, 221], annot
assert [int(x) for x in annot[0]["reye"]] == [175, 128], annot
assert [int(x) for x in annot[0]["leye"]] == [175, 221], annot
def test_bob_ip_flandmark():
annotator = FailSafe(
[BobIpFacedetect(), BobIpFlandmark()],
required_keys=('reye', 'leye'),
[BobIpFacedetect(), BobIpFlandmark()], required_keys=("reye", "leye"),
)
batch = [face_image]
annot = annotator(batch)
print(annot)
_assert_bob_ip_facedetect(annot[0])
assert [int(x) for x in annot[0]['reye']] == [183, 127], annot
assert [int(x) for x in annot[0]['leye']] == [174, 223], annot
assert [int(x) for x in annot[0]["reye"]] == [183, 127], annot
assert [int(x) for x in annot[0]["leye"]] == [174, 223], annot
def test_min_face_size_validator():
valid = {
'topleft': (0, 0),
'bottomright': (32, 32),
"topleft": (0, 0),
"bottomright": (32, 32),
}
assert min_face_size_validator(valid)
not_valid = {
'topleft': (0, 0),
'bottomright': (28, 33),
"topleft": (0, 0),
"bottomright": (28, 33),
}
assert not min_face_size_validator(not_valid)
not_valid = {
'topleft': (0, 0),
'bottomright': (33, 28),
"topleft": (0, 0),
"bottomright": (33, 28),
}
assert not min_face_size_validator(not_valid)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment