35#ifndef VP_RB_TRACKING_TIMINGS_H
36#define VP_RB_TRACKING_TIMINGS_H
41#include <visp3/core/vpConfig.h>
42#include <visp3/core/vpMath.h>
43#include <visp3/core/vpTime.h>
46#if defined(VISP_HAVE_NLOHMANN_JSON)
47#include VISP_NLOHMANN_JSON(json.hpp)
74 m_silhouetteExtractionTime = 0.0;
78 m_trackerIterStartTime.clear();
79 m_trackerFeatureExtractionTime.clear();
81 m_trackerFeatureTrackingTime.clear();
82 m_trackerVVSIterTimes.clear();
98 inline void setMaskTime(
double elapsed) { m_maskTime = elapsed; }
102 if (map.find(
id) == map.end()) {
103 map.insert(std::make_pair(
id, std::vector<double>()));
105 map.find(
id)->second.push_back(elapsed);
114 m_trackerIterStartTime[id] = elapsed;
119 m_trackerFeatureExtractionTime[id] = elapsed;
124 m_trackerFeatureTrackingTime[id] = elapsed;
129 m_trackerInitVVSTime[id] = elapsed;
134 m_driftTime = elapsed;
139 m_odometryTime = elapsed;
142#ifdef VISP_HAVE_NLOHMANN_JSON
152 double m_silhouetteExtractionTime;
155 double m_odometryTime;
157 std::map<int, std::vector<double>> m_trackerVVSIterTimes;
158 std::map<int, double> m_trackerIterStartTime;
159 std::map<int, double> m_trackerFeatureExtractionTime;
160 std::map<int, double> m_trackerFeatureTrackingTime;
161 std::map<int, double> m_trackerInitVVSTime;
167 const auto default_precision { out.precision() };
168 auto flags = out.flags();
169 out << std::setprecision(2) << std::fixed;
170 out <<
"====================================================" << std::endl;
171 out <<
"Render: " << timer.m_renderTime <<
"ms" << std::endl;
172 out <<
"Mask: " << timer.m_maskTime <<
"ms" << std::endl;
173 out <<
"Drift: " << timer.m_driftTime <<
"ms" << std::endl;
174 out <<
"Odometry: " << timer.m_odometryTime <<
"ms" << std::endl;
175 out <<
"Silhouette extraction: " << timer.m_silhouetteExtractionTime <<
"ms" << std::endl;
177 out <<
"Trackers: " << std::endl;
178 for (
const std::pair<
const int, std::vector<double>> &vvsIterData : timer.m_trackerVVSIterTimes) {
179 double trackingStartTime = timer.m_trackerIterStartTime.find(vvsIterData.first)->second;
180 double featTrackTime = timer.m_trackerFeatureTrackingTime.find(vvsIterData.first)->second;
181 double featExtractionTime = timer.m_trackerFeatureExtractionTime.find(vvsIterData.first)->second;
182 double initVVSTime = timer.m_trackerInitVVSTime.find(vvsIterData.first)->second;
184 double ttVVSIter = 0.f;
185 for (
double v : vvsIterData.second) {
188 out <<
"\t" << vvsIterData.first << std::endl;
189 out <<
"\t" <<
"\t" <<
"Tracking initialization: " << trackingStartTime <<
"ms" << std::endl;
190 out <<
"\t" <<
"\t" <<
"Feature extraction: " << featExtractionTime <<
"ms" << std::endl;
191 out <<
"\t" <<
"\t" <<
"Feature tracking: " << featTrackTime <<
"ms" << std::endl;
192 out <<
"\t" <<
"\t" <<
"VVS init: " << initVVSTime <<
"ms" << std::endl;
193 out <<
"\t" <<
"\t" <<
"VVS: " << ttVVSIter <<
"ms (" <<
vpMath::getMean(vvsIterData.second) <<
"ms"
196 out <<
"====================================================" << std::endl;
198 out << std::setprecision(default_precision);
202#ifdef VISP_HAVE_NLOHMANN_JSON
205 result.m_renderTime = j.at(
"render");
206 result.m_silhouetteExtractionTime = j.at(
"silhouetteExtraction");
207 result.m_maskTime = j.at(
"mask");
208 result.m_driftTime = j.at(
"drift");
209 result.m_odometryTime = j.at(
"odometry");
211 nlohmann::json jf = j.at(
"features");
212 result.m_trackerVVSIterTimes = jf.at(
"vvs");
213 result.m_trackerIterStartTime = jf.at(
"start");
214 result.m_trackerFeatureExtractionTime = jf.at(
"extraction");
215 result.m_trackerFeatureTrackingTime = jf.at(
"tracking");
216 result.m_trackerInitVVSTime = jf.at(
"vvsInit");
220 j[
"render"] = result.m_renderTime;
221 j[
"silhouetteExtraction"] = result.m_silhouetteExtractionTime;
222 j[
"mask"] = result.m_maskTime;
223 j[
"drift"] = result.m_driftTime;
224 j[
"odometry"] = result.m_odometryTime;
226 jf[
"vvs"] = result.m_trackerVVSIterTimes;
227 jf[
"start"] = result.m_trackerIterStartTime;
228 jf[
"extraction"] = result.m_trackerFeatureExtractionTime;
229 jf[
"tracking"] = result.m_trackerFeatureTrackingTime;
230 jf[
"vvsInit"] = result.m_trackerInitVVSTime;
error that can be emitted by ViSP classes.
@ notInitialized
Used to indicate that a parameter is not initialized.
static double getStdev(const std::vector< double > &v, bool useBesselCorrection=false)
static double getMean(const std::vector< double > &v)
void setSilhouetteTime(double elapsed)
void setDriftDetectionTime(double elapsed)
friend std::ostream & operator<<(std::ostream &, const vpRBTrackingTimings &)
friend void to_json(nlohmann::json &j, const vpRBTrackingTimings &result)
void setTrackerFeatureTrackingTime(int id, double elapsed)
void addTrackerVVSTime(int id, double elapsed)
void setTrackerIterStartTime(int id, double elapsed)
void setMaskTime(double elapsed)
void setInitVVSTime(int id, double elapsed)
void insertTrackerTime(std::map< int, std::vector< double > > &map, int id, double elapsed)
friend void from_json(const nlohmann::json &j, vpRBTrackingTimings &result)
void setRenderTime(double elapsed)
void setTrackerFeatureExtractionTime(int id, double elapsed)
void setOdometryTime(double elapsed)
VISP_EXPORT double measureTimeMs()