[refactoring2016] Moved the load functions to the to the high level implementations

parent a02fcfdb
Pipeline #3695 passed with stages
in 173 minutes and 55 seconds
......@@ -2,7 +2,7 @@ from .utils import *
from . import preprocessor
from . import extractor
from . import algorithm
from . import database
from . import test
def get_config():
......
from .database import VideoBioFile
from .mobio import MobioBioDatabase
from .youtube import YoutubeBioDatabase
# gets sphinx autodoc done right - don't remove it
__all__ = [_ for _ in dir() if not _.startswith('_')]
......@@ -8,6 +8,7 @@
"""
from bob.bio.base.database.file import BioFile
from bob.bio.video.utils.FrameSelector import FrameSelector
class VideoBioFile(BioFile):
......@@ -20,4 +21,8 @@ class VideoBioFile(BioFile):
self.__f = f
def load(self, directory=None, extension='.avi'):
return FrameSelector()(self.make_path(directory, extension))
......@@ -12,6 +12,21 @@
from .database import VideoBioFile
from bob.bio.base.database import ZTBioDatabase, BioFile
from bob.bio.video.utils import FrameContainer
import os
import bob.io.base
class YoutubeBioFile(VideoBioFile):
def load(self, directory=None, extension='.jpg'):
files = os.listdir(self.make_path(directory, ''))
fc = FrameContainer()
for f in files:
if extension == os.path.splitext(f)[1]:
file_name = os.path.join(self.make_path(directory, ''), f)
fc.add(os.path.basename(file_name), bob.io.base.load(file_name))
return fc
class YoutubeBioDatabase(ZTBioDatabase):
......@@ -38,12 +53,12 @@ class YoutubeBioDatabase(ZTBioDatabase):
def objects(self, groups=None, protocol=None, purposes=None, model_ids=None, **kwargs):
retval = self.__db.objects(groups=groups, protocol=protocol, purposes=purposes, model_ids=model_ids, **kwargs)
return [VideoBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval]
return [YoutubeBioFile(BioFile(client_id=f.client_id, path=f.path, file_id=f.id)) for f in retval]
def tobjects(self, groups=None, protocol=None, model_ids=None, **kwargs):
retval = self.__db.tobjects(groups=groups, protocol=protocol, model_ids=model_ids, **kwargs)
return [VideoBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval]
return [YoutubeBioFile(BioFile(client_id=f.client_id, path=f.path, file_id=f.id)) for f in retval]
def zobjects(self, groups=None, protocol=None, **kwargs):
retval = self.__db.zobjects(groups=groups, protocol=protocol, **kwargs)
return [VideoBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval]
return [YoutubeBioFile(BioFile(client_id=f.client_id, path=f.path, file_id=f.id)) for f in retval]
This diff is collapsed.
from bob.bio.base.database import ZTBioDatabase
from bob.bio.base.test.utils import atnt_database_directory
from bob.bio.base.database.file import BioFile
from bob.bio.video.database import VideoBioFile
from bob.bio.video.utils import FrameContainer
import bob.io.base
import os
class DummyBioFile(VideoBioFile):
def load(self, directory=None, extension='.avi'):
file_name = self.make_path(directory, extension)
fc = FrameContainer()
fc.add(os.path.basename(file_name), bob.io.base.load(file_name))
return fc
class DummyDatabase(ZTBioDatabase):
......@@ -17,11 +30,14 @@ class DummyDatabase(ZTBioDatabase):
import bob.db.atnt
self.__db = bob.db.atnt.Database()
def _make_bio(self, files):
return [DummyBioFile(BioFile(client_id=f.client_id, path=f.path, file_id=f.id)) for f in files]
def model_ids_with_protocol(self, groups=None, protocol=None, **kwargs):
return self.__db.model_ids(groups, protocol)
def objects(self, groups=None, protocol=None, purposes=None, model_ids=None, **kwargs):
return self.__db.objects(model_ids, groups, purposes, protocol, **kwargs)
return self._make_bio(self.__db.objects(model_ids, groups, purposes, protocol, **kwargs))
def tobjects(self, groups=None, protocol=None, model_ids=None, **kwargs):
return []
......@@ -39,8 +55,9 @@ class DummyDatabase(ZTBioDatabase):
return self.probe_files(None, group)
# override all_files to return a one-element lists of files
def all_files(self, groups):
return [[n] for n in super(DummyDatabase, self).all_files(groups)]
#def all_files(self, groups):
#return [[n] for n in super(DummyDatabase, self).all_files(groups)]
#return [[n] for n in super(DummyDatabase, self).all_files(groups)]
def file_names(self, files, directory, extension):
if isinstance(files[0], list):
......
......@@ -9,70 +9,88 @@ import bob.io.video
import bob.bio.base
import bob.bio.video
import bob.db.base
import pkg_resources
from bob.bio.video.test.dummy.database import DummyBioFile
regenerate_refs = False
def test_annotations():
# use annotations to grep
image_files = [pkg_resources.resource_filename("bob.bio.face.test", "data/testimage.jpg")]
annotations = {os.path.basename(image_files[0]) : bob.db.base.read_annotation_file(pkg_resources.resource_filename("bob.bio.face.test", "data/testimage.pos"), 'named')}
original_path = pkg_resources.resource_filename("bob.bio.face.test", "")
image_files = DummyBioFile(bob.bio.base.database.BioFile(client_id=1, file_id=1, path="data/testimage"))
# use annotations to grep
annotations = {os.path.basename(image_files.make_path(original_path, ".jpg")): bob.db.base.read_annotation_file(
pkg_resources.resource_filename("bob.bio.face.test", "data/testimage.pos"), 'named')}
# video preprocessor using a face crop preprocessor
frame_selector = bob.bio.video.FrameSelector(selection_style="all")
preprocessor = bob.bio.video.preprocessor.Wrapper('face-crop-eyes', frame_selector, compressed_io=False)
# video preprocessor using a face crop preprocessor
frame_selector = bob.bio.video.FrameSelector(selection_style="all")
preprocessor = bob.bio.video.preprocessor.Wrapper('face-crop-eyes', frame_selector, compressed_io=False)
# read original data
original = preprocessor.read_original_data(image_files)
assert isinstance(original, bob.bio.video.FrameContainer)
assert len(original) == 1
assert original[0][0] == os.path.basename(image_files[0])
# read original data
original = preprocessor.read_original_data(image_files, original_path, ".jpg")
# preprocess data including annotations
preprocessed = preprocessor(original, annotations)
assert isinstance(preprocessed, bob.bio.video.FrameContainer)
assert len(preprocessed) == 1
assert preprocessed[0][0] == os.path.basename(image_files[0])
assert preprocessed[0][2] is None
assert numpy.allclose(preprocessed[0][1], bob.io.base.load(pkg_resources.resource_filename("bob.bio.face.test", "data/cropped.hdf5")))
assert isinstance(original, bob.bio.video.FrameContainer)
assert len(original) == 1
assert original[0][0] == os.path.basename(image_files.make_path(original_path, ".jpg"))
# preprocess data including annotations
preprocessed = preprocessor(original, annotations)
assert isinstance(preprocessed, bob.bio.video.FrameContainer)
assert len(preprocessed) == 1
assert preprocessed[0][0] == os.path.basename(image_files.make_path(original_path, ".jpg"))
assert preprocessed[0][2] is None
assert numpy.allclose(preprocessed[0][1],
bob.io.base.load(pkg_resources.resource_filename("bob.bio.face.test", "data/cropped.hdf5")))
def test_detect():
# load test video
video_file = pkg_resources.resource_filename("bob.bio.video.test", "data/testvideo.avi")
frame_selector = bob.bio.video.FrameSelector(max_number_of_frames=3, selection_style="spread")
preprocessor = bob.bio.video.preprocessor.Wrapper('face-detect', frame_selector, compressed_io=False)
video = preprocessor.read_original_data(video_file)
assert isinstance(video, bob.bio.video.FrameContainer)
def read_original_data(video_object, original_path, original_extension):
return frame_selector(video_object.make_path(original_path, original_extension))
# load test video
original_path = pkg_resources.resource_filename("bob.bio.video.test", "")
video_object = bob.bio.video.database.VideoBioFile(bob.bio.base.database.BioFile(
client_id=1, file_id=1, path="data/testvideo"))
preprocessed_video = preprocessor(video)
assert isinstance(preprocessed_video, bob.bio.video.FrameContainer)
frame_selector = bob.bio.video.FrameSelector(max_number_of_frames=3, selection_style="spread")
preprocessor = bob.bio.video.preprocessor.Wrapper('face-detect', frame_selector, compressed_io=False,
read_original_data=read_original_data)
reference_file = pkg_resources.resource_filename("bob.bio.video.test", "data/preprocessed.hdf5")
if regenerate_refs:
preprocessed_video.save(bob.io.base.HDF5File(reference_file, 'w'))
reference_data = bob.bio.video.FrameContainer(bob.io.base.HDF5File(reference_file, 'r'))
video = preprocessor.read_original_data(video_object, original_path,".avi")
assert isinstance(video, bob.bio.video.FrameContainer)
assert preprocessed_video.is_similar_to(reference_data)
preprocessed_video = preprocessor(video)
assert isinstance(preprocessed_video, bob.bio.video.FrameContainer)
reference_file = pkg_resources.resource_filename("bob.bio.video.test", "data/preprocessed.hdf5")
if regenerate_refs:
preprocessed_video.save(bob.io.base.HDF5File(reference_file, 'w'))
reference_data = bob.bio.video.FrameContainer(bob.io.base.HDF5File(reference_file, 'r'))
assert preprocessed_video.is_similar_to(reference_data)
def test_flandmark():
video_file = pkg_resources.resource_filename("bob.bio.video.test", "data/testvideo.avi")
frame_selector = bob.bio.video.FrameSelector(max_number_of_frames=3, selection_style="spread")
def read_original_data(video_object, original_path, original_extension):
return frame_selector(video_object.make_path(original_path, original_extension))
original_path = pkg_resources.resource_filename("bob.bio.video.test", "")
video_object = bob.bio.video.database.VideoBioFile(bob.bio.base.database.BioFile(
client_id=1, file_id=1, path="data/testvideo"))
frame_selector = bob.bio.video.FrameSelector(max_number_of_frames=3, selection_style="spread")
preprocessor = bob.bio.video.preprocessor.Wrapper('landmark-detect', frame_selector, compressed_io=False)
video = preprocessor.read_original_data(video_file)
assert isinstance(video, bob.bio.video.FrameContainer)
preprocessor = bob.bio.video.preprocessor.Wrapper('landmark-detect', frame_selector, compressed_io=False,
read_original_data=read_original_data)
video = preprocessor.read_original_data(video_object, original_path, ".avi")
assert isinstance(video, bob.bio.video.FrameContainer)
preprocessed_video = preprocessor(video)
assert isinstance(preprocessed_video, bob.bio.video.FrameContainer)
preprocessed_video = preprocessor(video)
assert isinstance(preprocessed_video, bob.bio.video.FrameContainer)
reference_file = pkg_resources.resource_filename("bob.bio.video.test", "data/preprocessed-flandmark.hdf5")
if regenerate_refs:
preprocessed_video.save(bob.io.base.HDF5File(reference_file, 'w'))
reference_data = bob.bio.video.FrameContainer(bob.io.base.HDF5File(reference_file, 'r'))
reference_file = pkg_resources.resource_filename("bob.bio.video.test", "data/preprocessed-flandmark.hdf5")
if regenerate_refs:
preprocessed_video.save(bob.io.base.HDF5File(reference_file, 'w'))
reference_data = bob.bio.video.FrameContainer(bob.io.base.HDF5File(reference_file, 'r'))
assert preprocessed_video.is_similar_to(reference_data)
assert preprocessed_video.is_similar_to(reference_data)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment