def __init__(self, name="AFEW"): super(AFEWImageSequenceDataset, self).__init__(name) self.absolute_base_directory = locate_data_path(self.base_dir) self.absolute_picasa_boxes_base_directory = locate_data_path( self.picasa_boxes_base_dir) self.imagesequences = [] self.labels = [] self.trainIndexes = [] self.validIndexes = [] # For each emotion subfolder idx = 0 directories = os.listdir(self.absolute_base_directory) directories.sort() for emotionName in directories: # Check if it is a emotion subfolder abs_emotionDir = os.path.join(self.absolute_base_directory, emotionName) rel_emotionDir = os.path.join(self.base_dir, emotionName) if not os.path.isdir( abs_emotionDir ) or emotionName not in self.emotionNames.keys(): continue # abs_picasa_bbox_dir = os.path.join(self.absolute_picasa_boxes_base_directory, emotionName) # rel_picasa_bbox_dir = os.path.join(self.picasa_boxes_base_dir, emotionName) # Find all images fileNames = glob.glob(os.path.join(abs_emotionDir, "*.png")) # Find all unique sequences uniqueSequence = list( set([name.split("-")[0] for name in fileNames])) uniqueSequence.sort() # For each unique sequence for sequence in uniqueSequence: # Load the Image Sequence object seq = AFEWImageSequence("AFEW", rel_emotionDir, "{0}-*.png".format(sequence), self.emotionNames[emotionName]) seq.set_picasa_path_substitutions( { self.base_dir: self.picasa_boxes_base_dir, '-': '_', '.png': '.txt', '.jpg': '.txt', }, csv_delimiter=' ') self.imagesequences.append(seq) # Save label self.labels.append(self.emotionNames[emotionName]) # Save if in train or valid self.trainIndexes.append(idx) idx += 1 return
def __init__(self, name="AFEW"): super(AFEWImageSequenceDataset,self).__init__(name) self.absolute_base_directory = locate_data_path(self.base_dir) self.absolute_picasa_boxes_base_directory = locate_data_path( self.picasa_boxes_base_dir) self.imagesequences = [] self.labels = [] self.trainIndexes = [] self.validIndexes = [] # For each emotion subfolder idx = 0 directories = os.listdir(self.absolute_base_directory) directories.sort() for emotionName in directories: # Check if it is a emotion subfolder abs_emotionDir = os.path.join(self.absolute_base_directory, emotionName) rel_emotionDir = os.path.join(self.base_dir, emotionName) if not os.path.isdir(abs_emotionDir) or emotionName not in self.emotionNames.keys(): continue # abs_picasa_bbox_dir = os.path.join(self.absolute_picasa_boxes_base_directory, emotionName) # rel_picasa_bbox_dir = os.path.join(self.picasa_boxes_base_dir, emotionName) # Find all images fileNames = glob.glob(os.path.join(abs_emotionDir, "*.png")) # Find all unique sequences uniqueSequence = list(set([name.split("-")[0] for name in fileNames])) uniqueSequence.sort() # For each unique sequence for sequence in uniqueSequence: # Load the Image Sequence object seq = AFEWImageSequence("AFEW", rel_emotionDir, "{0}-*.png".format(sequence), self.emotionNames[emotionName]) seq.set_picasa_path_substitutions( {self.base_dir:self.picasa_boxes_base_dir, '-':'_', '.png':'.txt', '.jpg':'.txt', }, csv_delimiter=' ') self.imagesequences.append(seq) # Save label self.labels.append(self.emotionNames[emotionName]) # Save if in train or valid self.trainIndexes.append(idx) idx += 1 return
def __init__(self, dataset_name, relative_base_directory=None): """ Initilizes a dataset with the given name, and whose constituent files are located in the specified directory. This directory is specified only relative to some standard dataset root location (found with locate_data_path ) """ self.dataset_name = dataset_name if relative_base_directory is not None: self.relative_base_directory = relative_base_directory self.absolute_base_directory = locate_data_path(relative_base_directory)
def __init__(self): super(TorontoFaceDataset, self).__init__("TFD", "faces/TFD/") # Load original 48x48 images tfd_48x48 = sio.loadmat(os.path.join(self.absolute_base_directory, "TFD_48x48.mat")) self.images = tfd_48x48["images"] self.labels = tfd_48x48['labs_ex'] self.folds = tfd_48x48['folds'] # Load mapping file to original dataset self.mapping = sio.loadmat(locate_data_path("faces/TFD_extra/TFD_info.mat")) self.mapping = [x[0].encode('ascii', 'ignore') for x in self.mapping["tfd_info"]["imfiles"][0, 0].flatten()] self.knownDataset = {}
def __init__(self, dataset_name, relative_base_directory=None): """ Initilizes a dataset with the given name, and whose constituent files are located in the specified directory. This directory is specified only relative to some standard dataset root location (found with locate_data_path ) """ self.dataset_name = dataset_name if relative_base_directory is not None: self.relative_base_directory = relative_base_directory self.absolute_base_directory = locate_data_path( relative_base_directory)
def __init__(self): super(TorontoFaceDataset, self).__init__("TFD", "faces/TFD/") # Load original 48x48 images tfd_48x48 = sio.loadmat( os.path.join(self.absolute_base_directory, "TFD_48x48.mat")) self.images = tfd_48x48["images"] self.labels = tfd_48x48['labs_ex'] self.folds = tfd_48x48['folds'] # Load mapping file to original dataset self.mapping = sio.loadmat( locate_data_path("faces/TFD_extra/TFD_info.mat")) self.mapping = [ x[0].encode('ascii', 'ignore') for x in self.mapping["tfd_info"]["imfiles"][0, 0].flatten() ] self.knownDataset = {}
def __init__(self, preload_facetubes=False): """ If preload_facetubes is True, all facetubes will be loaded when the dataset is built, which takes around 1.2 GB. """ super(AFEW2ImageSequenceDataset,self).__init__("AFEW2") self.absolute_base_directory = locate_data_path(self.base_dir) self.absolute_picasa_boxes_base_directory = locate_data_path( self.picasa_boxes_base_dir) self.face_tubes_base_directory = locate_data_path( self.face_tubes_base_dir) self.preload_facetubes = preload_facetubes self.imagesequences = [] self.labels = [] self.seq_info = [] self.trainIndexes = [] self.validIndexes = [] # For each split (Train or Val) idx = 0 splits = (("Train", self.trainIndexes), ("Val", self.validIndexes)) for split_name, split_index in splits: #print 'processing %s' % split_name for emo_name in sorted(self.emotionNames.keys()): #print ' %s' % emo_name # Directory containing the images for all clips of that # emotion in that split abs_img_dir = os.path.join(self.absolute_base_directory, split_name, emo_name) rel_img_dir = os.path.join(self.base_dir, split_name, emo_name) #print 'abs_img_dir:', abs_img_dir if not os.path.isdir(abs_img_dir): continue # Directory containing the picasa bounding boxes for clips # of that emotion in that split picasa_bbox_dir = os.path.join( self.absolute_picasa_boxes_base_directory, split_name, emo_name) # Find all image names img_names = glob.glob(os.path.join(abs_img_dir, '*.png')) #print '%s img_names' % len(img_names) # Find all clips (sequences) unique_seq = sorted(set([img.split('-')[0] for img in img_names])) #print '%s unique_seq' % len(unique_seq) # For each clip for seq in unique_seq: # Load the Image Sequence object # pdb.set_trace() im_seq = afew.AFEWImageSequence("AFEW2", rel_img_dir, "{0}-*.png".format(seq), self.emotionNames[emo_name]) im_seq.set_picasa_path_substitutions( {self.base_dir:self.picasa_boxes_base_dir, '.png':'.txt', '.jpg':'.txt', }, csv_delimiter=',') im_seq.set_ramanan_path_substitutions( { 'EmotiW/images/Train/':'EmotiW/ramananExtract/matExtractTrain/', 'EmotiW/images/Val/':'EmotiW/ramananExtract/matExtractVal/', 'Angry/':'1_', 'Disgust/':'2_', 'Fear/':'3_', 'Happy/':'4_', 'Neutral/':'5_', 'Sad/':'6_', 'Surprise/':'7_', '.jpg':'.mat', '.png':'.mat' } ) self.imagesequences.append(im_seq) # Save (split, emotion, sequence ID) of sequence seq_id = os.path.basename(seq) self.seq_info.append((split_name, emo_name, seq_id)) # If needed, load facetubes if self.preload_facetubes: self.facetubes.append(self.load_facetubes( split_name, emo_name, seq_id)) # Save label self.labels.append(self.emotionNames[emo_name]) # Save split split_index.append(idx) idx += 1
def __init__(self, preload_facetubes=False, preproc=[], size=(96, 96)): """ If preload_facetubes is True, all facetubes will be loaded when the data set is built. """ self.face_tubes_base_dir = self.face_tubes_base_dir%(size[0], size[1]) self.facetubes_to_filter = None for opt in preproc: if opt == "smooth": # Use the bounding-boxes smoothed version of the face tubes. self.face_tubes_base_dir = ("faces/new_clips/smooth_picasa_face_tubes_%s_%s" "/numpy_arr_concatenated")%(size[0], size[1]) self.face_tubes_boxes_base_dir = ("faces/new_clips/smooth_picasa_face_tubes_%s_%s" "/picasa_tubes_pickles")%(size[0], size[1]) if opt == "remove_background_faces": # Remove background faces as many as possible from the dataset. # Path to the dictionary giving for each dataset, the list of # face tubes corresponding to background faces/objects. abs_dir = locate_data_path("faces/new_clips") filename = os.path.join(abs_dir, "background_info.pkl") try: f = open(filename, 'rb') self.facetubes_to_filter = cPickle.load(f) f.close() except IOError as e: print e super(afew.AFEWImageSequenceDataset, self).__init__("NewClips") self.absolute_base_directory = locate_data_path(self.base_dir) self.absolute_picasa_boxes_base_directory = locate_data_path( self.picasa_boxes_base_dir) self.face_tubes_base_directory = locate_data_path( self.face_tubes_base_dir) self.face_tubes_boxes_base_directory = locate_data_path( self.face_tubes_boxes_base_dir) self.emodict_base_directory = locate_data_path( self.emodict_dir) self.preload_facetubes = preload_facetubes self.preproc = preproc self.size = size self.imagesequences = [] self.labels = [] self.seq_info = [] self.trainIndexes = [] self.validIndexes = [] self.emo2numDict = {} self.num2emoDict = {} # Dictionary that gives a mapping from emotion name to clip id. file = open(os.path.join(self.emodict_base_directory, "newFilenameTranslate.txt"), 'r') line = file.readline() while line != '': if line[0] != '=': ln = line.split(':') emo = ln[0].strip() num = ln[1].strip().split(' ')[0] self.emo2numDict[emo] = num self.num2emoDict[num] = emo line = file.readline() # No validation split for this dataset # Find all clips to keep (not marked "REJECT" during labeling) labels_file = os.path.join(self.absolute_base_directory, 'labels.txt') f = open(labels_file, 'r') clips_and_targets = [(clip_name[:-4], target) for clip_name, target in [ l.split() for l in f.readlines()] if target != 'REJECT'] idx = 0 for clip_name, target in clips_and_targets: if clip_name in self.seq_info: # Due to a mistake, some clips have been labeled twice, # so the same clip_name appears more than once in the list. # The simplest solution is to only use the first instance. continue #abs_img_dir = os.path.join(self.absolute_base_directory, # clip_name) rel_img_dir = os.path.join(self.base_dir, clip_name) im_seq = afew.AFEWImageSequence( "NewClips", rel_img_dir, '*.png', self.emotionNames[target]) im_seq.set_picasa_path_substitutions( {self.base_dir: self.picasa_boxes_base_dir, '.png': '.txt'}, csv_delimiter=',') #im_seq.set_ramanan_path_substitutions( # # ??? # ) self.imagesequences.append(im_seq) # Save clip_name of sequence self.seq_info.append(clip_name) # If needed, load facetubes if self.preload_facetubes: self.facetubes.append(self.load_facetubes(clip_name)) # Save label self.labels.append(self.emotionNames[target]) # Save split self.trainIndexes.append(idx) idx += 1
def __init__(self, preload_facetubes=False, preproc=[], size=(96, 96)): """ If preload_facetubes is True, all facetubes will be loaded when the dataset is built, which takes around 1.2 GB. """ self.face_tubes_base_dir = self.face_tubes_base_dir % (size[0], size[1]) self.facetubes_to_filter = None for opt in preproc: if opt == "smooth": # Smoothed face tubes directory. self.face_tubes_base_dir = ( "faces/EmotiW/smooth_picasa_face_tubes_%s_%s" "/numpy_arr/concatenate") % (size[0], size[1]) # Smoothed bounding boxes directory. self.face_tubes_boxes_base_dir = ( "faces/EmotiW/" "smooth_picasa_face_tubes_%s_%s/picasa_tubes_pickles") % ( size[0], size[1]) if opt == "remove_background_faces": # Remove background faces as many as possible from the dataset. # Path to the dictionary giving for each dataset, the list of # face tubes corresponding to background faces/objects. abs_dir = locate_data_path("faces/EmotiW") filename = os.path.join(abs_dir, "background_faces_info_v2.pkl") try: # Retrieve the list of background faces (clip_id, facetube_id) # for the given dataset that will be filtered out. f = open(filename, 'rb') info = cPickle.load(f) f.close() self.facetubes_to_filter = info except IOError as e: print e super(afew.AFEWImageSequenceDataset, self).__init__("AFEW2") self.absolute_base_directory = locate_data_path(self.base_dir) self.absolute_picasa_boxes_base_directory = locate_data_path( self.picasa_boxes_base_dir) self.face_tubes_base_directory = locate_data_path( self.face_tubes_base_dir) self.absolute_face_tubes_boxes_base_directory = locate_data_path( self.face_tubes_boxes_base_dir) self.preload_facetubes = preload_facetubes self.preproc = preproc self.size = size self.imagesequences = [] self.labels = [] self.seq_info = [] self.trainIndexes = [] self.validIndexes = [] # For each split (Train or Val) idx = 0 splits = (("Train", self.trainIndexes), ("Val", self.validIndexes)) seqnum = 0 for split_name, split_index in splits: #print 'processing %s' % split_name for emo_name in sorted(self.emotionNames.keys()): #print ' %s' % emo_name # Directory containing the images for all clips of that # emotion in that split abs_img_dir = os.path.join(self.absolute_base_directory, split_name, emo_name) rel_img_dir = os.path.join(self.base_dir, split_name, emo_name) #print 'abs_img_dir:', abs_img_dir if not os.path.isdir(abs_img_dir): continue # Directory containing the picasa bounding boxes for clips # of that emotion in that split picasa_bbox_dir = os.path.join( self.absolute_picasa_boxes_base_directory, split_name, emo_name) # Find all image names img_names = glob.glob(os.path.join(abs_img_dir, '*.png')) #print '%s img_names' % len(img_names) # Find all clips (sequences) unique_seq = sorted( set([img.split('-')[0] for img in img_names])) #print '%s unique_seq' % len(unique_seq) # For each clip for seq in unique_seq: # Load the Image Sequence object # pdb.set_trace() im_seq = afew.AFEWImageSequence( "AFEW2_%d" % seqnum, rel_img_dir, "{0}-*.png".format(seq), self.emotionNames[emo_name]) im_seq.cache_directory = os.path.join( self.absolute_base_directory, "cache_dir/seq_%04d" % seqnum) im_seq.set_picasa_path_substitutions( { self.base_dir: self.picasa_boxes_base_dir, '.png': '.txt', '.jpg': '.txt', }, csv_delimiter=',') im_seq.set_ramanan_path_substitutions({ 'EmotiW/images/Train/': 'EmotiW/ramananExtract/matExtractTrain/', 'EmotiW/images/Val/': 'EmotiW/ramananExtract/matExtractVal/', 'Angry/': '1_', 'Disgust/': '2_', 'Fear/': '3_', 'Happy/': '4_', 'Neutral/': '5_', 'Sad/': '6_', 'Surprise/': '7_', '.jpg': '.mat', '.png': '.mat' }) self.imagesequences.append(im_seq) # Save (split, emotion, sequence ID) of sequence seq_id = os.path.basename(seq) self.seq_info.append((split_name, emo_name, seq_id)) # If needed, load facetubes if self.preload_facetubes: self.facetubes.append( self.load_facetubes(split_name, emo_name, seq_id)) # Save label self.labels.append(self.emotionNames[emo_name]) # Save split split_index.append(idx) idx += 1 seqnum += 1
def __init__(self, preload_facetubes=False, preproc=[], size=(96, 96)): """ If preload_facetubes is True, all facetubes will be loaded when the dataset is built. """ self.face_tubes_base_dir = self.face_tubes_base_dir%(size[0], size[1]) self.facetubes_to_filter = None for opt in preproc: if opt == "smooth": # Use the bounding-boxes smoothed version of the face tubes. self.face_tubes_base_dir = ("faces/EmotiWTest/smooth_picasa_face_tubes_%s_%s" "/v2/numpy_arr_concatenated")%(size[0], size[1]) self.face_tubes_boxes_base_dir = ("faces/EmotiWTest/smooth_picasa_face_tubes_%s_%s" "/picasa_tubes_pickles")%(size[0], size[1]) if opt == "remove_background_faces": # Remove background faces as many as possible from the dataset. # Path to the dictionary giving for each dataset, the list of # face tubes corresponding to background faces/objects. abs_dir = locate_data_path("faces/EmotiWTest") filename = os.path.join(abs_dir, "test_background_info.txt") try: f = open(filename) lines = f.readlines() f.close() self.facetubes_to_filter = [] for line in lines: self.facetubes_to_filter.append(line.strip()) except IOError as e: print e super(afew.AFEWImageSequenceDataset, self).__init__("AFEW2Test") self.absolute_base_directory = locate_data_path(self.base_dir) self.absolute_picasa_boxes_base_directory = locate_data_path( self.picasa_boxes_base_dir) self.face_tubes_base_directory = locate_data_path( self.face_tubes_base_dir) self.face_tubes_boxes_base_directory = locate_data_path( self.face_tubes_boxes_base_dir) self.preload_facetubes = preload_facetubes self.preproc = preproc self.size = size self.imagesequences = [] self.labels = [] self.seq_info = [] self.trainIndexes = [] # unused self.validIndexes = [] # unused self.testIndexes = [] idx = 0 # find all clips clip_names = glob.glob(os.path.join(self.absolute_base_directory, '*')) clip_names.sort() # For each clip for clip_name in clip_names: rel_img_dir = os.path.join(self.base_dir, clip_name) im_seq = afew.AFEWImageSequence( "AFEW2Test", rel_img_dir, '*.png', None) im_seq.set_picasa_path_substitutions( {self.base_dir: self.picasa_boxes_base_dir, '_.png': '.txt', '_.jpg': '.txt'}, csv_delimiter=',') #im_seq.set_ramanan_path_substitutions( # # ??? # ) self.imagesequences.append(im_seq) # Save clip_name of sequence self.seq_info.append(clip_name) # If needed, load facetubes if self.preload_facetubes: self.facetubes.append(self.load_facetubes(clip_name)) # No label self.labels.append(None) # Save split self.trainIndexes.append(idx) idx += 1
def __init__(self, preload_facetubes=False, preproc=[], size=(96, 96)): """ If preload_facetubes is True, all facetubes will be loaded when the dataset is built. """ self.face_tubes_base_dir = self.face_tubes_base_dir % (size[0], size[1]) self.facetubes_to_filter = None for opt in preproc: if opt == "smooth": # Use the bounding-boxes smoothed version of the face tubes. self.face_tubes_base_dir = ( "faces/EmotiWTest/smooth_picasa_face_tubes_%s_%s" "/v2/numpy_arr_concatenated") % (size[0], size[1]) self.face_tubes_boxes_base_dir = ( "faces/EmotiWTest/smooth_picasa_face_tubes_%s_%s" "/picasa_tubes_pickles") % (size[0], size[1]) if opt == "remove_background_faces": # Remove background faces as many as possible from the dataset. # Path to the dictionary giving for each dataset, the list of # face tubes corresponding to background faces/objects. abs_dir = locate_data_path("faces/EmotiWTest") filename = os.path.join(abs_dir, "test_background_info.txt") try: f = open(filename) lines = f.readlines() f.close() self.facetubes_to_filter = [] for line in lines: self.facetubes_to_filter.append(line.strip()) except IOError as e: print e super(afew.AFEWImageSequenceDataset, self).__init__("AFEW2Test") self.absolute_base_directory = locate_data_path(self.base_dir) self.absolute_picasa_boxes_base_directory = locate_data_path( self.picasa_boxes_base_dir) self.face_tubes_base_directory = locate_data_path( self.face_tubes_base_dir) self.face_tubes_boxes_base_directory = locate_data_path( self.face_tubes_boxes_base_dir) self.preload_facetubes = preload_facetubes self.preproc = preproc self.size = size self.imagesequences = [] self.labels = [] self.seq_info = [] self.trainIndexes = [] # unused self.validIndexes = [] # unused self.testIndexes = [] idx = 0 # find all clips clip_names = glob.glob(os.path.join(self.absolute_base_directory, '*')) clip_names.sort() # For each clip for clip_name in clip_names: rel_img_dir = os.path.join(self.base_dir, clip_name) im_seq = afew.AFEWImageSequence("AFEW2Test", rel_img_dir, '*.png', None) im_seq.set_picasa_path_substitutions( { self.base_dir: self.picasa_boxes_base_dir, '_.png': '.txt', '_.jpg': '.txt' }, csv_delimiter=',') #im_seq.set_ramanan_path_substitutions( # # ??? # ) self.imagesequences.append(im_seq) # Save clip_name of sequence self.seq_info.append(clip_name) # If needed, load facetubes if self.preload_facetubes: self.facetubes.append(self.load_facetubes(clip_name)) # No label self.labels.append(None) # Save split self.trainIndexes.append(idx) idx += 1
def __init__(self, preload_facetubes=False, preproc=[], size=(96, 96)): """ If preload_facetubes is True, all facetubes will be loaded when the data set is built. """ self.face_tubes_base_dir = self.face_tubes_base_dir % (size[0], size[1]) self.facetubes_to_filter = None for opt in preproc: if opt == "smooth": # Use the bounding-boxes smoothed version of the face tubes. self.face_tubes_base_dir = ( "faces/new_clips/smooth_picasa_face_tubes_%s_%s" "/numpy_arr_concatenated") % (size[0], size[1]) self.face_tubes_boxes_base_dir = ( "faces/new_clips/smooth_picasa_face_tubes_%s_%s" "/picasa_tubes_pickles") % (size[0], size[1]) if opt == "remove_background_faces": # Remove background faces as many as possible from the dataset. # Path to the dictionary giving for each dataset, the list of # face tubes corresponding to background faces/objects. abs_dir = locate_data_path("faces/new_clips") filename = os.path.join(abs_dir, "background_info.pkl") try: f = open(filename, 'rb') self.facetubes_to_filter = cPickle.load(f) f.close() except IOError as e: print e super(afew.AFEWImageSequenceDataset, self).__init__("NewClips") self.absolute_base_directory = locate_data_path(self.base_dir) self.absolute_picasa_boxes_base_directory = locate_data_path( self.picasa_boxes_base_dir) self.face_tubes_base_directory = locate_data_path( self.face_tubes_base_dir) self.face_tubes_boxes_base_directory = locate_data_path( self.face_tubes_boxes_base_dir) self.emodict_base_directory = locate_data_path(self.emodict_dir) self.preload_facetubes = preload_facetubes self.preproc = preproc self.size = size self.imagesequences = [] self.labels = [] self.seq_info = [] self.trainIndexes = [] self.validIndexes = [] self.emo2numDict = {} self.num2emoDict = {} # Dictionary that gives a mapping from emotion name to clip id. file = open( os.path.join(self.emodict_base_directory, "newFilenameTranslate.txt"), 'r') line = file.readline() while line != '': if line[0] != '=': ln = line.split(':') emo = ln[0].strip() num = ln[1].strip().split(' ')[0] self.emo2numDict[emo] = num self.num2emoDict[num] = emo line = file.readline() # No validation split for this dataset # Find all clips to keep (not marked "REJECT" during labeling) labels_file = os.path.join(self.absolute_base_directory, 'labels.txt') f = open(labels_file, 'r') clips_and_targets = [ (clip_name[:-4], target) for clip_name, target in [l.split() for l in f.readlines()] if target != 'REJECT' ] idx = 0 for clip_name, target in clips_and_targets: if clip_name in self.seq_info: # Due to a mistake, some clips have been labeled twice, # so the same clip_name appears more than once in the list. # The simplest solution is to only use the first instance. continue #abs_img_dir = os.path.join(self.absolute_base_directory, # clip_name) rel_img_dir = os.path.join(self.base_dir, clip_name) im_seq = afew.AFEWImageSequence("NewClips", rel_img_dir, '*.png', self.emotionNames[target]) im_seq.set_picasa_path_substitutions( { self.base_dir: self.picasa_boxes_base_dir, '.png': '.txt' }, csv_delimiter=',') #im_seq.set_ramanan_path_substitutions( # # ??? # ) self.imagesequences.append(im_seq) # Save clip_name of sequence self.seq_info.append(clip_name) # If needed, load facetubes if self.preload_facetubes: self.facetubes.append(self.load_facetubes(clip_name)) # Save label self.labels.append(self.emotionNames[target]) # Save split self.trainIndexes.append(idx) idx += 1
def __init__(self, preload_facetubes=False, preproc=[], size=(96, 96)): """ If preload_facetubes is True, all facetubes will be loaded when the dataset is built, which takes around 1.2 GB. """ self.face_tubes_base_dir = self.face_tubes_base_dir%(size[0], size[1]) self.facetubes_to_filter = None for opt in preproc: if opt == "smooth": # Smoothed face tubes directory. self.face_tubes_base_dir = ("faces/EmotiW/smooth_picasa_face_tubes_%s_%s" "/numpy_arr/concatenate")%(size[0], size[1]) # Smoothed bounding boxes directory. self.face_tubes_boxes_base_dir = ("faces/EmotiW/" "smooth_picasa_face_tubes_%s_%s/picasa_tubes_pickles")%(size[0], size[1]) if opt == "remove_background_faces": # Remove background faces as many as possible from the dataset. # Path to the dictionary giving for each dataset, the list of # face tubes corresponding to background faces/objects. abs_dir = locate_data_path("faces/EmotiW") filename = os.path.join(abs_dir, "background_faces_info_v2.pkl") try: # Retrieve the list of background faces (clip_id, facetube_id) # for the given dataset that will be filtered out. f = open(filename, 'rb') info = cPickle.load(f) f.close() self.facetubes_to_filter = info except IOError as e: print e super(afew.AFEWImageSequenceDataset,self).__init__("AFEW2") self.absolute_base_directory = locate_data_path(self.base_dir) self.absolute_picasa_boxes_base_directory = locate_data_path( self.picasa_boxes_base_dir) self.face_tubes_base_directory = locate_data_path( self.face_tubes_base_dir) self.absolute_face_tubes_boxes_base_directory = locate_data_path( self.face_tubes_boxes_base_dir) self.preload_facetubes = preload_facetubes self.preproc = preproc self.size = size self.imagesequences = [] self.labels = [] self.seq_info = [] self.trainIndexes = [] self.validIndexes = [] # For each split (Train or Val) idx = 0 splits = (("Train", self.trainIndexes), ("Val", self.validIndexes)) seqnum = 0 for split_name, split_index in splits: #print 'processing %s' % split_name for emo_name in sorted(self.emotionNames.keys()): #print ' %s' % emo_name # Directory containing the images for all clips of that # emotion in that split abs_img_dir = os.path.join(self.absolute_base_directory, split_name, emo_name) rel_img_dir = os.path.join(self.base_dir, split_name, emo_name) #print 'abs_img_dir:', abs_img_dir if not os.path.isdir(abs_img_dir): continue # Directory containing the picasa bounding boxes for clips # of that emotion in that split picasa_bbox_dir = os.path.join( self.absolute_picasa_boxes_base_directory, split_name, emo_name) # Find all image names img_names = glob.glob(os.path.join(abs_img_dir, '*.png')) #print '%s img_names' % len(img_names) # Find all clips (sequences) unique_seq = sorted(set([img.split('-')[0] for img in img_names])) #print '%s unique_seq' % len(unique_seq) # For each clip for seq in unique_seq: # Load the Image Sequence object # pdb.set_trace() im_seq = afew.AFEWImageSequence("AFEW2_%d"%seqnum, rel_img_dir, "{0}-*.png".format(seq), self.emotionNames[emo_name]) im_seq.cache_directory = os.path.join(self.absolute_base_directory,"cache_dir/seq_%04d"%seqnum) im_seq.set_picasa_path_substitutions( {self.base_dir:self.picasa_boxes_base_dir, '.png':'.txt', '.jpg':'.txt', }, csv_delimiter=',') im_seq.set_ramanan_path_substitutions( { 'EmotiW/images/Train/':'EmotiW/ramananExtract/matExtractTrain/', 'EmotiW/images/Val/':'EmotiW/ramananExtract/matExtractVal/', 'Angry/':'1_', 'Disgust/':'2_', 'Fear/':'3_', 'Happy/':'4_', 'Neutral/':'5_', 'Sad/':'6_', 'Surprise/':'7_', '.jpg':'.mat', '.png':'.mat' } ) self.imagesequences.append(im_seq) # Save (split, emotion, sequence ID) of sequence seq_id = os.path.basename(seq) self.seq_info.append((split_name, emo_name, seq_id)) # If needed, load facetubes if self.preload_facetubes: self.facetubes.append(self.load_facetubes( split_name, emo_name, seq_id)) # Save label self.labels.append(self.emotionNames[emo_name]) # Save split split_index.append(idx) idx += 1 seqnum += 1