diff --git a/bob/bio/base/test/dummy/extractor.py b/bob/bio/base/test/dummy/extractor.py index eca7517ca8a46676074f93410d95b98d71757721..dbdf0946a01377dfa9db3ff483391710e20d9990 100644 --- a/bob/bio/base/test/dummy/extractor.py +++ b/bob/bio/base/test/dummy/extractor.py @@ -25,3 +25,14 @@ class DummyExtractor (Extractor): return data.astype(numpy.float).flatten() extractor = DummyExtractor() + + +class DummyExtractorMetadata (DummyExtractor): + + def __call__(self, data, metadata=None): + """Does nothing, simply converts the data type of the data, ignoring any annotation.""" + assert metadata is not None + assert self.model + return data.astype(numpy.float).flatten() + +extractor_metadata = DummyExtractorMetadata() diff --git a/bob/bio/base/test/test_scripts.py b/bob/bio/base/test/test_scripts.py index 05aa6cad343eb45055c58592d6f3457525fa5e1b..fcf369b7341ab464803ec3013e152ab2238ebd39 100644 --- a/bob/bio/base/test/test_scripts.py +++ b/bob/bio/base/test/test_scripts.py @@ -143,6 +143,25 @@ def test_verify_resources(): _verify(parameters, test_dir, 'test_resource') +def test_verify_resources_metadata(): + test_dir = tempfile.mkdtemp(prefix='bobtest_') + # define dummy parameters + parameters = [ + '-d', 'dummy', + '-p', 'dummy', + '-e', 'dummy_metadata', + '-a', 'dummy', + '--zt-norm', + '--allow-missing-files', + '-vs', 'test_resource', + '--temp-directory', test_dir, + '--result-directory', test_dir, + '--preferred-package', 'bob.bio.base' + ] + + _verify(parameters, test_dir, 'test_resource') + + def test_verify_commandline(): test_dir = tempfile.mkdtemp(prefix='bobtest_') # define dummy parameters diff --git a/bob/bio/base/tools/extractor.py b/bob/bio/base/tools/extractor.py index 281314677f7a5e8766fcbe8ee92986c91414de64..84705eac55b0cb3f607359ddefbde0c2f40fab4d 100644 --- a/bob/bio/base/tools/extractor.py +++ b/bob/bio/base/tools/extractor.py @@ -2,6 +2,7 @@ import bob.io.base import os import logging +import inspect logger = logging.getLogger("bob.bio.base") from .FileSelector import FileSelector @@ -90,6 +91,7 @@ def extract(extractor, preprocessor, groups=None, indices = None, allow_missing_ extractor.load(fs.extractor_file) data_files = fs.preprocessed_data_list(groups=groups) feature_files = fs.feature_list(groups=groups) + metadata = fs.original_data_list(groups=groups) # select a subset of indices to iterate if indices is not None: @@ -119,7 +121,10 @@ def extract(extractor, preprocessor, groups=None, indices = None, allow_missing_ # load data data = preprocessor.read_data(data_file) # extract feature - feature = extractor(data) + if "metadata" in inspect.getargspec(extractor.__call__).args: + feature = extractor(data, metadata=metadata[i]) + else: + feature = extractor(data) if feature is None: if allow_missing_files: diff --git a/setup.py b/setup.py index e93fd72f55d01a62b57200f3fb94bdc5b808e3b3..91b66c18d425c6fd5e058cf60e3f795cf3633315 100644 --- a/setup.py +++ b/setup.py @@ -99,6 +99,7 @@ setup( 'bob.bio.extractor': [ 'dummy = bob.bio.base.test.dummy.extractor:extractor', # for test purposes only + 'dummy_metadata = bob.bio.base.test.dummy.extractor:extractor_metadata', # for test purposes only 'linearize = bob.bio.base.config.extractor.linearize:extractor', ],