Converting the demos to the new interface.

This commit is contained in:
Tadas Baltrusaitis
2018-04-16 07:31:30 +01:00
parent ae5bb973b8
commit 762965dd53
4 changed files with 124 additions and 38 deletions

View File

@@ -6,16 +6,19 @@ addpath(genpath('../face_detection'));
addpath('../CCNF/');
%% loading the patch experts
%[patches, pdm, clmParams, early_term_params] = Load_CECLM_general();
% An accurate CCNF (or CLNF) model
[clmParams, pdm] = Load_CLM_params_wild();
[patches] = Load_Patch_Experts( '../models/general/', 'ccnf_patches_*_general.mat', [], [], clmParams);
% A simpler (but less accurate SVR)
% [patches] = Load_Patch_Experts( '../models/general/', 'svr_patches_*_general.mat', [], [], clmParams);
% Default OpenFace landmark model, using CE-CLM patch experts
[patches, pdm, clmParams, early_term_params] = Load_CECLM_general();
clmParams.multi_modal_types = patches(1).multi_modal_types;
% faster but less accurate
%[patches, pdm, clmParams] = Load_CLNF_general();
% even faster but even less accurate
%[patches, pdm, clmParams] = Load_CLM_general();
% Using a multi-view approach
views = [0,0,0; 0,-30,0; 0,30,0; 0,0,30; 0,0,-30;];
views = views * pi/180;
% Dependencies for face detection (MatConvNet), remove if not present
setup_mconvnet;
@@ -70,21 +73,12 @@ for img=1:numel(images)
bbox = bboxs(i,:);
% have a multi-view version
if(multi_view)
views = [0,0,0; 0,-30,0; 0,30,0; 0,-55,0; 0,55,0; 0,0,30; 0,0,-30; 0,-90,0; 0,90,0; 0,-70,40; 0,70,-40];
views = views * pi/180;
if(exist('early_term_params', 'var'))
[shape,~,~,lhood,lmark_lhood,view_used] =...
Fitting_from_bb_multi_hyp(image, [], bbox, pdm, patches, clmParams, views, early_term_params);
else
[shape,~,~,lhood,lmark_lhood,view_used] =...
Fitting_from_bb_multi_hyp(image, [], bbox, pdm, patches, clmParams, views);
end
if(exist('early_term_params', 'var'))
[shape,~,~,lhood,lmark_lhood,view_used] =...
Fitting_from_bb_multi_hyp(image, [], bbox, pdm, patches, clmParams, views, early_term_params);
else
[shape,~,~,lhood,lmark_lhood,view_used] = Fitting_from_bb(image, [], bbox, pdm, patches, clmParams);
[shape,~,~,lhood,lmark_lhood,view_used] =...
Fitting_from_bb_multi_hyp(image, [], bbox, pdm, patches, clmParams, views);
end
% shape correction for matlab format

View File

@@ -7,22 +7,24 @@ addpath('../CCNF/');
%% loading the patch experts
% Default OpenFace landmark model, using CE-CLM patch experts
[patches, pdm, clmParams, early_term_params] = Load_CECLM_general();
views = [0,0,0];
% Loading eye PDM and patch experts
[clmParams_eye, pdm_right_eye, pdm_left_eye] = Load_CLM_params_eye_28();
% faster but less accurate
%[patches, pdm, clmParams] = Load_CLNF_general();
[patches_right_eye] = Load_Patch_Experts( '../models/hierarch/', 'ccnf_patches_*_synth_right_eye.mat', [], [], clmParams_eye);
[patches_left_eye] = Load_Patch_Experts( '../models/hierarch/', 'ccnf_patches_*_synth_left_eye.mat', [], [], clmParams_eye);
clmParams_eye.multi_modal_types = patches_right_eye(1).multi_modal_types;
right_eye_inds = [43,44,45,46,47,48];
left_eye_inds = [37,38,39,40,41,42];
% even faster but even less accurate
%[patches, pdm, clmParams] = Load_CLM_general();
right_eye_inds_synth = [9 11 13 15 17 19];
left_eye_inds_synth = [9 11 13 15 17 19];
% Using a multi-view approach
views = [0,0,0; 0,-30,0; 0,30,0; 0,0,30; 0,0,-30;];
views = views * pi/180;
clmParams.multi_modal_types = patches(1).multi_modal_types;
% Load the eye landmark models that will be used
[ clmParams_eye, pdm_right_eye, pdm_left_eye, ...
patches_left_eye, patches_right_eye,...
left_eye_inds_in_68, right_eye_inds_in_68,...
left_eye_inds_in_28, right_eye_inds_in_28] = Load_eye_models();
%%
% root_dir = 'C:\Users\Tadas\Dropbox\AAM\test data\gaze_original\p00/';
@@ -77,12 +79,13 @@ for img=1:numel(images)
[shape,~,~,lhood,lmark_lhood,view_used] = Fitting_from_bb_multi_hyp(image, [], bbox, pdm, patches, clmParams, views);
% shape correction for matlab format
shape = shape + 1;
% Perform eye fitting now
[shape, shape_r_eye] = Fitting_from_bb_hierarch(image, pdm, pdm_right_eye, patches_right_eye, clmParams_eye, shape, right_eye_inds, right_eye_inds_synth);
[shape, shape_l_eye] = Fitting_from_bb_hierarch(image, pdm, pdm_left_eye, patches_left_eye, clmParams_eye, shape, left_eye_inds, left_eye_inds_synth);
[shape, shape_r_eye] = Fitting_from_bb_hierarch(image, pdm, pdm_right_eye, patches_right_eye, clmParams_eye, shape, right_eye_inds_in_68, right_eye_inds_in_28);
[shape, shape_l_eye] = Fitting_from_bb_hierarch(image, pdm, pdm_left_eye, patches_left_eye, clmParams_eye, shape, left_eye_inds_in_68, left_eye_inds_in_28);
% Convert it to matlab convention
shape_r_eye = shape_r_eye + 1;
shape_l_eye = shape_l_eye + 1;
plot(shape_l_eye(9:20,1), shape_l_eye(9:20,2), '.g', 'MarkerSize',7);
plot(shape_l_eye(1:8,1), shape_l_eye(1:8,2), '.b', 'MarkerSize',7);

View File

@@ -0,0 +1,40 @@
function [ patches, pdm, clmParams, inds_full, inds_inner ] = Load_CLNF_inner()
%LOAD_CLNF_Inner Summary of this function goes here
% Detailed explanation goes here
% 51 landmark model of a face (a subset of 68 landmark model without
% the face outline)
clmParams = struct;
clmParams.window_size = [19,19];
clmParams.numPatchIters = size(clmParams.window_size,1);
% the PDM created from in the wild data
pdmLoc = ['../models/hierarch_pdm/pdm_51_inner.mat'];
load(pdmLoc);
pdm = struct;
pdm.M = double(M);
pdm.E = double(E);
pdm.V = double(V);
% the default model parameters to use
clmParams.regFactor = 2.5;
clmParams.sigmaMeanShift = 1.75;
clmParams.tikhonov_factor = 2.5;
clmParams.startScale = 1;
clmParams.num_RLMS_iter = 5;
clmParams.fTol = 0.01;
clmParams.useMultiScale = true;
clmParams.use_multi_modal = 1;
[patches] = Load_Patch_Experts( '../models/general/', 'ccnf_patches_*general_no_out.mat', [], [], clmParams);
clmParams.multi_modal_types = patches(1).multi_modal_types;
% Corresponding indices between the 68 point and the 51 point version
inds_full = 18:68;
inds_inner = 1:51;
end

View File

@@ -0,0 +1,49 @@
function [ clmParams_eye, pdm_right_eye, pdm_left_eye, ...
patches_left_eye, patches_right_eye,...
left_eye_inds_in_68, right_eye_inds_in_68,...
left_eye_inds_in_28, right_eye_inds_in_28] = Load_eye_models()
clmParams_eye.window_size = [17,17; 15,15; 13,13;];
clmParams_eye.numPatchIters = size(clmParams_eye.window_size,1);
% the PDM created from in the wild data
pdmLoc = ['../models/hierarch_pdm/pdm_28_r_eye.mat'];
load(pdmLoc);
pdm_right_eye = struct;
pdm_right_eye.M = double(M);
pdm_right_eye.E = double(E);
pdm_right_eye.V = double(V);
pdmLoc = ['../models/hierarch_pdm/pdm_28_l_eye.mat'];
load(pdmLoc);
pdm_left_eye = struct;
pdm_left_eye.M = double(M);
pdm_left_eye.E = double(E);
pdm_left_eye.V = double(V);
% the default model parameters to use
clmParams_eye.regFactor = 2.0;
clmParams_eye.sigmaMeanShift = 1.5;
clmParams_eye.tikhonov_factor = 0;
clmParams_eye.startScale = 1;
clmParams_eye.num_RLMS_iter = 10;
clmParams_eye.fTol = 0.01;
clmParams_eye.useMultiScale = true;
clmParams_eye.use_multi_modal = 0;
clmParams_eye.tikhonov_factor = 0;
[patches_right_eye] = Load_Patch_Experts( '../models/hierarch/', 'ccnf_patches_*_synth_right_eye.mat', [], [], clmParams_eye);
[patches_left_eye] = Load_Patch_Experts( '../models/hierarch/', 'ccnf_patches_*_synth_left_eye.mat', [], [], clmParams_eye);
clmParams_eye.multi_modal_types = patches_right_eye(1).multi_modal_types;
right_eye_inds_in_68 = [43,44,45,46,47,48];
left_eye_inds_in_68 = [37,38,39,40,41,42];
right_eye_inds_in_28 = [9 11 13 15 17 19];
left_eye_inds_in_28 = [9 11 13 15 17 19];
end