Skip to content
This repository was archived by the owner on Oct 18, 2023. It is now read-only.

Commit bc69acf

Browse files
Merge pull request justadudewhohacks#537 from piercus/CSRT-and-MOSSE
Tracking CSRT and MOSSE
2 parents fafb424 + d98fb9c commit bc69acf

17 files changed

+457
-7
lines changed

binding.gyp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@
8888
"cc/modules/tracking/Trackers/TrackerMedianFlow.cc",
8989
"cc/modules/tracking/Trackers/TrackerTLD.cc",
9090
"cc/modules/tracking/Trackers/TrackerGOTURN.cc",
91+
"cc/modules/tracking/Trackers/TrackerCSRT.cc",
92+
"cc/modules/tracking/Trackers/TrackerCSRTParams.cc",
93+
"cc/modules/tracking/Trackers/TrackerMOSSE.cc",
9194
"cc/modules/features2d/features2d.cc",
9295
"cc/modules/features2d/KeyPoint.cc",
9396
"cc/modules/features2d/KeyPointMatch.cc",

cc/macros.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ static FF_FUNC_TYPE ff_func = FF_FUNC_TYPE();
111111
#define FF_SETTER_UINT(clazz, name, prop) FF_SETTER(clazz, name, prop, ff_uint)
112112
#define FF_SETTER_NUMBER(clazz, name, prop) FF_SETTER(clazz, name, prop, ff_number)
113113
#define FF_SETTER_BOOL(clazz, name, prop) FF_SETTER(clazz, name, prop, ff_bool)
114+
#define FF_SETTER_STRING(clazz, name, prop) FF_SETTER(clazz, name, prop, ff_string)
114115

115116
#define FF_SETTER_SIMPLE(clazz, name, prop, converter) \
116117
NAN_SETTER(name##Set) { \

cc/modules/tracking/MultiTracker.cc

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ NAN_MODULE_INIT(MultiTracker::Init) {
1919
Nan::SetPrototypeMethod(ctor, "addMEDIANFLOW", MultiTracker::AddMEDIANFLOW);
2020
Nan::SetPrototypeMethod(ctor, "addTLD", MultiTracker::AddTLD);
2121
Nan::SetPrototypeMethod(ctor, "addKCF", MultiTracker::AddKCF);
22+
#if CV_MINOR_VERSION > 3
23+
Nan::SetPrototypeMethod(ctor, "addMOSSE", MultiTracker::AddTLD);
24+
#endif
25+
#if CV_MINOR_VERSION > 4 || (CV_MINOR_VERSION == 4 && CV_SUBMINOR_VERSION > 0)
26+
Nan::SetPrototypeMethod(ctor, "addCSRT", MultiTracker::AddKCF);
27+
#endif
2228
Nan::SetPrototypeMethod(ctor, "update", MultiTracker::Update);
2329

2430
target->Set(FF_NEW_STRING("MultiTracker"), ctor->GetFunction());
@@ -114,6 +120,29 @@ NAN_METHOD(MultiTracker::Update) {
114120
}
115121
FF_RETURN(jsRects);
116122
}
123+
#if CV_MINOR_VERSION > 3
124+
125+
NAN_METHOD(MultiTracker::AddMOSSE) {
126+
FF_METHOD_CONTEXT("MultiTracker::AddMOSSE");
127+
FF_ARG_INSTANCE(0, cv::Mat image, Mat::constructor, FF_UNWRAP_MAT_AND_GET);
128+
FF_ARG_INSTANCE(1, cv::Rect2d boundingBox, Rect::constructor, FF_UNWRAP_RECT_AND_GET);
129+
cv::Ptr<cv::Tracker> type = cv::TrackerMOSSE::create();
130+
bool ret = FF_UNWRAP(info.This(), MultiTracker)->tracker.add(type, image, boundingBox);
131+
FF_RETURN(Nan::New(ret));
132+
}
133+
134+
#endif
135+
#if CV_MINOR_VERSION > 4 || (CV_MINOR_VERSION == 4 && CV_SUBMINOR_VERSION > 0)
136+
137+
NAN_METHOD(MultiTracker::AddCSRT) {
138+
FF_METHOD_CONTEXT("MultiTracker::AddCSRT");
139+
FF_ARG_INSTANCE(0, cv::Mat image, Mat::constructor, FF_UNWRAP_MAT_AND_GET);
140+
FF_ARG_INSTANCE(1, cv::Rect2d boundingBox, Rect::constructor, FF_UNWRAP_RECT_AND_GET);
141+
cv::Ptr<cv::Tracker> type = cv::TrackerCSRT::create();
142+
bool ret = FF_UNWRAP(info.This(), MultiTracker)->tracker.add(type, image, boundingBox);
143+
FF_RETURN(Nan::New(ret));
144+
}
145+
#endif
117146

118147
#endif
119148

cc/modules/tracking/MultiTracker.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ class MultiTracker : public Nan::ObjectWrap {
2020
static NAN_METHOD(AddMEDIANFLOW);
2121
static NAN_METHOD(AddTLD);
2222
static NAN_METHOD(AddKCF);
23+
static NAN_METHOD(AddMOSSE);
24+
static NAN_METHOD(AddCSRT);
2325
static NAN_METHOD(Update);
2426

2527
static Nan::Persistent<v8::FunctionTemplate> constructor;
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#ifdef HAVE_TRACKING
2+
3+
#include "TrackerCSRT.h"
4+
#include "TrackerCSRTParams.h"
5+
6+
#if CV_MINOR_VERSION > 4 || (CV_MINOR_VERSION == 4 && CV_SUBMINOR_VERSION > 0)
7+
8+
Nan::Persistent<v8::FunctionTemplate> TrackerCSRT::constructor;
9+
10+
NAN_MODULE_INIT(TrackerCSRT::Init) {
11+
v8::Local<v8::FunctionTemplate> ctor = Nan::New<v8::FunctionTemplate>(TrackerCSRT::New);
12+
v8::Local<v8::ObjectTemplate> instanceTemplate = ctor->InstanceTemplate();
13+
14+
Tracker::Init(ctor);
15+
TrackerCSRTParams::Init(target);
16+
17+
constructor.Reset(ctor);
18+
ctor->SetClassName(FF_NEW_STRING("TrackerCSRT"));
19+
instanceTemplate->SetInternalFieldCount(1);
20+
21+
target->Set(FF_NEW_STRING("TrackerCSRT"), ctor->GetFunction());
22+
};
23+
24+
25+
NAN_METHOD(TrackerCSRT::New) {
26+
FF_ASSERT_CONSTRUCT_CALL(TrackerCSRT);
27+
FF_METHOD_CONTEXT("TrackerCSRT::New");
28+
29+
FF_ARG_INSTANCE_IFDEF(
30+
0,
31+
cv::TrackerCSRT::Params params,
32+
TrackerCSRTParams::constructor,
33+
FF_UNWRAP_TRACKERCSRTPARAMS_AND_GET,
34+
cv::TrackerCSRT::Params()
35+
);
36+
37+
TrackerCSRT* self = new TrackerCSRT();
38+
self->tracker = cv::TrackerCSRT::create(params);
39+
self->Wrap(info.Holder());
40+
FF_RETURN(info.Holder());
41+
};
42+
43+
#endif
44+
45+
#endif
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#include "../Tracker.h"
2+
3+
#if CV_MINOR_VERSION > 4 || (CV_MINOR_VERSION == 4 && CV_SUBMINOR_VERSION > 0)
4+
5+
#ifndef __FF_TRACKERCSRT_H__
6+
#define __FF_TRACKERCSRT_H__
7+
8+
class TrackerCSRT : public Tracker {
9+
public:
10+
cv::Ptr<cv::TrackerCSRT> tracker;
11+
12+
static NAN_MODULE_INIT(Init);
13+
static NAN_METHOD(New);
14+
15+
static Nan::Persistent<v8::FunctionTemplate> constructor;
16+
17+
cv::Ptr<cv::Tracker> getTracker() {
18+
return tracker;
19+
}
20+
};
21+
22+
#endif
23+
24+
#endif
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#ifdef HAVE_TRACKING
2+
3+
#include "TrackerCSRTParams.h"
4+
5+
#if CV_MINOR_VERSION > 4 || (CV_MINOR_VERSION == 4 && CV_SUBMINOR_VERSION > 0)
6+
7+
Nan::Persistent<v8::FunctionTemplate> TrackerCSRTParams::constructor;
8+
9+
NAN_MODULE_INIT(TrackerCSRTParams::Init) {
10+
v8::Local<v8::FunctionTemplate> ctor = Nan::New<v8::FunctionTemplate>(TrackerCSRTParams::New);
11+
v8::Local<v8::ObjectTemplate> instanceTemplate = ctor->InstanceTemplate();
12+
13+
constructor.Reset(ctor);
14+
ctor->SetClassName(FF_NEW_STRING("TrackerCSRTParams"));
15+
instanceTemplate->SetInternalFieldCount(1);
16+
17+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("admm_iterations"), admm_iterationsGet, admm_iterationsSet);
18+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("background_ratio"), background_ratioGet, background_ratioSet);
19+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("cheb_attenuation"), cheb_attenuationGet, cheb_attenuationSet);
20+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("filter_lr"), filter_lrGet, filter_lrSet);
21+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("gsl_sigma"), gsl_sigmaGet, gsl_sigmaSet);
22+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("histogram_bins"), histogram_binsGet, histogram_binsSet);
23+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("histogram_lr"), histogram_lrGet, histogram_lrSet);
24+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("hog_clip"), hog_clipGet, hog_clipSet);
25+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("hog_orientations"), hog_orientationsGet, hog_orientationsSet);
26+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("kaiser_alpha"), kaiser_alphaGet, kaiser_alphaSet);
27+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("num_hog_channels_used"), num_hog_channels_usedGet, num_hog_channels_usedSet);
28+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("number_of_scales"), number_of_scalesGet, number_of_scalesSet);
29+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("padding"), paddingGet, paddingSet);
30+
#if CV_MINOR_VERSION > 4 || (CV_MINOR_VERSION == 4 && CV_SUBMINOR_VERSION > 3)
31+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("psr_threshold"), psr_thresholdGet, psr_thresholdSet);
32+
#endif
33+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("scale_lr"), scale_lrGet, scale_lrSet);
34+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("scale_model_max_area"), scale_model_max_areaGet, scale_model_max_areaSet);
35+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("scale_sigma_factor"), scale_sigma_factorGet, scale_sigma_factorSet);
36+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("scale_step"), scale_stepGet, scale_stepSet);
37+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("template_size"), template_sizeGet, template_sizeSet);
38+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("use_channel_weights"), use_channel_weightsGet, use_channel_weightsSet);
39+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("use_color_names"), use_color_namesGet, use_color_namesSet);
40+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("use_gray"), use_grayGet, use_graySet);
41+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("use_hog"), use_hogGet, use_hogSet);
42+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("use_rgb"), use_rgbGet, use_rgbSet);
43+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("use_segmentation"), use_segmentationGet, use_segmentationSet);
44+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("weights_lr"), weights_lrGet, weights_lrSet);
45+
Nan::SetAccessor(instanceTemplate, FF_NEW_STRING("window_function"), window_functionGet, window_functionSet);
46+
47+
target->Set(FF_NEW_STRING("TrackerCSRTParams"), ctor->GetFunction());
48+
};
49+
50+
NAN_METHOD(TrackerCSRTParams::New) {
51+
FF_ASSERT_CONSTRUCT_CALL(TrackerCSRTParams);
52+
FF_METHOD_CONTEXT("TrackerCSRTParams::New");
53+
TrackerCSRTParams* self = new TrackerCSRTParams();
54+
self->params = cv::TrackerCSRT::Params();
55+
self->Wrap(info.Holder());
56+
FF_RETURN(info.Holder());
57+
};
58+
59+
#endif
60+
61+
#endif
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#include "macros.h"
2+
#include <opencv2/tracking.hpp>
3+
4+
#if CV_MINOR_VERSION > 4 || (CV_MINOR_VERSION == 4 && CV_SUBMINOR_VERSION > 0)
5+
6+
#ifndef __FF_TRACKERCSRTPARAMS_H__
7+
#define __FF_TRACKERCSRTPARAMS_H__
8+
9+
class TrackerCSRTParams : public Nan::ObjectWrap {
10+
public:
11+
cv::TrackerCSRT::Params params;
12+
13+
static NAN_MODULE_INIT(Init);
14+
static NAN_METHOD(New);
15+
16+
static FF_GETTER(TrackerCSRTParams, admm_iterationsGet, params.admm_iterations);
17+
static FF_SETTER_INT(TrackerCSRTParams, admm_iterations, params.admm_iterations);
18+
static FF_GETTER(TrackerCSRTParams, background_ratioGet, params.background_ratio);
19+
static FF_SETTER_INT(TrackerCSRTParams, background_ratio, params.background_ratio);
20+
static FF_GETTER(TrackerCSRTParams, cheb_attenuationGet, params.cheb_attenuation);
21+
static FF_SETTER_NUMBER(TrackerCSRTParams, cheb_attenuation, params.cheb_attenuation);
22+
static FF_GETTER(TrackerCSRTParams, filter_lrGet, params.filter_lr);
23+
static FF_SETTER_NUMBER(TrackerCSRTParams, filter_lr, params.filter_lr);
24+
static FF_GETTER(TrackerCSRTParams, gsl_sigmaGet, params.gsl_sigma);
25+
static FF_SETTER_NUMBER(TrackerCSRTParams, gsl_sigma, params.gsl_sigma);
26+
static FF_GETTER(TrackerCSRTParams, histogram_binsGet, params.histogram_bins);
27+
static FF_SETTER_INT(TrackerCSRTParams, histogram_bins, params.histogram_bins);
28+
static FF_GETTER(TrackerCSRTParams, histogram_lrGet, params.histogram_lr);
29+
static FF_SETTER_NUMBER(TrackerCSRTParams, histogram_lr, params.histogram_lr);
30+
static FF_GETTER(TrackerCSRTParams, hog_clipGet, params.hog_clip);
31+
static FF_SETTER_NUMBER(TrackerCSRTParams, hog_clip, params.hog_clip);
32+
static FF_GETTER(TrackerCSRTParams, hog_orientationsGet, params.hog_orientations);
33+
static FF_SETTER_NUMBER(TrackerCSRTParams, hog_orientations, params.hog_orientations);
34+
static FF_GETTER(TrackerCSRTParams, kaiser_alphaGet, params.kaiser_alpha);
35+
static FF_SETTER_NUMBER(TrackerCSRTParams, kaiser_alpha, params.kaiser_alpha);
36+
static FF_GETTER(TrackerCSRTParams, num_hog_channels_usedGet, params.num_hog_channels_used);
37+
static FF_SETTER_INT(TrackerCSRTParams, num_hog_channels_used, params.num_hog_channels_used);
38+
static FF_GETTER(TrackerCSRTParams, number_of_scalesGet, params.number_of_scales);
39+
static FF_SETTER_INT(TrackerCSRTParams, number_of_scales, params.number_of_scales);
40+
static FF_GETTER(TrackerCSRTParams, paddingGet, params.padding);
41+
static FF_SETTER_NUMBER(TrackerCSRTParams, padding, params.padding);
42+
43+
#if CV_MINOR_VERSION > 4 || (CV_MINOR_VERSION == 4 && CV_SUBMINOR_VERSION > 3)
44+
static FF_GETTER(TrackerCSRTParams, psr_thresholdGet, params.psr_threshold);
45+
static FF_SETTER_NUMBER(TrackerCSRTParams, psr_threshold, params.psr_threshold);
46+
#endif
47+
48+
static FF_GETTER(TrackerCSRTParams, scale_lrGet, params.scale_lr);
49+
static FF_SETTER_NUMBER(TrackerCSRTParams, scale_lr, params.scale_lr);
50+
static FF_GETTER(TrackerCSRTParams, scale_model_max_areaGet, params.scale_model_max_area);
51+
static FF_SETTER_NUMBER(TrackerCSRTParams, scale_model_max_area, params.scale_model_max_area);
52+
static FF_GETTER(TrackerCSRTParams, scale_sigma_factorGet, params.scale_sigma_factor);
53+
static FF_SETTER_NUMBER(TrackerCSRTParams, scale_sigma_factor, params.scale_sigma_factor);
54+
static FF_GETTER(TrackerCSRTParams, scale_stepGet, params.scale_step);
55+
static FF_SETTER_NUMBER(TrackerCSRTParams, scale_step, params.scale_step);
56+
static FF_GETTER(TrackerCSRTParams, template_sizeGet, params.template_size);
57+
static FF_SETTER_NUMBER(TrackerCSRTParams, template_size, params.template_size);
58+
static FF_GETTER(TrackerCSRTParams, use_channel_weightsGet, params.use_channel_weights);
59+
static FF_SETTER_BOOL(TrackerCSRTParams, use_channel_weights, params.use_channel_weights);
60+
static FF_GETTER(TrackerCSRTParams, use_color_namesGet, params.use_color_names);
61+
static FF_SETTER_BOOL(TrackerCSRTParams, use_color_names, params.use_color_names);
62+
static FF_GETTER(TrackerCSRTParams, use_grayGet, params.use_gray);
63+
static FF_SETTER_BOOL(TrackerCSRTParams, use_gray, params.use_gray);
64+
static FF_GETTER(TrackerCSRTParams, use_hogGet, params.use_hog);
65+
static FF_SETTER_BOOL(TrackerCSRTParams, use_hog, params.use_hog);
66+
static FF_GETTER(TrackerCSRTParams, use_rgbGet, params.use_rgb);
67+
static FF_SETTER_BOOL(TrackerCSRTParams, use_rgb, params.use_rgb);
68+
static FF_GETTER(TrackerCSRTParams, use_segmentationGet, params.use_segmentation);
69+
static FF_SETTER_BOOL(TrackerCSRTParams, use_segmentation, params.use_segmentation);
70+
static FF_GETTER(TrackerCSRTParams, weights_lrGet, params.weights_lr);
71+
static FF_SETTER_NUMBER(TrackerCSRTParams, weights_lr, params.weights_lr);
72+
static FF_GETTER_SIMPLE(TrackerCSRTParams, window_functionGet, params.window_function, StringConverter);
73+
static FF_SETTER_STRING(TrackerCSRTParams, window_function, params.window_function);
74+
75+
static Nan::Persistent<v8::FunctionTemplate> constructor;
76+
};
77+
78+
#define FF_UNWRAP_TRACKERCSRTPARAMS(obj) FF_UNWRAP(obj, TrackerCSRTParams)
79+
#define FF_UNWRAP_TRACKERCSRTPARAMS_AND_GET(obj) FF_UNWRAP_TRACKERCSRTPARAMS(obj)->params
80+
81+
#endif
82+
83+
#endif
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#ifdef HAVE_TRACKING
2+
3+
#include "TrackerMOSSE.h"
4+
5+
#if CV_MINOR_VERSION > 3
6+
7+
Nan::Persistent<v8::FunctionTemplate> TrackerMOSSE::constructor;
8+
9+
NAN_MODULE_INIT(TrackerMOSSE::Init) {
10+
v8::Local<v8::FunctionTemplate> ctor = Nan::New<v8::FunctionTemplate>(TrackerMOSSE::New);
11+
v8::Local<v8::ObjectTemplate> instanceTemplate = ctor->InstanceTemplate();
12+
13+
Tracker::Init(ctor);
14+
15+
constructor.Reset(ctor);
16+
ctor->SetClassName(FF_NEW_STRING("TrackerMOSSE"));
17+
instanceTemplate->SetInternalFieldCount(1);
18+
19+
target->Set(FF_NEW_STRING("TrackerMOSSE"), ctor->GetFunction());
20+
};
21+
22+
23+
NAN_METHOD(TrackerMOSSE::New) {
24+
FF_ASSERT_CONSTRUCT_CALL(TrackerMOSSE);
25+
FF_METHOD_CONTEXT("TrackerMOSSE::New");
26+
27+
TrackerMOSSE* self = new TrackerMOSSE();
28+
self->tracker = cv::TrackerMOSSE::create();
29+
self->Wrap(info.Holder());
30+
FF_RETURN(info.Holder());
31+
};
32+
33+
#endif
34+
35+
#endif
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#include "../Tracker.h"
2+
3+
#if CV_MINOR_VERSION > 3
4+
5+
#ifndef __FF_TRACKERMOSSE_H__
6+
#define __FF_TRACKERMOSSE_H__
7+
8+
class TrackerMOSSE : public Tracker {
9+
public:
10+
cv::Ptr<cv::TrackerMOSSE> tracker;
11+
12+
static NAN_MODULE_INIT(Init);
13+
static NAN_METHOD(New);
14+
15+
static Nan::Persistent<v8::FunctionTemplate> constructor;
16+
17+
cv::Ptr<cv::Tracker> getTracker() {
18+
return tracker;
19+
}
20+
};
21+
22+
#endif
23+
24+
#endif

0 commit comments

Comments
 (0)