Source code for pyVHR.datasets.dataset

from abc import ABCMeta, abstractmethod
import os
from importlib import import_module, util

# def datasetFactory(datasetName, *args, **kwargs):


[docs]def datasetFactory(datasetName, videodataDIR, BVPdataDIR, path=None): """ This method is used for creating a new istance of a dataset Class (that innherit :py:class:`pyVHR.datasets.dataset.Dataset` ). Args: datasetName (str): name of the dataset Class. videodataDIR (str): path of the video data directory. BVPdataDIR (str): path of the ground truth BVP data directory. """ try: if path == None: moduleName = datasetName.lower() className = datasetName.upper() datasetModule = import_module( 'pyVHR.datasets.' + moduleName) classOBJ = getattr(datasetModule, className) obj = classOBJ(videodataDIR, BVPdataDIR) else: moduleName = datasetName.lower() className = datasetName.upper() relpath = str(path) + str(moduleName) + '.py' spec = util.spec_from_file_location( moduleName, relpath) mod = util.module_from_spec(spec) spec.loader.exec_module(mod) classOBJ = getattr(mod, className) obj = classOBJ(videodataDIR, BVPdataDIR) except (AttributeError, ModuleNotFoundError): raise ImportError( '{} is not part of pyVHR dataset collection!'.format(datasetName)) return obj
[docs]class Dataset(metaclass=ABCMeta): """ This is the abstract class used for creating a new Dataset Class. """ def __init__(self, videodataDIR=None, BVPdataDIR=None): """ Args: videodataDIR (str): path of the video data directory. BVPdataDIR (str): path of the ground truth BVP data directory. """ # -- load filenames self.videoFilenames = [] # list of all video filenames self.sigFilenames = [] # list of all Sig filenames self.numVideos = 0 # num of videos in the dataset self.videodataDIR = videodataDIR self.BVPdataDIR = BVPdataDIR self.loadFilenames()
[docs] def loadFilenames(self): """Load dataset file names: define vars videoFilenames and BVPFilenames.""" # -- loop on the dir struct of the dataset getting filenames for root, dirs, files in os.walk(self.videodataDIR): for f in files: filename = os.path.join(root, f) path, name = os.path.split(filename) # -- select video if filename.endswith(self.video_EXT) and (name.find(self.VIDEO_SUBSTRING) >= 0): self.videoFilenames.append(filename) # -- select signal if filename.endswith(self.SIG_EXT) and (name.find(self.SIG_SUBSTRING) >= 0): self.sigFilenames.append(filename) # -- number of videos self.numVideos = len(self.videoFilenames)
[docs] def getVideoFilename(self, videoIdx=0): """Get video file name given the progressive index.""" return self.videoFilenames[videoIdx]
[docs] def getSigFilename(self, videoIdx=0): """Get Signal file name given the progressive index.""" return self.sigFilenames[videoIdx]
[docs] @abstractmethod def readSigfile(self, filename): """ Load signal from file. Returns: a :py:class:`pyVHR.BPM.BPM.BVPsignal` object that can be used to extract BPM signal from ground truth BVP signal. """ pass