mirror of
https://gitcode.com/gh_mirrors/ope/OpenFace.git
synced 2026-05-17 04:37:50 +00:00
Interface changes to provide multi output support, also enforcing parameters in executables.
This commit is contained in:
@@ -78,7 +78,7 @@ bool RecorderCSV::Open(std::string output_file_name, bool is_sequence, bool outp
|
||||
// Different headers if we are writing out the results on a sequence or an individual image
|
||||
if(this->is_sequence)
|
||||
{
|
||||
output_file << "frame, timestamp, confidence, success";
|
||||
output_file << "frame, face_id, timestamp, confidence, success";
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -176,7 +176,7 @@ bool RecorderCSV::Open(std::string output_file_name, bool is_sequence, bool outp
|
||||
|
||||
}
|
||||
|
||||
void RecorderCSV::WriteLine(int observation_count, double time_stamp, bool landmark_detection_success, double landmark_confidence,
|
||||
void RecorderCSV::WriteLine(int face_id, int frame_num, double time_stamp, bool landmark_detection_success, double landmark_confidence,
|
||||
const cv::Mat_<double>& landmarks_2D, const cv::Mat_<double>& landmarks_3D, const cv::Mat_<double>& pdm_model_params, const cv::Vec6d& rigid_shape_params, cv::Vec6d& pose_estimate,
|
||||
const cv::Point3f& gazeDirection0, const cv::Point3f& gazeDirection1, const cv::Vec2d& gaze_angle, const std::vector<cv::Point2d>& eye_landmarks2d, const std::vector<cv::Point3d>& eye_landmarks3d,
|
||||
const std::vector<std::pair<std::string, double> >& au_intensities, const std::vector<std::pair<std::string, double> >& au_occurences)
|
||||
@@ -193,8 +193,9 @@ void RecorderCSV::WriteLine(int observation_count, double time_stamp, bool landm
|
||||
output_file << std::noshowpoint;
|
||||
if(is_sequence)
|
||||
{
|
||||
|
||||
output_file << std::setprecision(3);
|
||||
output_file << observation_count << ", " << time_stamp;
|
||||
output_file << frame_num << ", " << face_id << ", " << time_stamp;
|
||||
output_file << std::setprecision(2);
|
||||
output_file << ", " << landmark_confidence;
|
||||
output_file << std::setprecision(0);
|
||||
@@ -203,7 +204,7 @@ void RecorderCSV::WriteLine(int observation_count, double time_stamp, bool landm
|
||||
else
|
||||
{
|
||||
output_file << std::setprecision(3);
|
||||
output_file << observation_count << ", " << landmark_confidence;
|
||||
output_file << face_id << ", " << landmark_confidence;
|
||||
}
|
||||
// Output the estimated gaze
|
||||
if (output_gaze)
|
||||
|
||||
@@ -153,7 +153,7 @@ void RecorderOpenFace::PrepareRecording(const std::string& in_filename)
|
||||
CreateDirectory(aligned_output_directory);
|
||||
}
|
||||
|
||||
observation_count = 0;
|
||||
this->frame_number = 0;
|
||||
|
||||
}
|
||||
|
||||
@@ -275,11 +275,9 @@ void RecorderOpenFace::SetObservationVisualization(const cv::Mat &vis_track)
|
||||
|
||||
void RecorderOpenFace::WriteObservation()
|
||||
{
|
||||
observation_count++;
|
||||
|
||||
// Write out the CSV file (it will always be there, even if not outputting anything more but frame/face numbers)
|
||||
|
||||
if(observation_count == 1)
|
||||
// Write out the CSV file (it will always be there, even if not outputting anything more but frame/face numbers)
|
||||
if(!csv_recorder.isOpen())
|
||||
{
|
||||
// As we are writing out the header, work out some things like number of landmarks, names of AUs etc.
|
||||
int num_face_landmarks = landmarks_2D.rows / 2;
|
||||
@@ -315,7 +313,7 @@ void RecorderOpenFace::WriteObservation()
|
||||
params.outputAUs(), params.outputGaze(), num_face_landmarks, num_model_modes, num_eye_landmarks, au_names_class, au_names_reg);
|
||||
}
|
||||
|
||||
this->csv_recorder.WriteLine(observation_count, timestamp, landmark_detection_success,
|
||||
this->csv_recorder.WriteLine(face_id, frame_number, timestamp, landmark_detection_success,
|
||||
landmark_detection_confidence, landmarks_2D, landmarks_3D, pdm_params_local, pdm_params_global, head_pose,
|
||||
gaze_direction0, gaze_direction1, gaze_angle, eye_landmarks2D, eye_landmarks3D, au_intensities, au_occurences);
|
||||
|
||||
@@ -331,9 +329,9 @@ void RecorderOpenFace::WriteObservation()
|
||||
|
||||
// Filename is based on frame number
|
||||
if(params.isSequence())
|
||||
std::sprintf(name, "frame_det_%06d.bmp", observation_count);
|
||||
std::sprintf(name, "frame_det_%02d_%06d.bmp", face_id, frame_number);
|
||||
else
|
||||
std::sprintf(name, "face_det_%06d.bmp", observation_count);
|
||||
std::sprintf(name, "face_det_%06d.bmp", face_id);
|
||||
|
||||
// Construct the output filename
|
||||
boost::filesystem::path slash("/");
|
||||
@@ -387,6 +385,19 @@ void RecorderOpenFace::SetObservationTimestamp(double timestamp)
|
||||
this->timestamp = timestamp;
|
||||
}
|
||||
|
||||
// Required observations for video/image-sequence
|
||||
void RecorderOpenFace::SetObservationFrameNumber(double frame_number)
|
||||
{
|
||||
this->frame_number = frame_number;
|
||||
}
|
||||
|
||||
// If in multiple face mode, identifying which face was tracked
|
||||
void RecorderOpenFace::SetObservationFaceID(int face_id)
|
||||
{
|
||||
this->face_id = face_id;
|
||||
}
|
||||
|
||||
|
||||
void RecorderOpenFace::SetObservationLandmarks(const cv::Mat_<double>& landmarks_2D, const cv::Mat_<double>& landmarks_3D,
|
||||
const cv::Vec6d& pdm_params_global, const cv::Mat_<double>& pdm_params_local, double confidence, bool success)
|
||||
{
|
||||
|
||||
@@ -60,61 +60,61 @@ RecorderOpenFaceParameters::RecorderOpenFaceParameters(std::vector<std::string>
|
||||
|
||||
bool output_set = false;
|
||||
|
||||
output_2D_landmarks = false;
|
||||
output_3D_landmarks = false;
|
||||
output_model_params = false;
|
||||
output_pose = false;
|
||||
output_AUs = false;
|
||||
output_gaze = false;
|
||||
output_hog = false;
|
||||
output_tracked = false;
|
||||
output_aligned_faces = false;
|
||||
this->output_2D_landmarks = false;
|
||||
this->output_3D_landmarks = false;
|
||||
this->output_model_params = false;
|
||||
this->output_pose = false;
|
||||
this->output_AUs = false;
|
||||
this->output_gaze = false;
|
||||
this->output_hog = false;
|
||||
this->output_tracked = false;
|
||||
this->output_aligned_faces = false;
|
||||
|
||||
for (size_t i = 0; i < arguments.size(); ++i)
|
||||
{
|
||||
if (arguments[i].compare("-simalign") == 0)
|
||||
{
|
||||
output_aligned_faces = true;
|
||||
this->output_aligned_faces = true;
|
||||
output_set = true;
|
||||
}
|
||||
else if (arguments[i].compare("-hogalign") == 0)
|
||||
{
|
||||
output_hog = true;
|
||||
this->output_hog = true;
|
||||
output_set = true;
|
||||
}
|
||||
else if (arguments[i].compare("-2Dfp") == 0)
|
||||
{
|
||||
output_2D_landmarks = true;
|
||||
this->output_2D_landmarks = true;
|
||||
output_set = true;
|
||||
}
|
||||
else if (arguments[i].compare("-3Dfp") == 0)
|
||||
{
|
||||
output_3D_landmarks = true;
|
||||
this->output_3D_landmarks = true;
|
||||
output_set = true;
|
||||
}
|
||||
else if (arguments[i].compare("-pdmparams") == 0)
|
||||
{
|
||||
output_model_params = true;
|
||||
this->output_model_params = true;
|
||||
output_set = true;
|
||||
}
|
||||
else if (arguments[i].compare("-pose") == 0)
|
||||
{
|
||||
output_pose = true;
|
||||
this->output_pose = true;
|
||||
output_set = true;
|
||||
}
|
||||
else if (arguments[i].compare("-aus") == 0)
|
||||
{
|
||||
output_AUs = true;
|
||||
this->output_AUs = true;
|
||||
output_set = true;
|
||||
}
|
||||
else if (arguments[i].compare("-gaze") == 0)
|
||||
{
|
||||
output_gaze = true;
|
||||
this->output_gaze = true;
|
||||
output_set = true;
|
||||
}
|
||||
else if (arguments[i].compare("-tracked") == 0)
|
||||
{
|
||||
output_tracked = true;
|
||||
this->output_tracked = true;
|
||||
output_set = true;
|
||||
}
|
||||
}
|
||||
@@ -123,15 +123,15 @@ RecorderOpenFaceParameters::RecorderOpenFaceParameters(std::vector<std::string>
|
||||
|
||||
if (!output_set)
|
||||
{
|
||||
output_2D_landmarks = true;
|
||||
output_3D_landmarks = true;
|
||||
output_model_params = true;
|
||||
output_pose = true;
|
||||
output_AUs = true;
|
||||
output_gaze = true;
|
||||
output_hog = true;
|
||||
output_tracked = true;
|
||||
output_aligned_faces = true;
|
||||
this->output_2D_landmarks = true;
|
||||
this->output_3D_landmarks = true;
|
||||
this->output_model_params = true;
|
||||
this->output_pose = true;
|
||||
this->output_AUs = true;
|
||||
this->output_gaze = true;
|
||||
this->output_hog = true;
|
||||
this->output_tracked = true;
|
||||
this->output_aligned_faces = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user