36 #include <visp3/core/vpConfig.h>
38 #if defined(VISP_HAVE_CATCH2) && defined(VISP_HAVE_THREADS)
39 #define CATCH_CONFIG_ENABLE_BENCHMARKING
40 #define CATCH_CONFIG_RUNNER
45 #include <visp3/core/vpIoTools.h>
46 #include <visp3/io/vpImageIo.h>
47 #include <visp3/mbt/vpMbGenericTracker.h>
51 #include <visp3/gui/vpDisplayX.h>
58 #if VISP_HAVE_DATASET_VERSION >= 0x030600
59 std::string ext(
"png");
61 std::string ext(
"pgm");
66 char buffer[FILENAME_MAX];
67 snprintf(buffer, FILENAME_MAX, ipath.c_str(), cpt);
68 std::string image_filename = buffer;
80 for (
unsigned int i = 0; i < 3; i++) {
81 for (
unsigned int j = 0; j < 4; j++) {
82 CHECK(cMo1[i][j] == Approx(cMo2[i][j]).epsilon(std::numeric_limits<double>::epsilon()));
92 #if defined(VISP_HAVE_PUGIXML)
93 const bool verbose =
false;
138 const vpPoseVector initPose(0.02231950571, 0.1071368004, 0.5071128378, 2.100485509, 1.146812236, -0.4560126437);
145 TEST_CASE(
"Check MBT determinism sequential",
"[MBT_determinism]")
150 configureTracker(tracker1, cam);
159 for (
int cpt = 0; read_data(cpt, I); cpt++) {
170 std::cout <<
"First tracker, final cMo:\n" << cMo1 << std::endl;
174 configureTracker(tracker2, cam);
176 for (
int cpt = 0; read_data(cpt, I); cpt++) {
187 std::cout <<
"Second tracker, final cMo:\n" << cMo2 << std::endl;
190 checkPoses(cMo1, cMo2);
193 TEST_CASE(
"Check MBT determinism parallel",
"[MBT_determinism]")
196 std::future<vpHomogeneousMatrix> res_cMo1 = std::async(std::launch::async, []() {
199 configureTracker(tracker1, cam);
203 for (
int cpt = 0; read_data(cpt, I); cpt++) {
211 std::future<vpHomogeneousMatrix> res_cMo2 = std::async(std::launch::async, []() {
214 configureTracker(tracker2, cam);
218 for (
int cpt = 0; read_data(cpt, I); cpt++) {
227 std::cout <<
"Run both trackers in separate threads" << std::endl;
228 std::cout <<
"First tracker, final cMo:\n" << cMo1 << std::endl;
229 std::cout <<
"Second tracker, final cMo:\n" << cMo2 << std::endl;
232 checkPoses(cMo1, cMo2);
235 TEST_CASE(
"Check Stereo MBT determinism parallel",
"[MBT_determinism]")
238 std::future<vpHomogeneousMatrix> res_cMo1 = std::async(std::launch::async, []() {
241 configureTracker(tracker1, cam);
245 for (
int cpt = 0; read_data(cpt, I); cpt++) {
246 tracker1.
track(I, I);
253 std::future<vpHomogeneousMatrix> res_cMo2 = std::async(std::launch::async, []() {
256 configureTracker(tracker2, cam);
260 for (
int cpt = 0; read_data(cpt, I); cpt++) {
261 tracker2.
track(I, I);
269 std::cout <<
"Run both stereo trackers in separate threads" << std::endl;
270 std::cout <<
"First tracker, final cMo:\n" << cMo1 << std::endl;
271 std::cout <<
"Second tracker, final cMo:\n" << cMo2 << std::endl;
274 checkPoses(cMo1, cMo2);
277 int main(
int argc,
char *argv[])
279 Catch::Session session;
282 session.applyCommandLine(argc, argv);
284 int numFailed = session.run();
294 int main() {
return EXIT_SUCCESS; }
Generic class defining intrinsic camera parameters.
void initPersProjWithoutDistortion(double px, double py, double u0, double v0)
static const vpColor none
Use the X11 console to display images on unix-like OS. Thus to enable this class X11 should be instal...
static void display(const vpImage< unsigned char > &I)
static void displayFrame(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, double size, const vpColor &color=vpColor::none, unsigned int thickness=1, const vpImagePoint &offset=vpImagePoint(0, 0), const std::string &frameName="", const vpColor &textColor=vpColor::black, const vpImagePoint &textOffset=vpImagePoint(15, 15))
static void flush(const vpImage< unsigned char > &I)
Implementation of an homogeneous matrix and operations on such kind of matrices.
static void read(vpImage< unsigned char > &I, const std::string &filename, int backend=IO_DEFAULT_BACKEND)
Wrapper for the KLT (Kanade-Lucas-Tomasi) feature tracker implemented in OpenCV. Thus to enable this ...
void setBlockSize(int blockSize)
void setQuality(double qualityLevel)
void setHarrisFreeParameter(double harris_k)
void setMaxFeatures(int maxCount)
void setMinDistance(double minDistance)
void setWindowSize(int winSize)
void setPyramidLevels(int pyrMaxLevel)
static double rad(double deg)
Real-time 6D object pose tracking using its CAD model.
virtual void initFromPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo) vp_override
virtual void setKltMaskBorder(const unsigned int &e)
virtual void loadConfigFile(const std::string &configFile, bool verbose=true) vp_override
virtual void setAngleDisappear(const double &a) vp_override
virtual void getPose(vpHomogeneousMatrix &cMo) const vp_override
virtual void display(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, const vpColor &col, unsigned int thickness=1, bool displayFullModel=false) vp_override
virtual void getCameraParameters(vpCameraParameters &camera) const vp_override
virtual void setMovingEdge(const vpMe &me)
virtual void setAngleAppear(const double &a) vp_override
virtual void loadModel(const std::string &modelFile, bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix()) vp_override
virtual void setKltOpencv(const vpKltOpencv &t)
virtual void setFarClippingDistance(const double &dist) vp_override
virtual void setNearClippingDistance(const double &dist) vp_override
virtual void getClipping(unsigned int &clippingFlag1, unsigned int &clippingFlag2) const
virtual void setCameraParameters(const vpCameraParameters &camera) vp_override
virtual void setClipping(const unsigned int &flags) vp_override
virtual void setDisplayFeatures(bool displayF) vp_override
virtual void track(const vpImage< unsigned char > &I) vp_override
void setMu1(const double &mu_1)
void setRange(const unsigned int &range)
void setLikelihoodThresholdType(const vpLikelihoodThresholdType likelihood_threshold_type)
void setMaskNumber(const unsigned int &mask_number)
void setThreshold(const double &threshold)
void setSampleStep(const double &sample_step)
void setMaskSize(const unsigned int &mask_size)
void setMu2(const double &mu_2)
Implementation of a pose vector and operations on poses.