diff --git a/dbm_lib/config/config_raw_feature.py b/dbm_lib/config/config_raw_feature.py index 5494e21d..b246ab35 100644 --- a/dbm_lib/config/config_raw_feature.py +++ b/dbm_lib/config/config_raw_feature.py @@ -17,7 +17,7 @@ class ConfigRawReader(object): Args: feature_config_yml (None, optional): yml file defined service configuration """ - + if feature_config_yml is None: feature_config = DBMLIB_FEATURE_CONFIG else: @@ -25,15 +25,15 @@ class ConfigRawReader(object): with open(feature_config, 'r') as ymlfile: config = yaml.load(ymlfile) - + #Verbal features self.base_raw = config self.err_reason = config['raw_feature']['error_reason'] - + #Output range self.mov_headvel_start = config['raw_feature']['mov_headvel_start'] self.mov_headvel_end = config['raw_feature']['mov_headvel_end'] - + #Acoustic variable self.aco_int = config['raw_feature']['aco_int'] self.aco_ff = config['raw_feature']['aco_ff'] @@ -194,6 +194,8 @@ class ConfigRawReader(object): self.neu_exp = config['raw_feature']['neu_exp'] self.cai_exp = config['raw_feature']['cai_exp'] self.com_exp = config['raw_feature']['com_exp'] + self.com_lower_exp = config['raw_feature']['com_lower_exp'] + self.com_upper_exp = config['raw_feature']['com_upper_exp'] self.hap_exp_full = config['raw_feature']['hap_exp_full'] self.sad_exp_full = config['raw_feature']['sad_exp_full'] self.sur_exp_full = config['raw_feature']['sur_exp_full'] @@ -206,11 +208,13 @@ class ConfigRawReader(object): self.neu_exp_full = config['raw_feature']['neu_exp_full'] self.cai_exp_full = config['raw_feature']['cai_exp_full'] self.com_exp_full = config['raw_feature']['com_exp_full'] + self.com_lower_exp_full = config['raw_feature']['com_lower_exp_full'] + self.com_upper_exp_full = config['raw_feature']['com_upper_exp_full'] self.fac_AsymMaskMouth = config['raw_feature']['fac_AsymMaskMouth'] self.fac_AsymMaskEye = config['raw_feature']['fac_AsymMaskEye'] self.fac_AsymMaskEyebrow = config['raw_feature']['fac_AsymMaskEyebrow'] self.fac_AsymMaskCom = config['raw_feature']['fac_AsymMaskCom'] - + #Movement features self.head_vel = config['raw_feature']['head_vel'] self.mov_blink_ear = config['raw_feature']['mov_blink_ear'] @@ -222,4 +226,3 @@ class ConfigRawReader(object): self.mov_Hpose_Yaw = config['raw_feature']['mov_Hpose_Yaw'] self.mov_Hpose_Roll = config['raw_feature']['mov_Hpose_Roll'] self.mov_Hpose_Dist = config['raw_feature']['mov_Hpose_Dist'] - \ No newline at end of file diff --git a/dbm_lib/dbm_features/raw_features/util/video_util.py b/dbm_lib/dbm_features/raw_features/util/video_util.py index 013c073c..fe47e635 100644 --- a/dbm_lib/dbm_features/raw_features/util/video_util.py +++ b/dbm_lib/dbm_features/raw_features/util/video_util.py @@ -11,32 +11,32 @@ from dbm_lib.dbm_features.raw_features.util import util as ut def smooth(x,window_len=11,window='hanning'): """smooth the data using a window with requested size. - + This method is based on the convolution of a scaled window with the signal. - The signal is prepared by introducing reflected copies of the signal + The signal is prepared by introducing reflected copies of the signal (with the window size) in both ends so that transient parts are minimized in the begining and end part of the output signal. - + input: - x: the input signal + x: the input signal window_len: the dimension of the smoothing window; should be an odd integer window: the type of window from 'flat', 'hanning', 'hamming', 'bartlett', 'blackman' flat window will produce a moving average smoothing. output: the smoothed signal - + example: t=linspace(-2,2,0.1) x=sin(t)+randn(len(t))*0.1 y=smooth(x) - - see also: - + + see also: + numpy.hanning, numpy.hamming, numpy.bartlett, numpy.blackman, numpy.convolve scipy.signal.lfilter - + TODO: the window parameter could be the window itself if an array instead of a string NOTE: length(output) != length(input), to correct this: return y[(window_len/2-1):-(window_len/2)] instead of just y. """ @@ -62,7 +62,7 @@ def filter_by_confidence_and_thresh(x, fea, thresh): return x[fea] else: return np.NaN - + def add_au_emotion(x, emotion,emotion_type,exp_type): """ computing individula emotion expressivity matrix @@ -79,20 +79,20 @@ def add_au_emotion(x, emotion,emotion_type,exp_type): if x[au_c_label]==1 and (not np.isnan(x[au_r_label])): #there are data with face in, but au_c=0 sum_r += x[au_r_label] cnt += 6 - if exp_type=='full' and x[au_c_label]==0: #Logic to compute emotion expressivity when all AU's are present - cnt = 0 + if exp_type=='full' and x[au_c_label]==0: #Logic to compute emotion expressivity when all AU's are present + cnt = 0 break - if cnt > 0: + if cnt > 0: sum_r /= cnt else: sum_r = 0 - v_emo = x[emotion_type] + sum_r + v_emo = x[emotion_type] + sum_r else: v_emo = np.NaN error_reason = 'confidence less than 80%' - + return v_emo, error_reason - + def add_au_occ(x, emotion,emotion_type): """ computing individula emotion presence @@ -107,14 +107,14 @@ def add_au_occ(x, emotion,emotion_type): au_c_label = " AU{:02d}_c".format(au) if x[au_c_label]==1: #there are data with face in, but au_c=0 au_pres.append(1) - + if len(au_pres) == len(emotion): em_pres = 1 else: em_pres = np.NaN error_reason = 'confidence less than 80%' return em_pres, error_reason - + def emotion_exp(em_au,of,em_col,err_col): """ Computing individual emotion expressivity and adding it to dataframe @@ -122,14 +122,14 @@ def emotion_exp(em_au,of,em_col,err_col): for emotion in em_au: of[[em_col[0],err_col]]=of.apply(add_au_emotion, args=(emotion,em_col[0],'partial',), axis=1, result_type='expand') of[[em_col[1],err_col]]=of.apply(add_au_emotion, args=(emotion,em_col[1],'full',), axis=1, result_type='expand') - + def emotion_pres(em_au,of,em_col,err_col): """ Computing individual emotion expressivity and adding it to dataframe """ for emotion in em_au: of[[em_col,err_col]]=of.apply(add_au_occ, args=(emotion,em_col,), axis=1, result_type='expand') - + def calc_of_for_video(of,face_cfg,fe_cfg): """ Creating dataframe for emotion expressivity @@ -142,7 +142,7 @@ def calc_of_for_video(of,face_cfg,fe_cfg): fe_cfg.com_exp_full] of[new_cols] = pd.DataFrame([[0] * len(new_cols)], index=of.index) of[fe_cfg.err_reason] = 'Pass' - + #Composite happiness expressivity emotion_exp(face_cfg.happiness,of,[fe_cfg.hap_exp,fe_cfg.hap_exp_full],fe_cfg.err_reason) #Composite sadness expressivity @@ -167,6 +167,10 @@ def calc_of_for_video(of,face_cfg,fe_cfg): emotion_exp(face_cfg.cai,of,[fe_cfg.cai_exp,fe_cfg.cai_exp_full],fe_cfg.err_reason) #Composite Expressivity emotion_exp(face_cfg.ACTION_UNITS,of,[fe_cfg.com_exp,fe_cfg.com_exp_full],fe_cfg.err_reason) + #Composite lower face expressivity + emotion_exp(face_cfg.LOWER_ACTION_UNITS,of,[fe_cfg.com_lower_exp,fe_cfg.com_lower_exp_full],fe_cfg.err_reason) + #Composite upper face Expressivity + emotion_exp(face_cfg.UPPER_ACTION_UNITS,of,[fe_cfg.com_upper_exp,fe_cfg.com_upper_exp_full],fe_cfg.err_reason) #AU happiness presence emotion_pres(face_cfg.happiness,of,fe_cfg.happ_occ,fe_cfg.err_reason) #AU Sad presence diff --git a/dbm_lib/dbm_features/raw_features/video/face_config/face_config_reader.py b/dbm_lib/dbm_features/raw_features/video/face_config/face_config_reader.py index 4d882976..19fe1d28 100644 --- a/dbm_lib/dbm_features/raw_features/video/face_config/face_config_reader.py +++ b/dbm_lib/dbm_features/raw_features/video/face_config/face_config_reader.py @@ -18,18 +18,20 @@ class ConfigFaceReader(object): Args: service_config_yml (None, optional): yml file defined service configuration """ - + if service_config_yml is None: service_config = DBMLIB_FACE_CONFIG else: service_config = service_config_yml - + with open(service_config, 'r') as ymlfile: config = yaml.load(ymlfile) self.ACTION_UNITS = config['cdx_face_config']['ACTION_UNITS'] self.NEG_ACTION_UNITS = config['cdx_face_config']['NEG_ACTION_UNITS'] self.POS_ACTION_UNITS = config['cdx_face_config']['POS_ACTION_UNITS'] - self.NET_ACTION_UNITS = config['cdx_face_config']['NET_ACTION_UNITS'] + self.NET_ACTION_UNITS = config['cdx_face_config']['NET_ACTION_UNITS'] + self.LOWER_ACTION_UNITS = config['cdx_face_config']['LOWER_ACTION_UNITS'] + self.UPPER_ACTION_UNITS = config['cdx_face_config']['LOWER_ACTION_UNITS'] self.happiness = config['cdx_face_config']['happiness'] self.sadness = config['cdx_face_config']['sadness'] self.surprise = config['cdx_face_config']['surprise'] @@ -44,7 +46,7 @@ class ConfigFaceReader(object): self.AU_fl = config['cdx_face_config']['AU_filters'] self.au_int = config['cdx_face_config']['au_intensity'] self.au_prs = config['cdx_face_config']['au_presence'] - + def get_action_unit(self): """Summary Returns: @@ -134,4 +136,4 @@ class ConfigFaceReader(object): Returns: TYPE: end point """ - return self.cai \ No newline at end of file + return self.cai diff --git a/resources/features/derived_feature.yml b/resources/features/derived_feature.yml index a0759d79..e48350b0 100644 --- a/resources/features/derived_feature.yml +++ b/resources/features/derived_feature.yml @@ -1,9 +1,9 @@ derive_feature: - + #DBM Feature Group - FEATURE_GROUP: ['FAC_ASYM', 'FAC_AU', 'FAC_EXP', 'FAC_LMK', 'ACO_INT', 'ACO_FF', 'ACO_HNR', 'ACO_GNE', 'ACO_FM', + FEATURE_GROUP: ['FAC_ASYM', 'FAC_AU', 'FAC_EXP', 'FAC_LMK', 'ACO_INT', 'ACO_FF', 'ACO_HNR', 'ACO_GNE', 'ACO_FM', 'ACO_JITTER','ACO_SHIMMER', 'ACO_PAUSE', 'ACO_VFS', 'ACO_MFCC', 'MOV_HM', 'MOV_HP', 'EYE_BLINK'] - + #Feature group output file extensions FAC_ASYM_LOC: _facasym FAC_AU_LOC: _facau @@ -22,31 +22,31 @@ derive_feature: MOV_HM_LOC: _headmov MOV_HP_LOC: _headpose EYE_BLINK_LOC: _eyeblinks - + #Facial category feature group FAC_ASYM: ['fac_AsymMaskMouth', 'fac_AsymMaskEyebrow', 'fac_AsymMaskEye', 'fac_AsymMaskCom'] - FAC_AU: ['fac_AU01int', 'fac_AU02int', 'fac_AU04int', 'fac_AU05int', 'fac_AU06int', 'fac_AU07int', 'fac_AU09int', - 'fac_AU10int', 'fac_AU12int', 'fac_AU14int', 'fac_AU15int', 'fac_AU17int', 'fac_AU20int', 'fac_AU23int', - 'fac_AU25int', 'fac_AU26int', 'fac_AU45int', 'fac_AU01pres', 'fac_AU02pres', 'fac_AU04pres', 'fac_AU05pres', - 'fac_AU06pres', 'fac_AU07pres', 'fac_AU09pres', 'fac_AU10pres', 'fac_AU12pres', 'fac_AU14pres', 'fac_AU15pres', + FAC_AU: ['fac_AU01int', 'fac_AU02int', 'fac_AU04int', 'fac_AU05int', 'fac_AU06int', 'fac_AU07int', 'fac_AU09int', + 'fac_AU10int', 'fac_AU12int', 'fac_AU14int', 'fac_AU15int', 'fac_AU17int', 'fac_AU20int', 'fac_AU23int', + 'fac_AU25int', 'fac_AU26int', 'fac_AU45int', 'fac_AU01pres', 'fac_AU02pres', 'fac_AU04pres', 'fac_AU05pres', + 'fac_AU06pres', 'fac_AU07pres', 'fac_AU09pres', 'fac_AU10pres', 'fac_AU12pres', 'fac_AU14pres', 'fac_AU15pres', 'fac_AU17pres', 'fac_AU20pres', 'fac_AU23pres', 'fac_AU25pres', 'fac_AU26pres', 'fac_AU28pres', 'fac_AU45pres'] FAC_EXP: ['hap_exp', 'sad_exp', 'sur_exp', 'fea_exp', 'ang_exp', 'dis_exp', 'con_exp', 'happ_occ', 'sad_occ', - 'sur_occ', 'fea_occ', 'ang_occ', 'dis_occ', 'con_occ', 'pos_exp', 'neg_exp', 'com_exp', 'hap_exp_full', + 'sur_occ', 'fea_occ', 'ang_occ', 'dis_occ', 'con_occ', 'pos_exp', 'neg_exp', 'com_exp','com_lower_exp','com_upper_exp', 'hap_exp_full', 'sad_exp_full', 'sur_exp_full','fea_exp_full', 'ang_exp_full', 'dis_exp_full', 'con_exp_full', 'pos_exp_full', - 'neg_exp_full', 'com_exp_full'] - FAC_LMK: ['fac_LMK00disp', 'fac_LMK01disp', 'fac_LMK02disp', 'fac_LMK03disp', 'fac_LMK04disp', - 'fac_LMK05disp', 'fac_LMK06disp', 'fac_LMK07disp', 'fac_LMK08disp', 'fac_LMK09disp', 'fac_LMK10disp', - 'fac_LMK11disp', 'fac_LMK12disp', 'fac_LMK13disp', 'fac_LMK14disp', 'fac_LMK15disp', 'fac_LMK16disp', - 'fac_LMK17disp', 'fac_LMK18disp', 'fac_LMK19disp', 'fac_LMK20disp', 'fac_LMK21disp', 'fac_LMK22disp', - 'fac_LMK23disp', 'fac_LMK24disp', 'fac_LMK25disp', 'fac_LMK26disp', 'fac_LMK27disp', 'fac_LMK28disp', - 'fac_LMK29disp', 'fac_LMK30disp', 'fac_LMK31disp', 'fac_LMK32disp', 'fac_LMK33disp', 'fac_LMK34disp', - 'fac_LMK35disp', 'fac_LMK36disp', 'fac_LMK37disp', 'fac_LMK38disp', 'fac_LMK39disp', 'fac_LMK40disp', - 'fac_LMK41disp', 'fac_LMK42disp', 'fac_LMK43disp', 'fac_LMK44disp', 'fac_LMK45disp', 'fac_LMK46disp', - 'fac_LMK47disp', 'fac_LMK48disp', 'fac_LMK49disp', 'fac_LMK50disp', 'fac_LMK51disp', 'fac_LMK52disp', - 'fac_LMK53disp', 'fac_LMK54disp', 'fac_LMK55disp', 'fac_LMK56disp', 'fac_LMK57disp', 'fac_LMK58disp', - 'fac_LMK59disp', 'fac_LMK60disp', 'fac_LMK61disp', 'fac_LMK62disp', 'fac_LMK63disp', 'fac_LMK64disp', + 'neg_exp_full', 'com_exp_full','com_lower_exp_full','com_upper_exp_full'] + FAC_LMK: ['fac_LMK00disp', 'fac_LMK01disp', 'fac_LMK02disp', 'fac_LMK03disp', 'fac_LMK04disp', + 'fac_LMK05disp', 'fac_LMK06disp', 'fac_LMK07disp', 'fac_LMK08disp', 'fac_LMK09disp', 'fac_LMK10disp', + 'fac_LMK11disp', 'fac_LMK12disp', 'fac_LMK13disp', 'fac_LMK14disp', 'fac_LMK15disp', 'fac_LMK16disp', + 'fac_LMK17disp', 'fac_LMK18disp', 'fac_LMK19disp', 'fac_LMK20disp', 'fac_LMK21disp', 'fac_LMK22disp', + 'fac_LMK23disp', 'fac_LMK24disp', 'fac_LMK25disp', 'fac_LMK26disp', 'fac_LMK27disp', 'fac_LMK28disp', + 'fac_LMK29disp', 'fac_LMK30disp', 'fac_LMK31disp', 'fac_LMK32disp', 'fac_LMK33disp', 'fac_LMK34disp', + 'fac_LMK35disp', 'fac_LMK36disp', 'fac_LMK37disp', 'fac_LMK38disp', 'fac_LMK39disp', 'fac_LMK40disp', + 'fac_LMK41disp', 'fac_LMK42disp', 'fac_LMK43disp', 'fac_LMK44disp', 'fac_LMK45disp', 'fac_LMK46disp', + 'fac_LMK47disp', 'fac_LMK48disp', 'fac_LMK49disp', 'fac_LMK50disp', 'fac_LMK51disp', 'fac_LMK52disp', + 'fac_LMK53disp', 'fac_LMK54disp', 'fac_LMK55disp', 'fac_LMK56disp', 'fac_LMK57disp', 'fac_LMK58disp', + 'fac_LMK59disp', 'fac_LMK60disp', 'fac_LMK61disp', 'fac_LMK62disp', 'fac_LMK63disp', 'fac_LMK64disp', 'fac_LMK65disp', 'fac_LMK66disp', 'fac_LMK67disp'] - + #Acoustic category feature group ACO_INT: ['aco_int'] ACO_FF: ['aco_ff'] @@ -59,19 +59,19 @@ derive_feature: ACO_VFS: ['aco_voicePct'] ACO_MFCC: ['aco_mfcc1','aco_mfcc2','aco_mfcc3','aco_mfcc4','aco_mfcc5','aco_mfcc6','aco_mfcc7','aco_mfcc8','aco_mfcc9', 'aco_mfcc10','aco_mfcc11','aco_mfcc12'] - + #Movement category feature group MOV_HM: ['head_vel'] MOV_HP: ['mov_Hpose_Dist','mov_Hpose_Pitch','mov_Hpose_Yaw','mov_Hpose_Roll'] EYE_BLINK: ['mov_blink_ear', 'vid_dur', 'mov_blinkdur'] - + #Calculation for variables # Facial Asymmetry fac_AsymMaskMouth: ['mean', 'std'] fac_AsymMaskEyebrow: ['mean', 'std'] fac_AsymMaskEye: ['mean', 'std'] fac_AsymMaskCom: ['mean', 'std'] - + #Facial Action Unit fac_AU01int: ['mean', 'std'] fac_AU02int: ['mean', 'std'] @@ -103,12 +103,12 @@ derive_feature: fac_AU15pres: ['pct'] fac_AU17pres: ['pct'] fac_AU20pres: ['pct'] - fac_AU23pres: ['pct'] + fac_AU23pres: ['pct'] fac_AU25pres: ['pct'] fac_AU26pres: ['pct'] fac_AU28pres: ['pct'] fac_AU45pres: ['pct'] - + #Facial Expressivity hap_exp: ['mean', 'std'] sad_exp: ['mean', 'std'] @@ -128,8 +128,10 @@ derive_feature: neg_exp: ['mean', 'std', 'pct'] neu_exp: ['mean', 'std', 'pct'] com_exp: ['mean', 'std', 'pct'] + com_lower_exp: ['mean','std','pct'] + com_upper_exp: ['mean','std','pct'] hap_exp_full: ['mean', 'std'] - sad_exp_full: ['mean', 'std'] + sad_exp_full: ['mean', 'std'] sur_exp_full: ['mean', 'std'] fea_exp_full: ['mean', 'std'] ang_exp_full: ['mean', 'std'] @@ -139,7 +141,9 @@ derive_feature: neg_exp_full: ['mean', 'std'] neu_exp_full: ['mean', 'std'] com_exp_full: ['mean', 'std'] - + com_lower_exp_full: ['mean','std'] + com_upper_exp_full: ['mean', 'std'] + #Facial Landmarks fac_LMK00disp: ['mean', 'std'] fac_LMK01disp: ['mean', 'std'] @@ -151,7 +155,7 @@ derive_feature: fac_LMK07disp: ['mean', 'std'] fac_LMK08disp: ['mean', 'std'] fac_LMK09disp: ['mean', 'std'] - fac_LMK10disp: ['mean', 'std'] + fac_LMK10disp: ['mean', 'std'] fac_LMK11disp: ['mean', 'std'] fac_LMK12disp: ['mean', 'std'] fac_LMK13disp: ['mean', 'std'] @@ -163,22 +167,22 @@ derive_feature: fac_LMK19disp: ['mean', 'std'] fac_LMK20disp: ['mean', 'std'] fac_LMK21disp: ['mean', 'std'] - fac_LMK22disp: ['mean', 'std'] + fac_LMK22disp: ['mean', 'std'] fac_LMK23disp: ['mean', 'std'] fac_LMK24disp: ['mean', 'std'] fac_LMK25disp: ['mean', 'std'] fac_LMK26disp: ['mean', 'std'] fac_LMK27disp: ['mean', 'std'] fac_LMK28disp: ['mean', 'std'] - fac_LMK29disp: ['mean', 'std'] + fac_LMK29disp: ['mean', 'std'] fac_LMK30disp: ['mean', 'std'] fac_LMK31disp: ['mean', 'std'] fac_LMK32disp: ['mean', 'std'] fac_LMK33disp: ['mean', 'std'] - fac_LMK34disp: ['mean', 'std'] + fac_LMK34disp: ['mean', 'std'] fac_LMK35disp: ['mean', 'std'] fac_LMK36disp: ['mean', 'std'] - fac_LMK37disp: ['mean', 'std'] + fac_LMK37disp: ['mean', 'std'] fac_LMK38disp: ['mean', 'std'] fac_LMK39disp: ['mean', 'std'] fac_LMK40disp: ['mean', 'std'] @@ -193,7 +197,7 @@ derive_feature: fac_LMK49disp: ['mean', 'std'] fac_LMK50disp: ['mean', 'std'] fac_LMK51disp: ['mean', 'std'] - fac_LMK52disp: ['mean', 'std'] + fac_LMK52disp: ['mean', 'std'] fac_LMK53disp: ['mean', 'std'] fac_LMK54disp: ['mean', 'std'] fac_LMK55disp: ['mean', 'std'] @@ -209,7 +213,7 @@ derive_feature: fac_LMK65disp: ['mean', 'std'] fac_LMK66disp: ['mean', 'std'] fac_LMK67disp: ['mean', 'std'] - + #Acoustic feature aco_int: ['mean', 'std', 'range'] aco_ff: ['mean', 'std', 'range'] @@ -238,7 +242,7 @@ derive_feature: aco_mfcc10: ['mean'] aco_mfcc11: ['mean'] aco_mfcc12: ['mean'] - + #Movement feature head_vel: ['mean', 'std'] mov_Hpose_Dist: ['mean', 'std'] diff --git a/resources/features/raw_feature.yml b/resources/features/raw_feature.yml index 982bf631..9f98ffca 100644 --- a/resources/features/raw_feature.yml +++ b/resources/features/raw_feature.yml @@ -1,11 +1,11 @@ raw_feature: #error reason error_reason: error_reason - + #Output range mov_headvel_start: 0 mov_headvel_end: 200 - + #Facial markers hap_exp: fac_hapintsoft sad_exp: fac_sadintsoft @@ -26,6 +26,8 @@ raw_feature: neu_exp: neu_exp cai_exp: cai_exp com_exp: fac_comintsoft + com_lower_exp: fac_comlowintsoft + com_upper_exp: fac_comuppintsoft hap_exp_full: fac_hapinthard sad_exp_full: fac_sadinthard sur_exp_full: fac_surinthard @@ -38,13 +40,15 @@ raw_feature: neu_exp_full: neu_exp_full cai_exp_full: cai_exp_full com_exp_full: fac_cominthard - + com_lower_exp_full: fac_comlowinthard + com_upper_exp_full: fac_comuppinthard + #Facial asymmetry fac_AsymMaskMouth: fac_asymmaskmouth fac_AsymMaskEye: fac_asymmaskeye fac_AsymMaskEyebrow: fac_asymmaskeyebrow fac_AsymMaskCom: fac_asymmaskcom - + #Facial landmark fac_LMK00disp: fac_LMK00disp fac_LMK01disp: fac_LMK01disp @@ -114,7 +118,7 @@ raw_feature: fac_LMK65disp: fac_LMK65disp fac_LMK66disp: fac_LMK66disp fac_LMK67disp: fac_LMK67disp - + #Facial action unit fac_AU01int: fac_AU01int fac_AU02int: fac_AU02int @@ -151,7 +155,7 @@ raw_feature: fac_AU26pres: fac_AU26pres fac_AU28pres: fac_AU28pres fac_AU45pres: fac_AU45pres - + #Verbal markers aco_int: aco_int aco_ff: aco_ff @@ -184,7 +188,7 @@ raw_feature: aco_speakingtime: aco_speakingtime aco_numpauses: aco_numpauses aco_pausefrac: aco_pausefrac - + #Movement markers head_vel: mov_headvel mov_blink_ear: mov_blink_ear diff --git a/resources/services/face_util.yml b/resources/services/face_util.yml index d398cdf1..0681f599 100644 --- a/resources/services/face_util.yml +++ b/resources/services/face_util.yml @@ -1,5 +1,7 @@ cdx_face_config: ACTION_UNITS: [[6, 12],[1, 4, 15],[1, 2, 5, 26],[1, 2, 4, 5, 7, 20, 26],[4, 5, 7, 23],[9, 15],[12, 14]] + LOWER_ACTION_UNITS: [[12], [15], [26], [20, 26], [23], [15], [12, 14]] + UPPER_ACTION_UNITS: [[6], [1, 4], [1, 2, 5], [1, 2, 4, 5, 7], [4, 5, 7], [9]] NEG_ACTION_UNITS: [[1, 4, 15], [1, 2, 4, 5, 7, 20, 26], [4, 5, 7, 23], [9, 15], [12, 14]] POS_ACTION_UNITS: [[6, 12]] NET_ACTION_UNITS: [[1, 2, 5, 26]] @@ -14,12 +16,12 @@ cdx_face_config: SELECTED_FEATURES: AU,POSE face_expr_dir: /video/face_expressivity face_asym_dir: /video/face_asymmetry - AU_filters: ['frame', ' face_id', ' timestamp', ' confidence', ' success', ' AU01_r',' AU02_r',' AU04_r',' AU05_r', - ' AU06_r', ' AU07_r', ' AU09_r', ' AU10_r', ' AU12_r', ' AU14_r', ' AU15_r', ' AU17_r', ' AU20_r', - ' AU25_r', ' AU26_r', ' AU45_r', ' AU01_c', ' AU02_c', ' AU04_c', ' AU05_c', ' AU06_c', ' AU07_c', + AU_filters: ['frame', ' face_id', ' timestamp', ' confidence', ' success', ' AU01_r',' AU02_r',' AU04_r',' AU05_r', + ' AU06_r', ' AU07_r', ' AU09_r', ' AU10_r', ' AU12_r', ' AU14_r', ' AU15_r', ' AU17_r', ' AU20_r', + ' AU25_r', ' AU26_r', ' AU45_r', ' AU01_c', ' AU02_c', ' AU04_c', ' AU05_c', ' AU06_c', ' AU07_c', ' AU10_c', ' AU12_c', ' AU14_c', ' AU15_c', ' AU17_c', ' AU20_c', ' AU23_c', ' AU25_c', ' AU26_c', ' AU28_c', ' AU45_c',' AU09_c',' AU23_r' ] - au_intensity: [' AU01_r',' AU02_r',' AU04_r',' AU05_r', ' AU06_r', ' AU07_r', ' AU09_r', ' AU10_r', ' AU12_r', + au_intensity: [' AU01_r',' AU02_r',' AU04_r',' AU05_r', ' AU06_r', ' AU07_r', ' AU09_r', ' AU10_r', ' AU12_r', ' AU14_r', ' AU15_r', ' AU17_r', ' AU20_r',' AU23_r', ' AU25_r', ' AU26_r', ' AU45_r'] - au_presence: [' AU01_c', ' AU02_c', ' AU04_c', ' AU05_c', ' AU06_c', ' AU07_c', ' AU09_c', ' AU10_c', ' AU12_c', - ' AU14_c', ' AU15_c', ' AU17_c', ' AU20_c', ' AU23_c', ' AU25_c', ' AU26_c', ' AU45_c'] \ No newline at end of file + au_presence: [' AU01_c', ' AU02_c', ' AU04_c', ' AU05_c', ' AU06_c', ' AU07_c', ' AU09_c', ' AU10_c', ' AU12_c', + ' AU14_c', ' AU15_c', ' AU17_c', ' AU20_c', ' AU23_c', ' AU25_c', ' AU26_c', ' AU45_c']