Skip to content
Snippets Groups Projects
Commit d22b5119 authored by Amir MOHAMMADI's avatar Amir MOHAMMADI
Browse files

make nosetests pass for now

parent 750c52cb
No related branches found
No related tags found
1 merge request!110Porting to dask pipelines
from bob.pad.face.database import BRSUPadDatabase
from bob.pad.base.pipelines.vanilla_pad import DatabaseConnector
database = DatabaseConnector(BRSUPadDatabase())
......@@ -6,7 +6,6 @@ from .celeb_a import CELEBAPadDatabase
from .maskattack import MaskAttackPadDatabase
from .casiasurf import CasiaSurfPadDatabase
from .casiafasd import CasiaFasdPadDatabase
from .brsu import BRSUPadDatabase
# gets sphinx autodoc done right - don't remove it
......@@ -34,7 +33,6 @@ __appropriate__(
MaskAttackPadDatabase,
CasiaSurfPadDatabase,
CasiaFasdPadDatabase,
BRSUPadDatabase
)
__all__ = [_ for _ in dir() if not _.startswith('_')]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from bob.pad.face.database import VideoPadFile
from bob.pad.base.database import PadDatabase
from bob.extension import rc
class BRSUPadFile(VideoPadFile):
"""
A high level implementation of the File class for the BRSU database.
Note that this does not represent a file per se, but rather a sample
that may contain more than one file.
Attributes
----------
f : :py:class:`object`
An instance of the Sample class defined in the low level db interface
of the BRSU database, in the bob.db.brsu.models.py file.
"""
def __init__(self, s):
""" Init
Parameters
----------
s : :py:class:`object`
An instance of the Sample class defined in the low level db interface
of the BRSU database, in the bob.db.brsu.models.py file.
"""
self.s = s
attack_type = str(s.attack_type)
if attack_type == '0':
attack_type = None
super(BRSUPadFile, self).__init__(
client_id=s.id,
file_id=s.id,
attack_type=attack_type,
path=s.id)
def load(self, directory=rc['bob.db.brsu.directory'], extension=None):
"""Overloaded version of the load method defined in ``VideoPadFile``.
Parameters
----------
directory : :py:class:`str`
String containing the path to the BRSU database
extension : :py:class:`str`
Not used here, since a sample contains more than one file,
possibly with different extensions
Returns
-------
dict:
image data for multiple streams stored in the dictionary.
The structure of the dictionary: ``data={"stream1_name" : numpy array, "stream2_name" : numpy array}``
"""
return self.s.load(directory)
class BRSUPadDatabase(PadDatabase):
"""High level implementation of the Database class for the BRSU database.
Attributes
----------
db : :py:class:`bob.db.brsu.Database`
the low-level database interface
"""
def __init__(self, protocol='test', original_directory=rc['bob.db.brsu.directory'], original_extension=None, **kwargs):
"""Init function
Parameters
----------
protocol : :py:class:`str`
The name of the protocol that defines the default experimental setup for this database.
original_directory : :py:class:`str`
The directory where the original data of the database are stored.
original_extension : :py:class:`str`
The file name extension of the original data.
"""
from bob.db.brsu import Database as LowLevelDatabase
self.db = LowLevelDatabase()
super(BRSUPadDatabase, self).__init__(
name='brsu',
protocol=protocol,
original_directory=original_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
def objects(self,
groups=None,
protocol='test',
purposes=None,
model_ids=None,
**kwargs):
"""Returns a list of BRSUPadFile objects, which fulfill the given restrictions.
Parameters
----------
groups : list of :py:class:`str`
The groups of which the clients should be returned.
Usually, groups are one or more elements of ('train', 'dev', 'eval')
protocol : :py:class:`str`
The protocol for which the samples should be retrieved.
purposes : :py:class:`str`
The purposes for which Sample objects should be retrieved.
Usually it is either 'real' or 'attack'
model_ids
This parameter is not supported in PAD databases yet.
Returns
-------
samples : :py:class:`BRSUPadFile`
A list of BRSUPadFile objects.
"""
lowlevel_purposes = None
if groups is not None and purposes is not None:
# for training
lowlevel_purposes = []
if 'train' in groups and 'real' in purposes:
lowlevel_purposes.append('real')
if 'train' in groups and 'attack' in purposes:
lowlevel_purposes.append('attack')
# for eval
if 'test' in groups and 'real' in purposes:
lowlevel_purposes.append('real')
if 'test' in groups and 'attack' in purposes:
lowlevel_purposes.append('attack')
if groups is None and purposes is not None:
lowlevel_purposes = []
if 'real' in purposes:
lowlevel_purposes.append('real')
if 'attack' in purposes:
lowlevel_purposes.append('attack')
samples = self.db.objects(groups=groups, purposes=lowlevel_purposes, **kwargs)
samples = [BRSUPadFile(s) for s in samples]
return samples
def annotations(self, file):
"""No annotations are provided with this DB
"""
return None
......@@ -5,19 +5,21 @@ from bob.pad.face.database import VideoPadFile
from bob.pad.base.database import PadDatabase
from bob.db.base.utils import (
check_parameters_for_validity, convert_names_to_lowlevel)
from bob.bio.video import VideoLikeContainer
class DummyPadFile(VideoPadFile):
def load(self, directory=None, extension='.pgm', frame_selector=None):
file_name = self.make_path(directory, extension)
fc = FrameContainer()
fc.add(os.path.basename(file_name), bob.io.base.load(file_name))
data = bob.io.base.load(file_name)[None, ...]
indices = [os.path.basename(file_name)]
fc = VideoLikeContainer(data, indices)
return fc
@property
def frames(self):
fc = self.load(self.original_directory)
for _, frame, _ in fc:
for frame in fc:
yield frame
@property
......
......@@ -139,23 +139,6 @@ def test_casiasurf():
% e)
@db_available('brsu')
def test_brsu():
brsu = bob.bio.base.load_resource(
'brsu',
'database',
preferred_package='bob.pad.face',
package_prefix='bob.pad.').database
try:
assert len(brsu.objects()) == 276
assert len(brsu.objects(purposes=('real',))) == 192
assert len(brsu.objects(purposes=('attack',))) == 84
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)
@db_available('casia_fasd')
def test_casia_fasd():
casia_fasd = bob.bio.base.load_resource(
......
......@@ -5,7 +5,7 @@ import numpy
padfile = Database().all_files(('train', 'dev'))[0][0]
image = padfile.load(Database().original_directory,
Database().original_extension)[0][1]
Database().original_extension)[0]
def dummy_cropper(frame, annotations=None):
......
......@@ -76,7 +76,6 @@ setup(
'maskattack = bob.pad.face.config.maskattack:database',
'casiasurf-color = bob.pad.face.config.casiasurf_color:database',
'casiasurf = bob.pad.face.config.casiasurf:database',
'brsu = bob.pad.face.config.brsu:database',
],
# registered configurations:
......
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