Skip to content
Snippets Groups Projects
Commit fd3edbd3 authored by Tiago de Freitas Pereira's avatar Tiago de Freitas Pereira
Browse files

Ported MOBIO as CSVDatabase

parent 10ca24c0
No related branches found
No related tags found
1 merge request!91Porting databases to the CSV interface
Pipeline #46692 passed
#!/usr/bin/env python
from bob.bio.face.database import MobioBioDatabase
from bob.bio.base.pipelines.vanilla_biometrics import DatabaseConnector
from bob.extension import rc
database = DatabaseConnector(
MobioBioDatabase(
original_directory=rc["bob.db.mobio.directory"],
annotation_directory=rc["bob.db.mobio.annotation_directory"],
original_extension=".png",
protocol="mobile0-male",
)
)
database.allow_scoring_with_all_biometric_references = True
mobio_image_directory = rc["bob.db.mobio.directory"]
mobio_annotation_directory = rc["bob.db.mobio.annotation_directory"]
allow_scoring_with_all_biometric_references = True
annotation_type = "eyes-center"
fixed_positions = None
mobio_image = DatabaseConnector(
MobioBioDatabase(
original_directory=mobio_image_directory,
original_extension=".png",
annotation_directory=mobio_annotation_directory,
annotation_type="eyecenter",
protocol="male",
models_depend_on_protocol=True,
),
allow_scoring_with_all_biometric_references=allow_scoring_with_all_biometric_references,
annotation_type=annotation_type,
fixed_positions=fixed_positions,
)
mobio_male = DatabaseConnector(
MobioBioDatabase(
original_directory=mobio_image_directory,
original_extension=".png",
annotation_directory=mobio_annotation_directory,
annotation_type="eyecenter",
protocol="male",
models_depend_on_protocol=True,
all_files_options={"gender": "male"},
extractor_training_options={"gender": "male"},
projector_training_options={"gender": "male"},
enroller_training_options={"gender": "male"},
z_probe_options={"gender": "male"},
),
allow_scoring_with_all_biometric_references=allow_scoring_with_all_biometric_references,
annotation_type=annotation_type,
fixed_positions=fixed_positions,
)
mobio_female = DatabaseConnector(
MobioBioDatabase(
original_directory=mobio_image_directory,
original_extension=".png",
annotation_directory=mobio_annotation_directory,
annotation_type="eyecenter",
protocol="female",
models_depend_on_protocol=True,
all_files_options={"gender": "female"},
extractor_training_options={"gender": "female"},
projector_training_options={"gender": "female"},
enroller_training_options={"gender": "female"},
z_probe_options={"gender": "female"},
),
allow_scoring_with_all_biometric_references=allow_scoring_with_all_biometric_references,
annotation_type=annotation_type,
fixed_positions=fixed_positions,
)
#!/usr/bin/env python #!/usr/bin/env python
from bob.bio.face.database import MobioBioDatabase from bob.bio.face.database import MobioDatabase
from bob.bio.base.pipelines.vanilla_biometrics import DatabaseConnector
from bob.extension import rc
database = DatabaseConnector(
MobioBioDatabase(
original_directory=rc["bob.db.mobio.directory"],
annotation_directory=rc["bob.db.mobio.annotation_directory"],
original_extension=".png",
protocol="mobile0-male-female",
),
annotation_type = "eyes-center",
fixed_positions = None
)
database = MobioDatabase(protocol="mobile0-male-female")
#!/usr/bin/env python #!/usr/bin/env python
from bob.bio.face.database import MobioBioDatabase from bob.bio.face.database import MobioDatabase
from bob.bio.base.pipelines.vanilla_biometrics import DatabaseConnector
from bob.extension import rc
database = DatabaseConnector(
MobioBioDatabase(
original_directory=rc["bob.db.mobio.directory"],
annotation_directory=rc["bob.db.mobio.annotation_directory"],
original_extension=".png",
protocol="mobile0-male",
),
annotation_type = "eyes-center",
fixed_positions = None
)
database = MobioDatabase(protocol="mobile0-male")
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# vim: set fileencoding=utf-8 : # vim: set fileencoding=utf-8 :
from .database import FaceBioFile from .database import FaceBioFile
from .mobio import MobioBioDatabase from .mobio import MobioDatabase
from .replay import ReplayBioDatabase from .replay import ReplayBioDatabase
from .atnt import AtntBioDatabase from .atnt import AtntBioDatabase
from .gbu import GBUBioDatabase from .gbu import GBUBioDatabase
...@@ -35,7 +35,7 @@ def __appropriate__(*args): ...@@ -35,7 +35,7 @@ def __appropriate__(*args):
__appropriate__( __appropriate__(
FaceBioFile, FaceBioFile,
MobioBioDatabase, MobioDatabase,
ReplayBioDatabase, ReplayBioDatabase,
AtntBioDatabase, AtntBioDatabase,
GBUBioDatabase, GBUBioDatabase,
......
#!/usr/bin/env python #!/usr/bin/env python
# vim: set fileencoding=utf-8 : # vim: set fileencoding=utf-8 :
# Amir Mohammadi <amir.mohammadi@idiap.ch> # Tiago de Freitas Pereira <tiago.pereira@idiap.ch>
# Wed 13 Jul 16:43:22 CEST 2016
""" """
MOBIO database implementation of bob.bio.base.database.ZTBioDatabase interface. MOBIO database implementation
It is an extension of an SQL-based database interface, which directly talks to Mobio database, for
verification experiments (good to use in bob.bio.base framework).
""" """
from bob.bio.base.database import (
CSVDataset,
CSVDatasetZTNorm,
)
from bob.pipelines.datasets import CSVToSampleLoader
from bob.bio.face.database.sample_loaders import EyesAnnotations
from bob.extension import rc
from bob.extension.download import get_file
import bob.io.base
from sklearn.pipeline import make_pipeline
from .database import FaceBioFile
from bob.bio.base.database import ZTBioDatabase
class MobioDatabase(CSVDatasetZTNorm):
class MobioBioFile(FaceBioFile):
"""FaceBioFile implementation of the Mobio Database"""
def __init__(self, f):
super(MobioBioFile, self).__init__(client_id=f.client_id, path=f.path, file_id=f.id)
self._f = f
class MobioBioDatabase(ZTBioDatabase):
"""
MOBIO database implementation of bob.bio.base.database.ZTBioDatabase interface.
It is an extension of an SQL-based database interface, which directly talks to Mobio database, for
verification experiments (good to use in bob.bio.base framework).
""" """
The MOBIO dataset is a video database containing bimodal data (face/speaker).
It is composed by 152 people (split in the two genders male and female), mostly Europeans, split in 5 sessions (few weeks time lapse between sessions).
The database was recorded using two types of mobile devices: mobile phones (NOKIA N93i) and laptop
computers(standard 2008 MacBook).
For face recognition images are used instead of videos.
One image was extracted from each video by choosing the video frame after 10 seconds.
The eye positions were manually labelled and distributed with the database.
For more information check:
.. code-block:: latex
@article{McCool_IET_BMT_2013,
title = {Session variability modelling for face authentication},
author = {McCool, Chris and Wallace, Roy and McLaren, Mitchell and El Shafey, Laurent and Marcel, S{\'{e}}bastien},
month = sep,
journal = {IET Biometrics},
volume = {2},
number = {3},
year = {2013},
pages = {117-129},
issn = {2047-4938},
doi = {10.1049/iet-bmt.2012.0059},
}
def __init__( """
self,
original_directory=None,
original_extension=None,
annotation_directory=None,
annotation_extension='.pos',
**kwargs
):
from bob.db.mobio.query import Database as LowLevelDatabase
self._db = LowLevelDatabase(original_directory, original_extension,
annotation_directory, annotation_extension)
# call base class constructors to open a session to the database
super(MobioBioDatabase, self).__init__(
name='mobio',
original_directory=original_directory,
original_extension=original_extension,
annotation_directory=annotation_directory,
annotation_extension=annotation_extension,
**kwargs)
@property
def original_directory(self):
return self._db.original_directory
@original_directory.setter
def original_directory(self, value):
self._db.original_directory = value
@property
def annotation_directory(self):
return self._db.annotation_directory
@annotation_directory.setter
def annotation_directory(self, value):
self._db.annotation_directory = value
def model_ids_with_protocol(self, groups=None, protocol=None, gender=None):
return self._db.model_ids(groups=groups, protocol=protocol, gender=gender)
def tmodel_ids_with_protocol(self, protocol=None, groups=None, **kwargs):
return self._db.tmodel_ids(protocol=protocol, groups=groups, **kwargs)
def objects(self, groups=None, protocol=None, purposes=None, model_ids=None, **kwargs):
retval = self._db.objects(groups=groups, protocol=protocol, purposes=purposes, model_ids=model_ids, **kwargs)
return [MobioBioFile(f) for f in retval]
def tobjects(self, groups=None, protocol=None, model_ids=None, **kwargs):
retval = self._db.tobjects(groups=groups, protocol=protocol, model_ids=model_ids, **kwargs)
return [MobioBioFile(f) for f in retval]
def zobjects(self, groups=None, protocol=None, **kwargs):
retval = self._db.zobjects(groups=groups, protocol=protocol, **kwargs)
return [MobioBioFile(f) for f in retval]
def annotations(self, myfile):
return self._db.annotations(myfile._f)
def groups(self, protocol=None, **kwargs):
return self._db.groups(protocol=protocol)
def __init__(self, protocol):
# Downloading model if not exists
urls = [
"https://www.idiap.ch/software/bob/databases/latest/mobio.tar.gz",
"http://www.idiap.ch/software/bob/databases/latest/mobio.tar.gz",
]
filename = get_file("mobio.tar.gz", urls)
self.annotation_type = "eyes-center"
self.fixed_positions = None
database = CSVDataset(
filename,
protocol,
csv_to_sample_loader=make_pipeline(
CSVToSampleLoader(
data_loader=bob.io.base.load,
dataset_original_directory=rc["bob.db.mobio.directory"]
if rc["bob.db.mobio.directory"]
else "",
extension=".png",
),
EyesAnnotations(),
),
)
super().__init__(database)
# def zprobes(self, proportion=0.20):
# return super().zprobes(proportion=proportion)
@staticmethod
def protocols():
# TODO: Until we have (if we have) a function that dumps the protocols, let's use this one.
return [
"laptop1-female",
"laptop_mobile1-female",
"mobile0-female",
"mobile0-male-female",
"mobile1-male",
"laptop1-male",
"laptop_mobile1-male",
"mobile0-male",
"mobile1-female",
]
...@@ -156,39 +156,34 @@ def test_lfw(): ...@@ -156,39 +156,34 @@ def test_lfw():
) )
@db_available("mobio")
def test_mobio(): def test_mobio():
database = bob.bio.base.load_resource( from bob.bio.face.database import MobioDatabase
"mobio-image", "database", preferred_package="bob.bio.face"
)
try:
check_database_zt(database, models_depend=True)
check_database_zt(database, protocol="female", models_depend=True)
check_database_zt(
bob.bio.base.load_resource(
"mobio-male", "database", preferred_package="bob.bio.face"
),
models_depend=True,
)
check_database_zt(
bob.bio.base.load_resource(
"mobio-female", "database", preferred_package="bob.bio.face"
),
models_depend=True,
)
except IOError as e:
raise SkipTest(
"The database could not be queried; probably the db.sql3 file is missing. Here is the error: '%s'"
% e
)
try: protocols = MobioDatabase.protocols()
_check_annotations(database, limit_files=1000) for p in protocols:
except IOError as e: database = MobioDatabase(protocol=p)
raise SkipTest( assert len(database.background_model_samples()) > 0
"The annotations could not be queried; probably the annotation files are missing. Here is the error: '%s'" assert len(database.treferences()) > 0
% e assert len(database.zprobes()) > 0
)
assert len(database.references(group="dev")) > 0
assert len(database.probes(group="dev")) > 0
assert len(database.references(group="eval")) > 0
assert len(database.probes(group="eval")) > 0
# Sanity check on mobio-male
database = MobioDatabase(protocol="mobile0-male")
assert len(database.treferences()) == 16
assert len(database.zprobes()) == 1920
assert len(database.background_model_samples()) == 9600
assert len(database.references()) == 24
assert len(database.probes()) == 2520
assert len(database.references(group="eval")) == 38
assert len(database.probes(group="eval")) == 3990
@db_available("multipie") @db_available("multipie")
......
...@@ -75,7 +75,6 @@ test: ...@@ -75,7 +75,6 @@ test:
- bob.db.gbu - bob.db.gbu
- bob.db.ijbc - bob.db.ijbc
- bob.db.lfw - bob.db.lfw
- bob.db.mobio
- bob.db.multipie - bob.db.multipie
- bob.db.replay - bob.db.replay
- bob.db.replaymobile - bob.db.replaymobile
......
...@@ -13,7 +13,7 @@ Databases ...@@ -13,7 +13,7 @@ Databases
.. autosummary:: .. autosummary::
bob.bio.face.database.ARFaceBioDatabase bob.bio.face.database.ARFaceBioDatabase
bob.bio.face.database.AtntBioDatabase bob.bio.face.database.AtntBioDatabase
bob.bio.face.database.MobioBioDatabase bob.bio.face.database.MobioDatabase
bob.bio.face.database.ReplayBioDatabase bob.bio.face.database.ReplayBioDatabase
bob.bio.face.database.ReplayMobileBioDatabase bob.bio.face.database.ReplayMobileBioDatabase
bob.bio.face.database.GBUBioDatabase bob.bio.face.database.GBUBioDatabase
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment