diff --git a/bob/bio/face/database/ijbc.py b/bob/bio/face/database/ijbc.py index b63fc7c79056b4a8aa4ee1518cb541e2421d7521..0efd9306d3d82eb0fd59a77eebb61ff4c5cdde40 100644 --- a/bob/bio/face/database/ijbc.py +++ b/bob/bio/face/database/ijbc.py @@ -20,6 +20,29 @@ def _make_sample_from_template_row(row, image_directory): reference_id=str(row["TEMPLATE_ID"]), subject_id=str(row["SUBJECT_ID"]), key=os.path.splitext(row["FILENAME"])[0] + "-" + hashstr, + gender=row["GENDER"], + indoor_outdoor=row["INDOOR_OUTDOOR"], + skintone=row["SKINTONE"], + yaw=row["YAW"], + rool=row["ROLL"], + occ1=row["OCC1"], + occ2=row["OCC2"], + occ3=row["OCC3"], + occ4=row["OCC4"], + occ5=row["OCC5"], + occ6=row["OCC6"], + occ7=row["OCC7"], + occ8=row["OCC8"], + occ9=row["OCC9"], + occ10=row["OCC10"], + occ11=row["OCC11"], + occ12=row["OCC12"], + occ13=row["OCC13"], + occ14=row["OCC14"], + occ15=row["OCC15"], + occ16=row["OCC16"], + occ17=row["OCC17"], + occ18=row["OCC18"], annotations={ "topleft": (float(row["FACE_Y"]), float(row["FACE_X"])), "bottomright": ( @@ -140,6 +163,40 @@ class IJBCDatabase(Database): os.path.join(self.protocol_directory, "ijbc_11_G1_G2_matches.csv"), names=["REFERENCE_TEMPLATE_ID", "PROBE_TEMPLATE_ID"], ).astype("str") + + self.metadata = pd.read_csv( + os.path.join(self.protocol_directory, "ijbc_metadata.csv"), + usecols=[ + "SUBJECT_ID", + "FILENAME", + "SIGHTING_ID", + "FACIAL_HAIR", + "AGE", + "INDOOR_OUTDOOR", + "SKINTONE", + "GENDER", + "YAW", + "ROLL", + ] + + [f"OCC{i}" for i in range(1, 19)], + ) + + # LEFT JOIN WITH METADATA + self.probe_templates = pd.merge( + self.probe_templates, + self.metadata, + on=["SUBJECT_ID", "FILENAME", "SIGHTING_ID"], + how="left", + ) + + # LEFT JOIN WITH METADATA + self.reference_templates = pd.merge( + self.reference_templates, + self.metadata, + on=["SUBJECT_ID", "FILENAME", "SIGHTING_ID"], + how="left", + ) + else: raise ValueError( f"Protocol `{protocol}` not supported. We do accept merge requests :-)"