From f71b04c5597b98cd7ddfec29dad0bbe3d5ec2456 Mon Sep 17 00:00:00 2001 From: Manuel Gunther <siebenkopf@googlemail.com> Date: Wed, 11 May 2016 16:41:59 -0600 Subject: [PATCH] Implemented a dummy preprocessor that simply returns the file name --- bob/bio/base/config/preprocessor/filename.py | 3 + bob/bio/base/preprocessor/Filename.py | 105 +++++++++++++++++++ bob/bio/base/preprocessor/__init__.py | 1 + bob/bio/base/test/test_preprocessor.py | 21 ++++ doc/implemented.rst | 1 + setup.py | 1 + 6 files changed, 132 insertions(+) create mode 100644 bob/bio/base/config/preprocessor/filename.py create mode 100644 bob/bio/base/preprocessor/Filename.py create mode 100644 bob/bio/base/test/test_preprocessor.py diff --git a/bob/bio/base/config/preprocessor/filename.py b/bob/bio/base/config/preprocessor/filename.py new file mode 100644 index 00000000..e5d8b4d1 --- /dev/null +++ b/bob/bio/base/config/preprocessor/filename.py @@ -0,0 +1,3 @@ +import bob.bio.base + +preprocessor = bob.bio.base.preprocessor.Filename() diff --git a/bob/bio/base/preprocessor/Filename.py b/bob/bio/base/preprocessor/Filename.py new file mode 100644 index 00000000..8d2f8ba0 --- /dev/null +++ b/bob/bio/base/preprocessor/Filename.py @@ -0,0 +1,105 @@ +# @date Wed May 11 12:39:37 MDT 2016 +# @author Manuel Gunther <siebenkopf@googlemail.com> +# +# Copyright (c) 2016, Regents of the University of Colorado on behalf of the University of Colorado Colorado Springs. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import bob.io.base + +import os + +from .Preprocessor import Preprocessor + +class Filename (Preprocessor): + """This preprocessor is simply passing over the file name, in order to be used in an extractor that loads the data from file. + + The file name that will be returned by the :py:meth:`read_data` function will contain the path of the :py:class:`bob.db.verification.utils.File`, but it might contain more paths (such as the ``--preprocessed-directory`` passed on command line). + """ + + def __init__(self): + pass + + + # The call function (i.e. the operator() in C++ terms) + def __call__(self, data, annotations = None): + """__call__(data, annotations) -> data + + This function appears to do something, but it simply returns ``1``, which is used nowhere. + We could also return ``None``, but this might trigger warnings in the calling function. + + **Parameters:** + + ``data`` : ``None`` + The file name returned by :py:meth:`read_original_data`. + + ``annotations`` : any + ignored. + + **Returns:** + + ``data`` : int + 1 throughout + """ + return 1 + + + ############################################################ + ### Special functions that might be overwritten on need + ############################################################ + + def read_original_data(self, original_file_name): + """read_original_data(original_file_name) -> data + + This function does **not** read the original image.. + + **Parameters:** + + ``original_file_name`` : any + ignored + + **Returns:** + + ``data`` : ``None`` + throughout. + """ + pass + + + def write_data(self, data, data_file): + """Does **not** write any data. + + ``data`` : any + ignored. + + ``data_file`` : any + ignored. + """ + pass + + + def read_data(self, data_file): + """read_data(data_file) -> data + + Returns the name of the data file without its filename extension. + + **Parameters:** + + ``data_file`` : str + The name of the preprocessed data file. + + **Returns:** + + ``data`` : str + The preprocessed data read from file. + """ + return os.path.splitext(data_file)[0] diff --git a/bob/bio/base/preprocessor/__init__.py b/bob/bio/base/preprocessor/__init__.py index 11d00588..37dd71f9 100644 --- a/bob/bio/base/preprocessor/__init__.py +++ b/bob/bio/base/preprocessor/__init__.py @@ -1,4 +1,5 @@ from .Preprocessor import Preprocessor +from .Filename import Filename # gets sphinx autodoc done right - don't remove it __all__ = [_ for _ in dir() if not _.startswith('_')] diff --git a/bob/bio/base/test/test_preprocessor.py b/bob/bio/base/test/test_preprocessor.py new file mode 100644 index 00000000..bd78b60d --- /dev/null +++ b/bob/bio/base/test/test_preprocessor.py @@ -0,0 +1,21 @@ +import bob.bio.base + +from . import utils + +def test_filename(): + # load extractor + preprocessor = bob.bio.base.load_resource("filename", "preprocessor", preferred_package = 'bob.bio.base') + assert isinstance(preprocessor, bob.bio.base.preprocessor.Preprocessor) + assert isinstance(preprocessor, bob.bio.base.preprocessor.Filename) + + # try to load the original image + assert preprocessor.read_original_data("/any/path") is None + + # try to process + assert preprocessor(None, None) == 1 + + # try to write + preprocessor.write_data(None, "/any/path") + + # read a file + assert preprocessor.read_data("/any/file.name") == "/any/file" diff --git a/doc/implemented.rst b/doc/implemented.rst index 6737d580..e753ab0b 100644 --- a/doc/implemented.rst +++ b/doc/implemented.rst @@ -23,6 +23,7 @@ Implementations ~~~~~~~~~~~~~~~ .. autosummary:: + bob.bio.base.preprocessor.Filename bob.bio.base.extractor.Linearize bob.bio.base.algorithm.Distance bob.bio.base.algorithm.PCA diff --git a/setup.py b/setup.py index 5d0650d7..92304c24 100644 --- a/setup.py +++ b/setup.py @@ -120,6 +120,7 @@ setup( 'bob.bio.preprocessor': [ 'dummy = bob.bio.base.test.dummy.preprocessor:preprocessor', # for test purposes only + 'filename = bob.bio.base.config.preprocessor.filename:preprocessor', # for test purposes only ], 'bob.bio.extractor': [ -- GitLab