Bug fix in opening video sequences revealed by a demo script.

This commit is contained in:
Tadas Baltrusaitis 2017-11-22 09:03:29 +00:00
parent 488cd4d92f
commit 7e16619529
3 changed files with 47 additions and 49 deletions

View file

@ -110,19 +110,25 @@ int main (int argc, char **argv)
{ {
// The sequence reader chooses what to open based on command line arguments provided // 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 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 // If that fails, revert to webcam
INFO_STREAM("No input specified, attempting to open a webcam 0"); INFO_STREAM("No input specified, attempting to open a webcam 0");
if (!sequence_reader.OpenWebcam(0)) if (!sequence_reader.OpenWebcam(0))
{
ERROR_STREAM("Failed to open the webcam"); ERROR_STREAM("Failed to open the webcam");
break;
}
} }
else else
{ {
ERROR_STREAM("Failed to open a sequence"); ERROR_STREAM("Failed to open a sequence");
break; break;
} }
}
INFO_STREAM("Device or file opened"); INFO_STREAM("Device or file opened");
cv::Mat captured_image = sequence_reader.GetNextFrame(); cv::Mat captured_image = sequence_reader.GetNextFrame();

View file

@ -156,19 +156,25 @@ int main (int argc, char **argv)
{ {
// The sequence reader chooses what to open based on command line arguments provided // 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 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 // If that fails, revert to webcam
INFO_STREAM("No input specified, attempting to open a webcam 0"); INFO_STREAM("No input specified, attempting to open a webcam 0");
if (!sequence_reader.OpenWebcam(0)) if (!sequence_reader.OpenWebcam(0))
{
ERROR_STREAM("Failed to open the webcam"); ERROR_STREAM("Failed to open the webcam");
break;
}
} }
else else
{ {
ERROR_STREAM("Failed to open a sequence"); ERROR_STREAM("Failed to open a sequence");
break; break;
} }
}
INFO_STREAM("Device or file opened"); INFO_STREAM("Device or file opened");
cv::Mat captured_image = sequence_reader.GetNextFrame(); cv::Mat captured_image = sequence_reader.GetNextFrame();

View file

@ -6,45 +6,31 @@ else
executable = '"../../x64/Release/FaceLandmarkVid.exe"'; executable = '"../../x64/Release/FaceLandmarkVid.exe"';
end end
output = './demo_vid/'; output = './demo_vids/';
if(~exist(output, 'file'))
mkdir(output)
end
in_files = dir('../../samples/*.wmv'); in_files = dir('../../samples/*.wmv');
in_files = cat(1, in_files, dir('../../samples/*.avi')); 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_clnf_general.txt'; % Trained on in the wild and multi-pie data (a CLNF model)
%model = 'model/main_clm_general.txt';
% Trained on in-the-wild
%model = 'model/main_clm_wild.txt';
% Trained on in the wild and multi-pie data (more accurate CLNF model) % Uncomment the below models if you want to try them
model = 'model/main_clnf_general.txt'; %model = 'model/main_clnf_wild.txt'; % Trained on in-the-wild data only
% Trained on in-the-wild
%model = 'model/main_clnf_wild.txt'; %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 % add all videos to single argument list (so as not to load the model anew
% for every video) % for every video)
for i=1:numel(in_files) for i=1:numel(in_files)
inputFile = ['../../samples/', in_files(i).name]; inputFile = ['../../samples/', in_files(i).name];
[~, name, ~] = fileparts(inputFile);
command = cat(2, command, [' -f "' inputFile '" ']); command = cat(2, command, [' -f "' inputFile '" ']);
if(verbose)
outputVideo = ['"' output name '.avi' '"'];
command = cat(2, command, [' -ov ' outputVideo]);
end
end end
% Call the executable
if(isunix) if(isunix)
unix(command); unix(command);
else else