Source code for facereclib.preprocessing.Preprocessor

#!/usr/bin/env python
# vim: set fileencoding=utf-8 :
# @author: Manuel Guenther <Manuel.Guenther@idiap.ch>
# @date: Tue Oct  2 12:12:39 CEST 2012
#
# Copyright (C) 2011-2012 Idiap Research Institute, Martigny, Switzerland
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

import bob.io.base
import bob.io.image

import os

from .. import utils

[docs]class Preprocessor: """This is the base class for all preprocessors. It defines the minimum requirements for all derived proprocessor classes. """ def __init__(self, **kwargs): # Each class needs to have a constructor taking # all the parameters that are required for the preprocessing as arguments self._kwargs = kwargs pass # The call function (i.e. the operator() in C++ terms) def __call__(self, image, annotations): """This is the call function that you have to overwrite in the derived class. The parameters that this function will receive are: image The image that needs preprocessing annotations: The annotations (if any), as a dictionary from annotation type to the position. Usually, at least two annotations are given, namely: {'reye':(re_y,re_x), 'leye':(le_y,le_x)} """ raise NotImplementedError("Please overwrite this function in your derived class") def __str__(self): """This function returns a string containing all parameters of this class (and its derived class).""" return "%s(%s)" % (str(self.__class__), ", ".join(["%s=%s" % (key, value) for key,value in self._kwargs.items() if value is not None])) ############################################################ ### Special functions that might be overwritten on need ############################################################
[docs] def read_original_data(self, original_file_name): """Reads the *original* data (usually an image) from file. In this base class implementation, it uses ``bob.io.base.load`` to do that. If you have different format, please overwrite this function. """ return bob.io.base.load(original_file_name)
[docs] def save_data(self, data, data_file): """Saves the given *preprocessed* data to a file with the given name. In this base class implementation: - If the given data has a ``save`` attribute, it calls ``data.save(bob.io.base.HDF5File(data_file), 'w')``. In this case, the given data_file might be either a file name or a bob.io.base.HDF5File. - Otherwise, it uses ``bob.io.base.save`` to do that. If you have a different format (e.g. not images), please overwrite this function. """ utils.save(data, data_file)
[docs] def read_data(self, data_file): """Reads the *preprocessed* data from file. In this base class implementation, it uses ``bob.io.base.load`` to do that. If you have different format, please overwrite this function. """ return utils.load(data_file)
[docs] def quality(self): """Returns the quality of the last preprocessed image. This quality term is application dependent. By default, None is returned.""" return None