Added IJB-C Database

Added IJB-C as test requirements

Typo
parent 0aab2d95
Pipeline #19869 failed with stage
in 17 minutes and 5 seconds
#!/usr/bin/env python
from bob.bio.face.database import IJBCBioDatabase
ijbc_directory = "[YOUR_IJBC_DIRECTORY]"
database = IJBCBioDatabase(
original_directory=ijbc_directory,
protocol='1:1'
)
......@@ -13,6 +13,7 @@ from .lfw import LFWBioDatabase
from .multipie import MultipieBioDatabase
from .ijba import IJBABioDatabase
from .ijbb import IJBBBioDatabase
from .ijbc import IJBCBioDatabase
from .xm2vts import XM2VTSBioDatabase
from .frgc import FRGCBioDatabase
from .scface import SCFaceBioDatabase
......@@ -49,6 +50,7 @@ __appropriate__(
MultipieBioDatabase,
IJBABioDatabase,
IJBBBioDatabase,
IJBCBioDatabase,
XM2VTSBioDatabase,
FRGCBioDatabase,
SCFaceBioDatabase,
......
#!/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
"""
IJBC database implementation of bob.bio.base.database.BioDatabase interface.
It is an extension of the database interface, which directly talks to IJBC database, for
verification experiments (good to use in bob.bio.base framework).
"""
from .database import FaceBioFile
from bob.bio.base.database import BioDatabase, BioFileSet
import os
import bob.io.image
class IJBCBioFile(FaceBioFile):
def __init__(self, f):
super(IJBCBioFile, self).__init__(
client_id=f.client_id, path=f.path, file_id=f.id)
self.f = f
def load(self, directory, extension=None, add_client_id=False):
return bob.io.image.load(self.make_path(directory, self.f.extension, add_client_id))
def make_path(self, directory, extension, add_client_id=True):
if add_client_id:
# add client ID to the path, so that a unique path is generated
# (there might be several identities in each physical file)
path = "%s-%s%s" % (self.path, self.client_id, extension or '')
else:
# do not add the client ID to be able to obtain the original image file
path = "%s%s" % (self.path, extension or '')
return str(os.path.join(directory or '', path))
class IJBCBioFileSet(BioFileSet):
def __init__(self, template):
super(IJBCBioFileSet, self).__init__(file_set_id=template.id, files=[
IJBCBioFile(f) for f in template.files], path=template.path)
class IJBCBioDatabase(BioDatabase):
"""
IJBC database implementation of :py:class:`bob.bio.base.database.BioDatabase` interface.
It is an extension of an SQL-based database interface, which directly talks to IJBC database, for
verification experiments (good to use in bob.bio.base framework).
"""
def __init__(
self,
original_directory=None,
annotation_directory=None,
original_extension=None,
**kwargs
):
from bob.db.ijbc.query import Database as LowLevelDatabase
self._db = LowLevelDatabase(
original_directory)
# call base class constructors to open a session to the database
super(IJBCBioDatabase, self).__init__(
name='ijbc',
models_depend_on_protocol=True,
training_depends_on_protocol=True,
original_directory=original_directory,
annotation_directory=annotation_directory,
original_extension=original_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 uses_probe_file_sets(self):
return True
def model_ids_with_protocol(self, groups=None, protocol="1:1", **kwargs):
return self._db.model_ids(groups=groups, protocol=protocol)
def objects(self, groups=None, protocol="1:1", purposes=None, model_ids=None, **kwargs):
return [IJBCBioFile(f) for f in self._db.objects(groups=groups, protocol=protocol, purposes=purposes, model_ids=model_ids, **kwargs)]
def object_sets(self, groups=None, protocol="1:1", purposes=None, model_ids=None):
return [IJBCBioFileSet(t) for t in self._db.object_sets(groups=groups, protocol=protocol, purposes=purposes, model_ids=model_ids)]
def annotations(self, biofile):
return self._db.annotations(biofile.f)
def client_id_from_model_id(self, model_id, group='dev'):
return self._db.get_client_id_from_model_id(self.protocol, model_id)
def original_file_names(self, files):
return [f.make_path(self.original_directory, f.f.extension, False) for f in files]
......@@ -373,3 +373,20 @@ def test_ijbb():
except IOError as e:
raise SkipTest(
"The annotations could not be queried; probably the annotation files are missing. Here is the error: '%s'" % e)
@db_available('ijbc')
def test_ijbc():
database = bob.bio.base.load_resource(
'ijbc', 'database', preferred_package='bob.bio.face')
try:
check_database(database, models_depend=True, training_depends=True)
except IOError as e:
raise SkipTest(
"The database could not queried; Here is the error: '%s'" % e)
try:
_check_annotations(database, topleft=True, limit_files=1000)
except IOError as e:
raise SkipTest(
"The annotations could not be queried; probably the annotation files are missing. Here is the error: '%s'" % e)
......@@ -76,6 +76,7 @@ test:
- bob.db.frgc
- bob.db.gbu
- bob.db.ijba
- bob.db.ijbc
- bob.db.lfw
- bob.db.mobio
- bob.db.msu_mfsd_mod
......
......@@ -117,6 +117,7 @@ setup(
'gbu = bob.bio.face.config.database.gbu:database',
'ijba = bob.bio.face.config.database.ijba:database',
'ijbb = bob.bio.face.config.database.ijbb:database',
'ijbc = bob.bio.face.config.database.ijbc: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:mobio_image',
......
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