From 7e16619529dfa115db8b0fa50c48b593f8298440 Mon Sep 17 00:00:00 2001 From: Tadas Baltrusaitis Date: Wed, 22 Nov 2017 09:03:29 +0000 Subject: [PATCH] Bug fix in opening video sequences revealed by a demo script. --- exe/FaceLandmarkVid/FaceLandmarkVid.cpp | 28 ++++++++----- .../FaceLandmarkVidMulti.cpp | 28 ++++++++----- matlab_runners/Demos/run_demo_videos.m | 40 ++++++------------- 3 files changed, 47 insertions(+), 49 deletions(-) diff --git a/exe/FaceLandmarkVid/FaceLandmarkVid.cpp b/exe/FaceLandmarkVid/FaceLandmarkVid.cpp index fa59089..87e210b 100644 --- a/exe/FaceLandmarkVid/FaceLandmarkVid.cpp +++ b/exe/FaceLandmarkVid/FaceLandmarkVid.cpp @@ -110,19 +110,25 @@ int main (int argc, char **argv) { // The sequence reader chooses what to open based on command line arguments provided - if(!sequence_reader.Open(arguments) && sequence_reader.no_input_specified) + if(!sequence_reader.Open(arguments)) { - // If that fails, revert to webcam - INFO_STREAM("No input specified, attempting to open a webcam 0"); - if (!sequence_reader.OpenWebcam(0)) - ERROR_STREAM("Failed to open the webcam"); + // If failed to open because no input files specified, attempt to open a webcam + if (sequence_reader.no_input_specified) + { + // If that fails, revert to webcam + INFO_STREAM("No input specified, attempting to open a webcam 0"); + if (!sequence_reader.OpenWebcam(0)) + { + ERROR_STREAM("Failed to open the webcam"); + break; + } + } + else + { + ERROR_STREAM("Failed to open a sequence"); + break; + } } - else - { - ERROR_STREAM("Failed to open a sequence"); - break; - } - INFO_STREAM("Device or file opened"); cv::Mat captured_image = sequence_reader.GetNextFrame(); diff --git a/exe/FaceLandmarkVidMulti/FaceLandmarkVidMulti.cpp b/exe/FaceLandmarkVidMulti/FaceLandmarkVidMulti.cpp index f707d1d..484b677 100644 --- a/exe/FaceLandmarkVidMulti/FaceLandmarkVidMulti.cpp +++ b/exe/FaceLandmarkVidMulti/FaceLandmarkVidMulti.cpp @@ -156,19 +156,25 @@ int main (int argc, char **argv) { // The sequence reader chooses what to open based on command line arguments provided - if (!sequence_reader.Open(arguments) && sequence_reader.no_input_specified) + if (!sequence_reader.Open(arguments)) { - // If that fails, revert to webcam - INFO_STREAM("No input specified, attempting to open a webcam 0"); - if (!sequence_reader.OpenWebcam(0)) - ERROR_STREAM("Failed to open the webcam"); + // If failed to open because no input files specified, attempt to open a webcam + if (sequence_reader.no_input_specified) + { + // If that fails, revert to webcam + INFO_STREAM("No input specified, attempting to open a webcam 0"); + if (!sequence_reader.OpenWebcam(0)) + { + ERROR_STREAM("Failed to open the webcam"); + break; + } + } + else + { + ERROR_STREAM("Failed to open a sequence"); + break; + } } - else - { - ERROR_STREAM("Failed to open a sequence"); - break; - } - INFO_STREAM("Device or file opened"); cv::Mat captured_image = sequence_reader.GetNextFrame(); diff --git a/matlab_runners/Demos/run_demo_videos.m b/matlab_runners/Demos/run_demo_videos.m index 0a83a99..f6accd5 100644 --- a/matlab_runners/Demos/run_demo_videos.m +++ b/matlab_runners/Demos/run_demo_videos.m @@ -6,45 +6,31 @@ else executable = '"../../x64/Release/FaceLandmarkVid.exe"'; end -output = './demo_vid/'; - -if(~exist(output, 'file')) - mkdir(output) -end +output = './demo_vids/'; in_files = dir('../../samples/*.wmv'); in_files = cat(1, in_files, dir('../../samples/*.avi')); -% some parameters -verbose = true; -% Trained on in the wild and multi-pie data (less accurate SVR/CLM model) -%model = 'model/main_clm_general.txt'; -% Trained on in-the-wild -%model = 'model/main_clm_wild.txt'; +model = 'model/main_clnf_general.txt'; % Trained on in the wild and multi-pie data (a CLNF model) -% Trained on in the wild and multi-pie data (more accurate CLNF model) -model = 'model/main_clnf_general.txt'; -% Trained on in-the-wild -%model = 'model/main_clnf_wild.txt'; +% Uncomment the below models if you want to try them +%model = 'model/main_clnf_wild.txt'; % Trained on in-the-wild data only + +%model = 'model/main_clm_general.txt'; % Trained on in the wild and multi-pie data (less accurate SVR/CLM model) +%model = 'model/main_clm_wild.txt'; % Trained on in-the-wild + +% Create a command that will run the tracker on set of videos, +% and visualize the output (-verbose) +command = sprintf('%s -mloc "%s" -verbose', executable, model); -command = executable; -command = cat(2, command, [' -mloc "', model, '"']); % add all videos to single argument list (so as not to load the model anew % for every video) for i=1:numel(in_files) - - inputFile = ['../../samples/', in_files(i).name]; - [~, name, ~] = fileparts(inputFile); - + inputFile = ['../../samples/', in_files(i).name]; command = cat(2, command, [' -f "' inputFile '" ']); - - if(verbose) - outputVideo = ['"' output name '.avi' '"']; - command = cat(2, command, [' -ov ' outputVideo]); - end - end +% Call the executable if(isunix) unix(command); else