diff --git a/bob/bio/face/config/database/arface.py b/bob/bio/face/config/database/arface.py index c378304070cd810f86e9fd0fbc84f469589281a7..3bae0e883b83dba6ed338e42064368b431a8933c 100644 --- a/bob/bio/face/config/database/arface.py +++ b/bob/bio/face/config/database/arface.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -from bob.bio.db import ARFaceBioDatabase +from bob.bio.face.database import ARFaceBioDatabase arface_directory = "[YOUR_ARFACE_DIRECTORY]" diff --git a/bob/bio/face/config/database/atnt.py b/bob/bio/face/config/database/atnt.py new file mode 100644 index 0000000000000000000000000000000000000000..82e9c5e8a40d616089b853d8b971da7a7638a240 --- /dev/null +++ b/bob/bio/face/config/database/atnt.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from bob.bio.face.database import AtntBioDatabase + +atnt_directory = "[YOUR_ATNT_DIRECTORY]" + +database = AtntBioDatabase( + original_directory=atnt_directory, + original_extension=".pgm", +) diff --git a/bob/bio/face/config/database/banca_english.py b/bob/bio/face/config/database/banca_english.py index 76c765db0369ded5679a4a3f15db8fb7d29dadb0..53fbc36a175ca7d816c0d5367b00462e85cf7ee8 100644 --- a/bob/bio/face/config/database/banca_english.py +++ b/bob/bio/face/config/database/banca_english.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -from bob.bio.db import BancaBioDatabase +from bob.bio.face.database import BancaBioDatabase banca_directory = "[YOUR_BANCA_DIRECTORY]" diff --git a/bob/bio/face/config/database/caspeal.py b/bob/bio/face/config/database/caspeal.py index d92dbf50df517251ff366e7f28c545d7951d9644..f4fd257a6693f2b0e7afb7fca92c3351de4d3526 100644 --- a/bob/bio/face/config/database/caspeal.py +++ b/bob/bio/face/config/database/caspeal.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -from bob.bio.db import CaspealBioDatabase +from bob.bio.face.database import CaspealBioDatabase caspeal_directory = "[YOUR_CAS-PEAL_DIRECTORY]" diff --git a/bob/bio/face/config/database/frgc.py b/bob/bio/face/config/database/frgc.py index 304fcb3985f1012fe6839f4abe076c10968c5693..f351cea4a3ae6eafbb0a3f5c69ba00ea1212bc8b 100644 --- a/bob/bio/face/config/database/frgc.py +++ b/bob/bio/face/config/database/frgc.py @@ -1,13 +1,11 @@ #!/usr/bin/env python -import bob.db.frgc -import bob.bio.base +from bob.bio.face.database import FRGCBioDatabase frgc_directory = "[YOUR_FRGC_DIRECTORY]" -database = bob.bio.base.database.DatabaseBob( - database = bob.db.frgc.Database(frgc_directory), - name = "frgc", - protocol = '2.0.1', - models_depend_on_protocol = True +database = FRGCBioDatabase( + original_directory=frgc_directory, + protocol='2.0.1', + models_depend_on_protocol=True ) diff --git a/bob/bio/face/config/database/gbu.py b/bob/bio/face/config/database/gbu.py index 6da69eb940628af703271d0fb08f6028f9e682bf..c74b3b3ce8b048890de5ee2d4f66c3c8d7c6bb7d 100644 --- a/bob/bio/face/config/database/gbu.py +++ b/bob/bio/face/config/database/gbu.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -from bob.bio.db import GBUBioDatabase +from bob.bio.face.database import GBUBioDatabase mbgc_v1_directory = "[YOUR_MBGC-V1_DIRECTORY]" diff --git a/bob/bio/face/config/database/lfw_restricted.py b/bob/bio/face/config/database/lfw_restricted.py index 1844f9f697c36e97ec00dc4407e50073f1701186..373aac0c03e3b2a654bb30880a6b21f26bc11e1a 100644 --- a/bob/bio/face/config/database/lfw_restricted.py +++ b/bob/bio/face/config/database/lfw_restricted.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -from bob.bio.db import LFWBioDatabase +from bob.bio.face.database import LFWBioDatabase lfw_directory = "[YOUR_LFW_FUNNELED_DIRECTORY]" diff --git a/bob/bio/face/config/database/lfw_unrestricted.py b/bob/bio/face/config/database/lfw_unrestricted.py index b05a354ac71ba06fb6c4babcb23fef1f7e16c1bc..db4ecb9e1cb91242ee548c1fc21a647c6a48869a 100644 --- a/bob/bio/face/config/database/lfw_unrestricted.py +++ b/bob/bio/face/config/database/lfw_unrestricted.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -from bob.bio.db import LFWBioDatabase +from bob.bio.face.database import LFWBioDatabase lfw_directory = "[YOUR_LFW_FUNNELED_DIRECTORY]" diff --git a/bob/bio/face/config/database/mobio_female.py b/bob/bio/face/config/database/mobio_female.py index 73508e5c0a691a50fa24f2ac24c473a65adced72..a329d9224502429d26ae985df052f0fec95eb131 100644 --- a/bob/bio/face/config/database/mobio_female.py +++ b/bob/bio/face/config/database/mobio_female.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -from bob.bio.db import MobioBioDatabase +from bob.bio.face.database import MobioBioDatabase mobio_image_directory = "[YOUR_MOBIO_IMAGE_DIRECTORY]" mobio_annotation_directory = "[YOUR_MOBIO_ANNOTATION_DIRECTORY]" @@ -9,6 +9,7 @@ database = MobioBioDatabase( original_directory=mobio_image_directory, original_extension=".png", annotation_directory=mobio_annotation_directory, + annotation_type="eyecenter", protocol = 'female', models_depend_on_protocol=True, diff --git a/bob/bio/face/config/database/mobio_image.py b/bob/bio/face/config/database/mobio_image.py index 59c3565155e184791f82acbd3a72c36d54bd16ea..b754e6f727190001126ecf58434ffef13bbe7c1f 100644 --- a/bob/bio/face/config/database/mobio_image.py +++ b/bob/bio/face/config/database/mobio_image.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -from bob.bio.db import MobioBioDatabase +from bob.bio.face.database import MobioBioDatabase mobio_image_directory = "[YOUR_MOBIO_IMAGE_DIRECTORY]" mobio_annotation_directory = "[YOUR_MOBIO_ANNOTATION_DIRECTORY]" @@ -9,6 +9,7 @@ database = MobioBioDatabase( original_directory=mobio_image_directory, original_extension=".png", annotation_directory=mobio_annotation_directory, + annotation_type="eyecenter", protocol='male', models_depend_on_protocol = True, diff --git a/bob/bio/face/config/database/mobio_male.py b/bob/bio/face/config/database/mobio_male.py index 214fea4560d6534be3b755355aa73f7c7461858f..90da21e23b1580aa000870b830a61dbd5e54a3b2 100644 --- a/bob/bio/face/config/database/mobio_male.py +++ b/bob/bio/face/config/database/mobio_male.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -from bob.bio.db import MobioBioDatabase +from bob.bio.face.database import MobioBioDatabase mobio_image_directory = "[YOUR_MOBIO_IMAGE_DIRECTORY]" mobio_annotation_directory = "[YOUR_MOBIO_ANNOTATION_DIRECTORY]" @@ -9,6 +9,7 @@ database = MobioBioDatabase( original_directory=mobio_image_directory, original_extension=".png", annotation_directory=mobio_annotation_directory, + annotation_type="eyecenter", protocol='male', models_depend_on_protocol = True, diff --git a/bob/bio/face/config/database/multipie.py b/bob/bio/face/config/database/multipie.py index 9324389bc4fa645068d1f08d2f04d947ee077cf4..405c60aa9943d826f65db88c2190a7a3c8b42095 100644 --- a/bob/bio/face/config/database/multipie.py +++ b/bob/bio/face/config/database/multipie.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -from bob.bio.db import MultipieBioDatabase +from bob.bio.face.database import MultipieBioDatabase multipie_image_directory = "[YOUR_MULTI-PIE_IMAGE_DIRECTORY]" multipie_annotation_directory = "[YOUR_MULTI-PIE_ANNOTATION_DIRECTORY]" diff --git a/bob/bio/face/config/database/multipie_pose.py b/bob/bio/face/config/database/multipie_pose.py index a67930ffd3913a094ca3c1c9e013178cf6c1741b..3260f0e08797eaf8dbd3e833f82d2c2dbe5d9708 100644 --- a/bob/bio/face/config/database/multipie_pose.py +++ b/bob/bio/face/config/database/multipie_pose.py @@ -1,7 +1,7 @@ #!/usr/bin/env python -from bob.bio.db import MultipieBioDatabase +from bob.bio.face.database import MultipieBioDatabase # here, we only want to have the cameras that are used in the P protocol cameras = ('24_0', '01_0', '20_0', '19_0', '04_1', '05_0', '05_1', '14_0', '13_0', '08_0', '09_0', '12_0', '11_0') diff --git a/bob/bio/face/config/database/scface.py b/bob/bio/face/config/database/scface.py index 9f4e339d8794e3d1d172f2577b190a61e00d796a..6fd8e7ea42bf71c7f46857362b6333490ca88fb9 100644 --- a/bob/bio/face/config/database/scface.py +++ b/bob/bio/face/config/database/scface.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -from bob.bio.db import SCFaceBioDatabase +from bob.bio.face.database import SCFaceBioDatabase scface_directory = "[YOUR_SC_FACE_DIRECTORY]" diff --git a/bob/bio/face/config/database/xm2vts.py b/bob/bio/face/config/database/xm2vts.py index 54a3533d64d6f9fc81a042e2d82d341c1b831a6f..e9cb98a0cbe1bea01d0e64651249f4055a6d9e33 100644 --- a/bob/bio/face/config/database/xm2vts.py +++ b/bob/bio/face/config/database/xm2vts.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -from bob.bio.db import XM2VTSBioDatabase +from bob.bio.face.database import XM2VTSBioDatabase xm2vts_directory = "[YOUR_XM2VTS_DIRECTORY]" diff --git a/bob/bio/face/database/__init__.py b/bob/bio/face/database/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7b1e187e27ec4e7c6a221098becd98915e9f0fc4 --- /dev/null +++ b/bob/bio/face/database/__init__.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : + +from .database import FaceBioFile +from .mobio import MobioBioDatabase +from .replay import ReplayBioDatabase +from .atnt import AtntBioDatabase +from .banca import BancaBioDatabase +from .gbu import GBUBioDatabase +from .arface import ARFaceBioDatabase +from .caspeal import CaspealBioDatabase +from .lfw import LFWBioDatabase +from .multipie import MultipieBioDatabase +from .ijba import IJBABioDatabase +from .xm2vts import XM2VTSBioDatabase +from .frgc import FRGCBioDatabase +from .cuhk_cufs import CUHK_CUFSBioDatabase +from .scface import SCFaceBioDatabase + +# gets sphinx autodoc done right - don't remove it +__all__ = [_ for _ in dir() if not _.startswith('_')] diff --git a/bob/bio/face/database/arface.py b/bob/bio/face/database/arface.py new file mode 100644 index 0000000000000000000000000000000000000000..262dc90cfb955d6d3b12c84af08101769da3d098 --- /dev/null +++ b/bob/bio/face/database/arface.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> +# Sat 20 Aug 15:43:10 CEST 2016 + +""" + ARFACE database implementation of bob.bio.base.database.ZTDatabase interface. + It is an extension of an SQL-based database interface, which directly talks to ARFACE database, for + verification experiments (good to use in bob.bio.base framework). +""" + +from .database import FaceBioFile +from bob.bio.base.database import BioDatabase, BioFile + + +class ARFaceBioDatabase(BioDatabase): + """ + Implements verification API for querying ARFACE database. + """ + + def __init__( + self, + **kwargs + ): + # call base class constructors to open a session to the database + super(ARFaceBioDatabase, self).__init__(name='arface', **kwargs) + + from bob.db.arface.query import Database as LowLevelDatabase + self.__db = LowLevelDatabase() + + def model_ids_with_protocol(self, groups=None, protocol=None, **kwargs): + return self.__db.model_ids(groups=groups, protocol=protocol) + + 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 [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] diff --git a/bob/bio/face/database/atnt.py b/bob/bio/face/database/atnt.py new file mode 100644 index 0000000000000000000000000000000000000000..6b93e0e0394162b02b8455d3273cd926ded39575 --- /dev/null +++ b/bob/bio/face/database/atnt.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Amir Mohammadi <amir.mohammadi@idiap.ch> +# Wed 13 Jul 16:43:22 CEST 2016 + +""" + Atnt database implementation of bob.bio.base.database.Database interface. + It is an extension of an SQL-based database interface, which directly talks to Atnt database, for + verification experiments (good to use in bob.bio.base framework). +""" + +from .database import FaceBioFile +from bob.bio.base.database import BioDatabase, BioFile + + +class AtntBioDatabase(BioDatabase): + """ + Implements verification API for querying Atnt database. + """ + + def __init__( + self, + **kwargs + ): + # call base class constructors to open a session to the database + super(AtntBioDatabase, self).__init__(name='atnt', **kwargs) + + from bob.db.atnt.query import Database as LowLevelDatabase + self.__db = LowLevelDatabase() + + def model_ids_with_protocol(self, groups=None, protocol=None, **kwargs): + return self.__db.model_ids(groups=groups, protocol=protocol) + + 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 [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] diff --git a/bob/bio/face/database/banca.py b/bob/bio/face/database/banca.py new file mode 100644 index 0000000000000000000000000000000000000000..6da0b31202148674cc9eae9becd636494e7d9e9a --- /dev/null +++ b/bob/bio/face/database/banca.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> +# Sat 20 Aug 15:43:10 CEST 2016 + +""" + BANCA database implementation of bob.bio.base.database.ZTDatabase interface. + It is an extension of an SQL-based database interface, which directly talks to Banca database, for + verification experiments (good to use in bob.bio.base framework). +""" + +from .database import FaceBioFile +from bob.bio.base.database import ZTBioDatabase, BioFile + + +class BancaBioDatabase(ZTBioDatabase): + """ + Implements verification API for querying Banca database. + """ + + def __init__( + self, + **kwargs + ): + # call base class constructors to open a session to the database + super(BancaBioDatabase, self).__init__(name='banca', **kwargs) + + from bob.db.banca.query import Database as LowLevelDatabase + self.__db = LowLevelDatabase() + + def model_ids_with_protocol(self, groups=None, protocol=None, **kwargs): + return self.__db.model_ids(groups=groups, protocol=protocol) + + 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 [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) 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 [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] + + def zobjects(self, groups=None, protocol=None, **kwargs): + retval = self.__db.zobjects(groups=groups, protocol=protocol, **kwargs) + return [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] diff --git a/bob/bio/face/database/caspeal.py b/bob/bio/face/database/caspeal.py new file mode 100644 index 0000000000000000000000000000000000000000..620c02ef96851cf3b498734ba51708c20384c85e --- /dev/null +++ b/bob/bio/face/database/caspeal.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> +# Sat 20 Aug 15:43:10 CEST 2016 + +""" + CASPEAL database implementation of bob.bio.base.database.Database interface. + It is an extension of an SQL-based database interface, which directly talks to CASPEAL database, for + verification experiments (good to use in bob.bio.base framework). +""" + +from .database import FaceBioFile +from bob.bio.base.database import BioDatabase, BioFile + + +class CaspealBioDatabase(BioDatabase): + """ + Implements verification API for querying Caspeal database. + """ + + def __init__( + self, + **kwargs + ): + # call base class constructors to open a session to the database + super(CaspealBioDatabase, self).__init__(name='caspeal', **kwargs) + + from bob.db.caspeal.query import Database as LowLevelDatabase + self.__db = LowLevelDatabase() + + def model_ids_with_protocol(self, groups=None, protocol=None, **kwargs): + return self.__db.model_ids(groups=groups, protocol=protocol) + + 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 [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] diff --git a/bob/bio/face/database/cuhk_cufs.py b/bob/bio/face/database/cuhk_cufs.py new file mode 100644 index 0000000000000000000000000000000000000000..62ed153dd4c234455c1ddd8f3980fc1cc6849611 --- /dev/null +++ b/bob/bio/face/database/cuhk_cufs.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> +# Sat 20 Aug 15:43:10 CEST 2016 + +""" + CUHK_CUFS database implementation of bob.bio.base.database.ZTDatabase interface. + It is an extension of an SQL-based database interface, which directly talks to CUHK_CUFS database, for + verification experiments (good to use in bob.bio.base framework). +""" + +from .database import FaceBioFile +from bob.bio.base.database import ZTBioDatabase, BioFile + + +class CUHK_CUFSBioDatabase(ZTBioDatabase): + """ + Implements verification API for querying CUHK_CUFS database. + """ + + def __init__( + self, + **kwargs + ): + # call base class constructors to open a session to the database + super(CUHK_CUFSBioDatabase, self).__init__(name='cuhk_cufs', **kwargs) + + from bob.db.cuhk_cufs.query import Database as LowLevelDatabase + self.__db = LowLevelDatabase() + + def model_ids_with_protocol(self, groups=None, protocol="search_split1_p2s", **kwargs): + return self.__db.model_ids(groups=groups, protocol=protocol) + + def tmodel_ids_with_protocol(self, protocol="search_split1_p2s", groups=None, **kwargs): + return self.__db.tmodel_ids(protocol=protocol, groups=groups, **kwargs) + + def objects(self, groups=None, protocol="search_split1_p2s", purposes=None, model_ids=None, **kwargs): + retval = self.__db.objects(groups=groups, protocol=protocol, purposes=purposes, model_ids=model_ids, **kwargs) + return [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] + + def tobjects(self, groups=None, protocol="search_split1_p2s", model_ids=None, **kwargs): + retval = self.__db.tobjects(groups=groups, protocol=protocol, model_ids=model_ids, **kwargs) + return [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] + + def zobjects(self, groups=None, protocol="search_split1_p2s", **kwargs): + retval = self.__db.zobjects(groups=groups, protocol=protocol, **kwargs) + return [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] diff --git a/bob/bio/face/database/database.py b/bob/bio/face/database/database.py new file mode 100644 index 0000000000000000000000000000000000000000..7cbc8f305c8561a619a801f6e9d3d2c604717926 --- /dev/null +++ b/bob/bio/face/database/database.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> +# Wed 20 July 14:43:22 CEST 2016 + +""" + Verification API for bob.db.voxforge +""" + +from bob.bio.base.database.file import BioFile + + +class FaceBioFile(BioFile): + def __init__(self, client_id, path, file_id): + """ + Initializes this File object with an File equivalent for + VoxForge database. + """ + super(FaceBioFile, self).__init__(client_id=client_id, path=path, file_id=file_id) diff --git a/bob/bio/face/database/frgc.py b/bob/bio/face/database/frgc.py new file mode 100644 index 0000000000000000000000000000000000000000..b6d8ac7a0ab2fcaf0afc97db07627f624754356b --- /dev/null +++ b/bob/bio/face/database/frgc.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> +# Sat 20 Aug 15:43:10 CEST 2016 + +""" + FRGC database implementation of bob.bio.base.database.Database interface. + It is an extension of an SQL-based database interface, which directly talks to FRGC database, for + verification experiments (good to use in bob.bio.base framework). +""" + + +from .database import FaceBioFile +from bob.bio.base.database import BioDatabase, BioFile + + +class FRGCBioDatabase(BioDatabase): + """ + Implements verification API for querying FRGC database. + """ + + def __init__( + self, + **kwargs + ): + # call base class constructors to open a session to the database + super(FRGCBioDatabase, self).__init__(name='frgc', **kwargs) + + from bob.db.frgc.query import Database as LowLevelDatabase + self.__db = LowLevelDatabase() + + def model_ids_with_protocol(self, groups=None, protocol=None, **kwargs): + return self.__db.model_ids(groups=groups, protocol=protocol) + + 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 [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] diff --git a/bob/bio/face/database/gbu.py b/bob/bio/face/database/gbu.py new file mode 100644 index 0000000000000000000000000000000000000000..a402ba6c0034e78f62263f2bb9217e2fce6f018c --- /dev/null +++ b/bob/bio/face/database/gbu.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> +# Sat 20 Aug 15:43:10 CEST 2016 + +""" + GBU database implementation of bob.bio.base.database.ZTDatabase interface. + It is an extension of an SQL-based database interface, which directly talks to GBU database, for + verification experiments (good to use in bob.bio.base framework). +""" + +from .database import FaceBioFile +from bob.bio.base.database import BioDatabase, BioFile + + +class GBUBioDatabase(BioDatabase): + """ + Implements verification API for querying gbu database. + """ + + def __init__( + self, + **kwargs + ): + # call base class constructors to open a session to the database + super(GBUBioDatabase, self).__init__(name='GBU', **kwargs) + + from bob.db.gbu.query import Database as LowLevelDatabase + self.__db = LowLevelDatabase() + + def model_ids_with_protocol(self, groups=None, protocol=None, **kwargs): + return self.__db.model_ids(groups=groups, protocol=protocol) + + 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 [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] diff --git a/bob/bio/face/database/ijba.py b/bob/bio/face/database/ijba.py new file mode 100644 index 0000000000000000000000000000000000000000..711b11f339b1a0bf21647bea0a751730a7b19cb1 --- /dev/null +++ b/bob/bio/face/database/ijba.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> +# Sat 20 Aug 15:43:10 CEST 2016 + +""" + IJBA database implementation of bob.bio.base.database.Database interface. + It is an extension of an SQL-based database interface, which directly talks to IJBA database, for + verification experiments (good to use in bob.bio.base framework). +""" + +from .database import FaceBioFile +from bob.bio.base.database import BioDatabase, BioFile + + +class IJBABioDatabase(BioDatabase): + """ + Implements verification API for querying IJBA database. + """ + + def __init__( + self, + **kwargs + ): + # call base class constructors to open a session to the database + super(IJBABioDatabase, self).__init__(name='ijba', **kwargs) + + from bob.db.ijba.query import Database as LowLevelDatabase + self.__db = LowLevelDatabase() + + def model_ids_with_protocol(self, groups=None, protocol="search_split1", **kwargs): + return self.__db.model_ids(groups=groups, protocol=protocol) + + def objects(self, groups=None, protocol="search_split1", purposes=None, model_ids=None, **kwargs): + retval = self.__db.objects(groups=groups, protocol=protocol, purposes=purposes, model_ids=model_ids, **kwargs) + return [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] diff --git a/bob/bio/face/database/lfw.py b/bob/bio/face/database/lfw.py new file mode 100644 index 0000000000000000000000000000000000000000..0a22d09c15b81c9dc68046a1e96f0428e657e6ae --- /dev/null +++ b/bob/bio/face/database/lfw.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> +# Sat 20 Aug 15:43:10 CEST 2016 + +""" + LFW database implementation of bob.bio.base.database.Database interface. + It is an extension of an SQL-based database interface, which directly talks to LFW database, for + verification experiments (good to use in bob.bio.base framework). +""" + + +from .database import FaceBioFile +from bob.bio.base.database import BioDatabase, BioFile + + +class LFWBioDatabase(BioDatabase): + """ + Implements verification API for querying LFW database. + """ + + def __init__( + self, + **kwargs + ): + # call base class constructors to open a session to the database + super(LFWBioDatabase, self).__init__(name='lfw', **kwargs) + + from bob.db.lfw.query import Database as LowLevelDatabase + self.__db = LowLevelDatabase() + + def model_ids_with_protocol(self, groups=None, protocol=None, **kwargs): + return self.__db.model_ids(groups=groups, protocol=protocol) + + 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 [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] diff --git a/bob/bio/face/database/mobio.py b/bob/bio/face/database/mobio.py new file mode 100644 index 0000000000000000000000000000000000000000..94c797475f4b815f96e3ef9b61359e488d53064d --- /dev/null +++ b/bob/bio/face/database/mobio.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Amir Mohammadi <amir.mohammadi@idiap.ch> +# Wed 13 Jul 16:43:22 CEST 2016 + +""" + MOBIO database implementation of bob.bio.base.database.ZTDatabase 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). +""" + + +from .database import FaceBioFile +from bob.bio.base.database import ZTBioDatabase, BioFile + + +class MobioBioDatabase(ZTBioDatabase): + """ + Implements verification API for querying Mobio database. + """ + + def __init__( + self, + **kwargs + ): + # call base class constructors to open a session to the database + super(MobioBioDatabase, self).__init__(name='mobio', + **kwargs) + + from bob.db.mobio.query import Database as LowLevelDatabase + self.__db = LowLevelDatabase() + + 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 [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) 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 [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] + + def zobjects(self, groups=None, protocol=None, **kwargs): + retval = self.__db.zobjects(groups=groups, protocol=protocol, **kwargs) + return [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] diff --git a/bob/bio/face/database/multipie.py b/bob/bio/face/database/multipie.py new file mode 100644 index 0000000000000000000000000000000000000000..f6bc0b1018dca177164de5655f519d07e6fcb9b0 --- /dev/null +++ b/bob/bio/face/database/multipie.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> +# Sat 20 Aug 15:43:10 CEST 2016 + +""" + Multipie database implementation of bob.bio.base.database.Database interface. + It is an extension of an SQL-based database interface, which directly talks to Multipie database, for + verification experiments (good to use in bob.bio.base framework). +""" + +from .database import FaceBioFile +from bob.bio.base.database import ZTBioDatabase, BioFile + + +class MultipieBioDatabase(ZTBioDatabase): + """ + Implements verification API for querying MULTIPIE database. + """ + + def __init__( + self, + **kwargs + ): + # call base class constructors to open a session to the database + super(MultipieBioDatabase, self).__init__(name='multipie', **kwargs) + + from bob.db.multipie.query import Database as LowLevelDatabase + self.__db = LowLevelDatabase() + + def model_ids_with_protocol(self, groups=None, protocol=None, **kwargs): + return self.__db.model_ids(groups=groups, protocol=protocol) + + 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 [BioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] + + def tmodel_ids_with_protocol(self, protocol=None, groups=None, **kwargs): + return self.__db.tmodel_ids(protocol=protocol, groups=groups, **kwargs) + + 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 [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] + + def zobjects(self, groups=None, protocol=None, **kwargs): + retval = self.__db.zobjects(groups=groups, protocol=protocol, **kwargs) + return [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] + diff --git a/bob/bio/face/database/replay.py b/bob/bio/face/database/replay.py new file mode 100644 index 0000000000000000000000000000000000000000..3a98d01959dcb949a3329b6bfc2a17da59b4e27f --- /dev/null +++ b/bob/bio/face/database/replay.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Pavel Korshunov <pavel.korshunov@idiap.ch> +# Mon 12 Oct 14:43:22 CEST 2015 + +""" + Replay attack database implementation of bob.bio.base.database.BioDatabase interface. + It is an extension of an SQL-based database interface, which directly talks to Replay database, for + verification experiments (good to use in bob.bio.base framework). + It also implements a kind of hack so that you can run vulnerability analysis with it. +""" + +from .database import FaceBioFile +from bob.bio.base.database import BioDatabase, BioFile + + +class ReplayBioDatabase(BioDatabase): + """ + Implements verification API for querying Replay database. + """ + __doc__ = __doc__ + + def __init__(self, **kwargs): + # call base class constructors to open a session to the database + super(ReplayBioDatabase, self).__init__(name='replay', **kwargs) + + from bob.db.replay import Database as LowLevelDatabase + self.__db = LowLevelDatabase() + + self.low_level_group_names = ('train', 'devel', 'test') + self.high_level_group_names = ('world', 'dev', 'eval') + + def protocol_names(self): + """Returns all registered protocol names + Here I am going to hack and double the number of protocols + with -licit and -spoof. This is done for running vulnerability + analysis""" + names = [p.name + '-licit' for p in self.__db.protocols()] + names += [p.name + '-spoof' for p in self.__db.protocols()] + return names + + def groups(self): + return self.convert_names_to_highlevel( + self.__db.groups(), self.low_level_group_names, self.high_level_group_names) + + def annotations(self, file): + """Will return the bounding box annotation of all frames of the video.""" + # fn = 10 # 10th frame number + annots = file.bbx(directory=self.original_directory) + # bob uses the (y, x) format + annotations = dict() + for i in range(annots.shape[0]): + topleft = (annots[i][2], annots[i][1]) + bottomright = (annots[i][2] + annots[i][4], annots[i][1] + annots[i][3]) + annotations[str(i)] = {'topleft': topleft, 'bottomright': bottomright} + return annotations + + def model_ids_with_protocol(self, groups=None, protocol=None, **kwargs): + # since the low-level API does not support verification straight-forward-ly, we improvise. + files = self.objects(groups=groups, protocol=protocol) + return sorted(set(f.client_id for f in files)) + + def objects(self, groups=None, protocol=None, purposes=None, model_ids=None, **kwargs): + if protocol == '.': + protocol = None + protocol = self.check_parameter_for_validity(protocol, "protocol", self.protocol_names(), 'grandtest-licit') + groups = self.check_parameters_for_validity(groups, "group", self.groups(), self.groups()) + purposes = self.check_parameters_for_validity(purposes, "purpose", ('enroll', 'probe'), ('enroll', 'probe')) + purposes = list(purposes) + groups = self.convert_names_to_lowlevel( + groups, self.low_level_group_names, self.high_level_group_names) + + # protocol licit is not defined in the low level API + # so do a hack here. + if '-licit' in protocol: + # for licit we return the grandtest protocol + protocol = protocol.replace('-licit', '') + # The low-level API has only "attack", "real", "enroll" and "probe" + # should translate to "real" or "attack" depending on the protocol. + # enroll does not to change. + if 'probe' in purposes: + purposes.remove('probe') + purposes.append('real') + if len(purposes) == 1: + # making the model_ids to None will return all clients which make + # the impostor data also available. + model_ids = None + elif model_ids: + raise NotImplementedError( + 'Currently returning both enroll and probe for specific ' + 'client(s) in the licit protocol is not supported. ' + 'Please specify one purpose only.') + elif '-spoof' in protocol: + protocol = protocol.replace('-spoof', '') + # you need to replace probe with attack and real for the spoof protocols. + # I am adding the real here also to create positives scores also. + if 'probe' in purposes: + purposes.remove('probe') + purposes.append('attack') + + # now, query the actual Replay database + objects = self.__db.objects(groups=groups, protocol=protocol, cls=purposes, clients=model_ids, **kwargs) + + # make sure to return BioFile representation of a file, not the database one + # also make sure you replace client ids with spoof/metatdata1/metadata2/... + retval = [] + for f in objects: + if f.is_real(): + retval.append(FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id)) + else: + temp = FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) + temp.client_id = 'attack' + retval.append(temp) + return retval diff --git a/bob/bio/face/database/scface.py b/bob/bio/face/database/scface.py new file mode 100644 index 0000000000000000000000000000000000000000..a13d092b41239bbf337ab15f7da1ed13ba2ba8bb --- /dev/null +++ b/bob/bio/face/database/scface.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> +# Sat 20 Aug 15:43:10 CEST 2016 + +""" + SCFace database implementation of bob.bio.base.database.ZTDatabase interface. + It is an extension of an SQL-based database interface, which directly talks to SCFace database, for + verification experiments (good to use in bob.bio.base framework). +""" + +from .database import FaceBioFile +from bob.bio.base.database import ZTBioDatabase, BioFile + + +class SCFaceBioDatabase(ZTBioDatabase): + """ + Implements verification API for querying SCFace database. + """ + + def __init__( + self, + **kwargs + ): + # call base class constructors to open a session to the database + super(SCFaceBioDatabase, self).__init__(name='scface', **kwargs) + + from bob.db.scface.query import Database as LowLevelDatabase + self.__db = LowLevelDatabase() + + def model_ids_with_protocol(self, groups=None, protocol=None, **kwargs): + return self.__db.model_ids(groups=groups, protocol=protocol) + + 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 [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) 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 [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] + + def zobjects(self, groups=None, protocol=None, **kwargs): + retval = self.__db.zobjects(groups=groups, protocol=protocol, **kwargs) + return [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] diff --git a/bob/bio/face/database/xm2vts.py b/bob/bio/face/database/xm2vts.py new file mode 100644 index 0000000000000000000000000000000000000000..a6f94ceaeaf914373a5358f1491d494292194ba1 --- /dev/null +++ b/bob/bio/face/database/xm2vts.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Tiago de Freitas Pereira <tiago.pereira@idiap.ch> +# Sat 20 Aug 15:43:10 CEST 2016 + +""" + XM2VTS database implementation of bob.bio.base.database.Database interface. + It is an extension of an SQL-based database interface, which directly talks to XM2VTS database, for + verification experiments (good to use in bob.bio.base framework). +""" + +from .database import FaceBioFile +from bob.bio.base.database import BioDatabase, BioFile + + +class XM2VTSBioDatabase(BioDatabase): + """ + Implements verification API for querying XM2VTS database. + """ + + def __init__( + self, + **kwargs + ): + # call base class constructors to open a session to the database + super(XM2VTSBioDatabase, self).__init__(name='xm2vts', **kwargs) + + from bob.db.xm2vts.query import Database as LowLevelDatabase + self.__db = LowLevelDatabase() + + def model_ids_with_protocol(self, groups=None, protocol=None, **kwargs): + return self.__db.model_ids(groups=groups, protocol=protocol) + + 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 [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval] diff --git a/bob/bio/face/script/display_face_annotations.py b/bob/bio/face/script/display_face_annotations.py index b0202f6311b7b48161d4636a4b86a9d0aa030491..6421c02042c603e3f67371ac45fd4031a34b7ec9 100644 --- a/bob/bio/face/script/display_face_annotations.py +++ b/bob/bio/face/script/display_face_annotations.py @@ -55,7 +55,7 @@ def main(command_line_parameters=None): # load database database = bob.bio.base.load_resource("".join(args.database), "database") # replace directories - if isinstance(database, bob.bio.db.BioDatabase): + if isinstance(database, bob.bio.base.database.BioDatabase): database.replace_directories(args.database_directories_file) # get all files diff --git a/bob/bio/face/test/test_databases.py b/bob/bio/face/test/test_databases.py index faa2fc4419b6564e3c4b09fd32dec0d61576babb..d6dacb9fdead745054095d455b39e01dc132dece 100644 --- a/bob/bio/face/test/test_databases.py +++ b/bob/bio/face/test/test_databases.py @@ -26,7 +26,7 @@ from bob.bio.base.test.utils import db_available def _check_database(database, groups=('dev',), protocol=None, training_depends=False, models_depend=False): - assert isinstance(database, bob.bio.db.BioDatabase) + assert isinstance(database, bob.bio.base.database.BioDatabase) # load the directories if 'HOME' in os.environ: @@ -40,7 +40,7 @@ def _check_database(database, groups=('dev',), protocol=None, training_depends=F assert len(database.arrange_by_client(database.training_files('train_enroller'))) > 0 for group in groups: - model_ids = database.model_ids(group, protocol=protocol) + model_ids = database.model_ids_with_protocol(group, protocol=protocol) assert len(model_ids) > 0 assert database.client_id_from_model_id(model_ids[0]) is not None assert len(database.enroll_files(model_ids[0], group)) > 0 @@ -52,7 +52,7 @@ def _check_database(database, groups=('dev',), protocol=None, training_depends=F def _check_database_zt(database, groups=('dev', 'eval'), protocol=None, training_depends=False, models_depend=False): _check_database(database, groups, protocol, training_depends, models_depend) - assert isinstance(database, bob.bio.db.ZTBioDatabase) + assert isinstance(database, bob.bio.base.database.ZTBioDatabase) for group in groups: t_model_ids = database.t_model_ids(group) assert len(t_model_ids) > 0 @@ -160,7 +160,7 @@ def test_mobio(): try: _check_annotations(database) - except IOError as e: + except Exception as e: raise SkipTest( "The annotations could not be queried; probably the annotation files are missing. Here is the error: '%s'" % e) @@ -181,7 +181,7 @@ def test_multipie(): try: _check_annotations(database) - except IOError as e: + except Exception as e: raise SkipTest( "The annotations could not be queried; probably the annotation files are missing. Here is the error: '%s'" % e) diff --git a/buildout-dev.cfg b/buildout-dev.cfg new file mode 100644 index 0000000000000000000000000000000000000000..a43a4e9c68fed2081a97ff2b84c026f6d5692f8c --- /dev/null +++ b/buildout-dev.cfg @@ -0,0 +1,80 @@ +; vim: set fileencoding=utf-8 : +; Manuel Guenther <manuel.guenther@idiap.ch> +; Thu Oct 9 16:51:06 CEST 2014 + +[buildout] +parts = scripts +eggs = bob.bio.face + bob.db.base + bob.db.arface + bob.db.banca + bob.db.caspeal + bob.db.frgc + bob.db.gbu + bob.db.lfw + bob.db.mobio + bob.db.multipie + bob.db.scface + bob.db.xm2vts + gridtk + +extensions = bob.buildout + mr.developer +auto-checkout = * +develop = src/bob.extension + src/bob.db.base + src/bob.db.atnt + src/bob.bio.base + src/bob.db.arface + src/bob.db.banca + src/bob.db.caspeal + src/bob.db.frgc + src/bob.db.gbu + src/bob.db.lfw + src/bob.db.mobio + src/bob.db.multipie + src/bob.db.scface + src/bob.db.xm2vts + . + +; options for bob.buildout +debug = true +verbose = true +newest = false + +[sources] +bob.extension = git https://gitlab.idiap.ch/bob/bob.extension +;bob.blitz = git https://gitlab.idiap.ch/bob/bob.blitz +;bob.core = git https://gitlab.idiap.ch/bob/bob.core +;bob.io.base = git https://gitlab.idiap.ch/bob/bob.io.base +;bob.io.image = git https://gitlab.idiap.ch/bob/bob.io.image +;bob.learn.activation = git https://gitlab.idiap.ch/bob/bob.learn.activation +;bob.math = git https://gitlab.idiap.ch/bob/bob.math +;bob.sp = git https://gitlab.idiap.ch/bob/bob.sp +;bob.ip.base = git https://gitlab.idiap.ch/bob/bob.ip.base +;bob.ip.color = git https://gitlab.idiap.ch/bob/bob.ip.color +;bob.ip.draw = git https://gitlab.idiap.ch/bob/bob.ip.draw +;bob.ip.gabor = git https://gitlab.idiap.ch/bob/bob.ip.gabor +;bob.learn.linear = git https://gitlab.idiap.ch/bob/bob.learn.linear +;bob.learn.em = git https://gitlab.idiap.ch/bob/bob.learn.em +;bob.measure = git https://gitlab.idiap.ch/bob/bob.measure +bob.db.base = git https://gitlab.idiap.ch/bob/bob.db.base +bob.db.atnt = git https://gitlab.idiap.ch/bob/bob.db.atnt +bob.bio.base = git git@gitlab.idiap.ch:bob/bob.bio.base branch=issue-8-remove-database-configuration +;bob.learn.boosting = git https://gitlab.idiap.ch/bob/bob.learn.boosting +;bob.ip.facedetect = git https://gitlab.idiap.ch/bob/bob.ip.facedetect +;bob.ip.flandmark = git https://gitlab.idiap.ch/bob/bob.ip.flandmark +bob.db.arface = git https://gitlab.idiap.ch/bob/bob.db.arface +bob.db.banca = git https://gitlab.idiap.ch/bob/bob.db.banca +bob.db.caspeal = git https://gitlab.idiap.ch/bob/bob.db.caspeal +bob.db.frgc = git https://gitlab.idiap.ch/bob/bob.db.frgc +bob.db.gbu = git https://gitlab.idiap.ch/bob/bob.db.gbu +bob.db.lfw = git https://gitlab.idiap.ch/bob/bob.db.lfw +bob.db.mobio = git https://gitlab.idiap.ch/bob/bob.db.mobio +bob.db.multipie = git https://gitlab.idiap.ch/bob/bob.db.multipie +bob.db.scface = git https://gitlab.idiap.ch/bob/bob.db.scface +bob.db.xm2vts = git https://gitlab.idiap.ch/bob/bob.db.xm2vts + +[scripts] +recipe = bob.buildout:scripts +dependent-scripts = true diff --git a/requirements.txt b/requirements.txt index aad2c8cd1f5aadba909da6fa41ed5bded87b3433..c74af83a8cebab7ae2026642c011a408ccb4fec1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,3 +21,4 @@ bob.learn.boosting bob.ip.facedetect bob.ip.flandmark matplotlib # for plotting +gridtk diff --git a/setup.py b/setup.py index 0e4f70a23ff17f3a7c63ef5140cda18fe49d6e32..9b3d0d742085387f65e024a751de79c97d7b5dba 100644 --- a/setup.py +++ b/setup.py @@ -109,13 +109,13 @@ setup( 'bob.bio.database': [ 'arface = bob.bio.face.config.database.arface:database', + 'atnt = bob.bio.face.config.database.atnt:database', 'banca = bob.bio.face.config.database.banca_english:database', 'caspeal = bob.bio.face.config.database.caspeal:database', 'frgc = bob.bio.face.config.database.frgc:database', 'gbu = bob.bio.face.config.database.gbu:database', 'lfw-restricted = bob.bio.face.config.database.lfw_restricted:database', 'lfw-unrestricted = bob.bio.face.config.database.lfw_unrestricted:database', - 'mobio-image = bob.bio.face.config.database.mobio_image:database', 'mobio-male = bob.bio.face.config.database.mobio_male:database', # MOBIO gender-dependent training 'mobio-female = bob.bio.face.config.database.mobio_female:database', # MOBIO gender-dependent training 'multipie = bob.bio.face.config.database.multipie:database',