Fixing some output bugs for C# and C++ models.
This commit is contained in:
parent
e6298919bc
commit
6eb46088f8
2 changed files with 28 additions and 10 deletions
|
@ -809,6 +809,7 @@ void post_process_output_file(FaceAnalysis::FaceAnalyser& face_analyser, string
|
||||||
// Now overwrite the whole file
|
// Now overwrite the whole file
|
||||||
std::ofstream outfile(output_file, ios_base::out);
|
std::ofstream outfile(output_file, ios_base::out);
|
||||||
// Write the header
|
// Write the header
|
||||||
|
outfile << std::setprecision(4);
|
||||||
outfile << output_file_contents[0].c_str() << endl;
|
outfile << output_file_contents[0].c_str() << endl;
|
||||||
|
|
||||||
// Write the contents
|
// Write the contents
|
||||||
|
@ -817,6 +818,7 @@ void post_process_output_file(FaceAnalysis::FaceAnalyser& face_analyser, string
|
||||||
std::vector<std::string> tokens;
|
std::vector<std::string> tokens;
|
||||||
boost::split(tokens, output_file_contents[i], boost::is_any_of(","));
|
boost::split(tokens, output_file_contents[i], boost::is_any_of(","));
|
||||||
|
|
||||||
|
boost::trim(tokens[0]);
|
||||||
outfile << tokens[0];
|
outfile << tokens[0];
|
||||||
|
|
||||||
for (int t = 1; t < (int)tokens.size(); ++t)
|
for (int t = 1; t < (int)tokens.size(); ++t)
|
||||||
|
@ -834,6 +836,7 @@ void post_process_output_file(FaceAnalysis::FaceAnalyser& face_analyser, string
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
boost::trim(tokens[t]);
|
||||||
outfile << ", " << tokens[t];
|
outfile << ", " << tokens[t];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -852,7 +855,7 @@ void prepareOutputFile(std::ofstream* output_file, bool output_2D_landmarks, boo
|
||||||
|
|
||||||
if (output_gaze)
|
if (output_gaze)
|
||||||
{
|
{
|
||||||
*output_file << ", gaze_0_x, gaze_0_y, gaze_0_z, gaze_1_x, gaze_1_y, gaze_2_z";
|
*output_file << ", gaze_0_x, gaze_0_y, gaze_0_z, gaze_1_x, gaze_1_y, gaze_1_z";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (output_pose)
|
if (output_pose)
|
||||||
|
@ -926,8 +929,14 @@ void outputAllFeatures(std::ofstream* output_file, bool output_2D_landmarks, boo
|
||||||
{
|
{
|
||||||
|
|
||||||
double confidence = 0.5 * (1 - face_model.detection_certainty);
|
double confidence = 0.5 * (1 - face_model.detection_certainty);
|
||||||
|
|
||||||
|
*output_file << std::setprecision(9);
|
||||||
|
*output_file << frame_count + 1 << ", " << time_stamp << ", ";
|
||||||
|
|
||||||
*output_file << frame_count + 1 << ", " << time_stamp << ", " << confidence << ", " << detection_success;
|
*output_file << std::setprecision(2);
|
||||||
|
*output_file << confidence << ", " << detection_success;
|
||||||
|
|
||||||
|
*output_file << std::setprecision(5);
|
||||||
|
|
||||||
// Output the estimated gaze
|
// Output the estimated gaze
|
||||||
if (output_gaze)
|
if (output_gaze)
|
||||||
|
@ -936,6 +945,7 @@ void outputAllFeatures(std::ofstream* output_file, bool output_2D_landmarks, boo
|
||||||
<< ", " << gazeDirection1.x << ", " << gazeDirection1.y << ", " << gazeDirection1.z;
|
<< ", " << gazeDirection1.x << ", " << gazeDirection1.y << ", " << gazeDirection1.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*output_file << std::setprecision(4);
|
||||||
// Output the estimated head pose
|
// Output the estimated head pose
|
||||||
if (output_pose)
|
if (output_pose)
|
||||||
{
|
{
|
||||||
|
@ -950,6 +960,7 @@ void outputAllFeatures(std::ofstream* output_file, bool output_2D_landmarks, boo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*output_file << std::setprecision(4);
|
||||||
// Output the detected 2D facial landmarks
|
// Output the detected 2D facial landmarks
|
||||||
if (output_2D_landmarks)
|
if (output_2D_landmarks)
|
||||||
{
|
{
|
||||||
|
|
|
@ -72,6 +72,7 @@ using CppInterop;
|
||||||
using CppInterop.LandmarkDetector;
|
using CppInterop.LandmarkDetector;
|
||||||
using CameraInterop;
|
using CameraInterop;
|
||||||
using FaceAnalyser_Interop;
|
using FaceAnalyser_Interop;
|
||||||
|
using System.Globalization;
|
||||||
|
|
||||||
namespace OpenFaceOffline
|
namespace OpenFaceOffline
|
||||||
{
|
{
|
||||||
|
@ -134,12 +135,12 @@ namespace OpenFaceOffline
|
||||||
bool record_tracked_vid = false;
|
bool record_tracked_vid = false;
|
||||||
|
|
||||||
// Check wich things need to be recorded
|
// Check wich things need to be recorded
|
||||||
bool record_2D_landmarks = false;
|
bool record_2D_landmarks = true;
|
||||||
bool record_3D_landmarks = false;
|
bool record_3D_landmarks = false;
|
||||||
bool record_model_params = false;
|
bool record_model_params = true;
|
||||||
bool record_pose = false;
|
bool record_pose = true;
|
||||||
bool record_AUs = false;
|
bool record_AUs = true;
|
||||||
bool record_gaze = false;
|
bool record_gaze = true;
|
||||||
|
|
||||||
// Visualisation options
|
// Visualisation options
|
||||||
bool show_tracked_video = true;
|
bool show_tracked_video = true;
|
||||||
|
@ -629,7 +630,7 @@ namespace OpenFaceOffline
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Recording the tracked model
|
// Recording the tracked model
|
||||||
RecordFrame(clnf_model, detectionSucceeding, frame_id, frame, grayFrame, (1000.0 * (double)frame_id)/fps,
|
RecordFrame(clnf_model, detectionSucceeding, frame_id + 1, frame, grayFrame, ((double)frame_id)/fps,
|
||||||
record_2D_landmarks, record_2D_landmarks, record_model_params, record_pose, record_AUs, record_gaze, fx, fy, cx, cy);
|
record_2D_landmarks, record_2D_landmarks, record_model_params, record_pose, record_AUs, record_gaze, fx, fy, cx, cy);
|
||||||
|
|
||||||
if (reset)
|
if (reset)
|
||||||
|
@ -828,6 +829,12 @@ namespace OpenFaceOffline
|
||||||
private void RecordFrame(CLNF clnf_model, bool success, int frame_ind, RawImage frame, RawImage grayscale_frame, double time_stamp, bool output_2D_landmarks, bool output_3D_landmarks,
|
private void RecordFrame(CLNF clnf_model, bool success, int frame_ind, RawImage frame, RawImage grayscale_frame, double time_stamp, bool output_2D_landmarks, bool output_3D_landmarks,
|
||||||
bool output_model_params, bool output_pose, bool output_AUs, bool output_gaze, double fx, double fy, double cx, double cy)
|
bool output_model_params, bool output_pose, bool output_AUs, bool output_gaze, double fx, double fy, double cx, double cy)
|
||||||
{
|
{
|
||||||
|
// Making sure that full stop is used instead of a comma for data recording
|
||||||
|
System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
|
||||||
|
customCulture.NumberFormat.NumberDecimalSeparator = ".";
|
||||||
|
|
||||||
|
System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;
|
||||||
|
|
||||||
double confidence = (-clnf_model.GetConfidence()) / 2.0 + 0.5;
|
double confidence = (-clnf_model.GetConfidence()) / 2.0 + 0.5;
|
||||||
|
|
||||||
List<double> pose = new List<double>();
|
List<double> pose = new List<double>();
|
||||||
|
@ -839,12 +846,12 @@ namespace OpenFaceOffline
|
||||||
{
|
{
|
||||||
var gaze = face_analyser.GetGazeCamera();
|
var gaze = face_analyser.GetGazeCamera();
|
||||||
|
|
||||||
output_features_file.Write(String.Format(", {0:F3}, {1:F3}, {2:F3}, {3:F3}, {4:F3}, {5:F3}", gaze.Item1.Item1, gaze.Item1.Item2, gaze.Item1.Item3,
|
output_features_file.Write(String.Format(", {0:F5}, {1:F5}, {2:F5}, {3:F5}, {4:F5}, {5:F5}", gaze.Item1.Item1, gaze.Item1.Item2, gaze.Item1.Item3,
|
||||||
gaze.Item2.Item1, gaze.Item2.Item2, gaze.Item2.Item3));
|
gaze.Item2.Item1, gaze.Item2.Item2, gaze.Item2.Item3));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (output_pose)
|
if (output_pose)
|
||||||
output_features_file.WriteLine(String.Format("{0:F3},{1:F3},{2:F3},{3:F3},{4:F3},{5:F3}", pose[0], pose[1], pose[2], pose[3], pose[4], pose[5]));
|
output_features_file.Write(String.Format(", {0:F3}, {1:F3}, {2:F3}, {3:F3}, {4:F3}, {5:F3}", pose[0], pose[1], pose[2], pose[3], pose[4], pose[5]));
|
||||||
|
|
||||||
if (output_2D_landmarks)
|
if (output_2D_landmarks)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue