Skip to content
Snippets Groups Projects
Commit a8230007 authored by Manuel Günther's avatar Manuel Günther
Browse files

Merge branch 'ijbb-highlevel' into 'master'

IJBB highlevel DB

See merge request !37
parents b4d7e32a a5cdd7b3
No related branches found
No related tags found
1 merge request!37IJBB highlevel DB
Pipeline #
#!/usr/bin/env python
from bob.bio.face.database import IJBBBioDatabase
ijbb_directory = "[YOUR_IJBB_DIRECTORY]"
database = IJBBBioDatabase(
original_directory=ijbb_directory,
protocol='1:1'
)
...@@ -12,6 +12,7 @@ from .caspeal import CaspealBioDatabase ...@@ -12,6 +12,7 @@ from .caspeal import CaspealBioDatabase
from .lfw import LFWBioDatabase from .lfw import LFWBioDatabase
from .multipie import MultipieBioDatabase from .multipie import MultipieBioDatabase
from .ijba import IJBABioDatabase from .ijba import IJBABioDatabase
from .ijbb import IJBBBioDatabase
from .xm2vts import XM2VTSBioDatabase from .xm2vts import XM2VTSBioDatabase
from .frgc import FRGCBioDatabase from .frgc import FRGCBioDatabase
from .scface import SCFaceBioDatabase from .scface import SCFaceBioDatabase
...@@ -47,6 +48,7 @@ __appropriate__( ...@@ -47,6 +48,7 @@ __appropriate__(
LFWBioDatabase, LFWBioDatabase,
MultipieBioDatabase, MultipieBioDatabase,
IJBABioDatabase, IJBABioDatabase,
IJBBBioDatabase,
XM2VTSBioDatabase, XM2VTSBioDatabase,
FRGCBioDatabase, FRGCBioDatabase,
SCFaceBioDatabase, 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
"""
IJBB database implementation of bob.bio.base.database.BioDatabase interface.
It is an extension of the database interface, which directly talks to IJBB 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 IJBBBioFile(FaceBioFile):
def __init__(self, f):
super(IJBBBioFile, 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 IJBBBioFileSet(BioFileSet):
def __init__(self, template):
super(IJBBBioFileSet, self).__init__(file_set_id=template.id, files=[
IJBBBioFile(f) for f in template.files], path=template.path)
class IJBBBioDatabase(BioDatabase):
"""
IJBB 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 IJBB 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.ijbb.query import Database as LowLevelDatabase
self._db = LowLevelDatabase(
original_directory)
# call base class constructors to open a session to the database
super(IJBBBioDatabase, self).__init__(
name='ijbb',
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 [IJBBBioFile(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 [IJBBBioFileSet(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(model_id)
def original_file_names(self, files):
return [f.make_path(self.original_directory, f.f.extension, False) for f in files]
...@@ -150,10 +150,10 @@ def test_ijba(): ...@@ -150,10 +150,10 @@ def test_ijba():
database = bob.bio.base.load_resource( database = bob.bio.base.load_resource(
'ijba', 'database', preferred_package='bob.bio.face') 'ijba', 'database', preferred_package='bob.bio.face')
try: try:
check_database(database,models_depend=True, training_depends=True) check_database(database, models_depend=True, training_depends=True)
except IOError as e: except IOError as e:
raise SkipTest( raise SkipTest(
"The database could not queried; probably the db.sql3 file is missing. Here is the error: '%s'" % e) "The database could not queried. Here is the error: '%s'" % e)
try: try:
_check_annotations(database, topleft=True, limit_files=1000) _check_annotations(database, topleft=True, limit_files=1000)
except IOError as e: except IOError as e:
...@@ -357,3 +357,19 @@ def test_msu_mfsd_mod_spoof(): ...@@ -357,3 +357,19 @@ def test_msu_mfsd_mod_spoof():
raise SkipTest( raise SkipTest(
"The annotations could not be queried; probably the annotation " "The annotations could not be queried; probably the annotation "
"files are missing. Here is the error: '%s'" % e) "files are missing. Here is the error: '%s'" % e)
@db_available('ijbb')
def test_ijbb():
database = bob.bio.base.load_resource(
'ijbb', '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)
...@@ -116,6 +116,7 @@ setup( ...@@ -116,6 +116,7 @@ setup(
'frgc = bob.bio.face.config.database.frgc:database', 'frgc = bob.bio.face.config.database.frgc:database',
'gbu = bob.bio.face.config.database.gbu:database', 'gbu = bob.bio.face.config.database.gbu:database',
'ijba = bob.bio.face.config.database.ijba:database', 'ijba = bob.bio.face.config.database.ijba:database',
'ijbb = bob.bio.face.config.database.ijbb:database',
'lfw-restricted = bob.bio.face.config.database.lfw_restricted:database', 'lfw-restricted = bob.bio.face.config.database.lfw_restricted:database',
'lfw-unrestricted = bob.bio.face.config.database.lfw_unrestricted:database', 'lfw-unrestricted = bob.bio.face.config.database.lfw_unrestricted:database',
'mobio-image = bob.bio.face.config.database.mobio:mobio_image', 'mobio-image = bob.bio.face.config.database.mobio:mobio_image',
......
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