forked from udarrr/opencv4nodejs-prebuilt-install
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHOGDescriptor.cc
218 lines (185 loc) · 7.76 KB
/
HOGDescriptor.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
#include "opencv_modules.h"
#ifdef HAVE_OPENCV_OBJDETECT
#include "HOGDescriptor.h"
#include "HOGDescriptorBindings.h"
Nan::Persistent<v8::FunctionTemplate> HOGDescriptor::constructor;
NAN_MODULE_INIT(HOGDescriptor::Init) {
v8::Local<v8::FunctionTemplate> ctor = Nan::New<v8::FunctionTemplate>(HOGDescriptor::New);
v8::Local<v8::ObjectTemplate> instanceTemplate = ctor->InstanceTemplate();
constructor.Reset(ctor);
ctor->SetClassName(FF::newString("HOGDescriptor"));
instanceTemplate->SetInternalFieldCount(1);
Nan::SetAccessor(instanceTemplate, FF::newString("winSize"), winSize_getter, winSize_setter);
Nan::SetAccessor(instanceTemplate, FF::newString("blockSize"), blockSize_getter, blockSize_setter);
Nan::SetAccessor(instanceTemplate, FF::newString("blockStride"), blockStride_getter, blockStride_setter);
Nan::SetAccessor(instanceTemplate, FF::newString("cellSize"), cellSize_getter, cellSize_setter);
Nan::SetAccessor(instanceTemplate, FF::newString("nbins"), nbins_getter, nbins_setter);
Nan::SetAccessor(instanceTemplate, FF::newString("derivAperture"), derivAperture_getter, derivAperture_setter);
Nan::SetAccessor(instanceTemplate, FF::newString("histogramNormType"), histogramNormType_getter, histogramNormType_setter);
Nan::SetAccessor(instanceTemplate, FF::newString("nlevels"), nlevels_getter, nlevels_setter);
Nan::SetAccessor(instanceTemplate, FF::newString("winSigma"), winSigma_getter, winSigma_setter);
Nan::SetAccessor(instanceTemplate, FF::newString("L2HysThreshold"), L2HysThreshold_getter, L2HysThreshold_setter);
Nan::SetAccessor(instanceTemplate, FF::newString("gammaCorrection"), gammaCorrection_getter, gammaCorrection_setter);
Nan::SetAccessor(instanceTemplate, FF::newString("signedGradient"), signedGradient_getter, signedGradient_setter);
Nan::SetMethod(ctor, "getDaimlerPeopleDetector", GetDaimlerPeopleDetector);
Nan::SetMethod(ctor, "getDefaultPeopleDetector", GetDefaultPeopleDetector);
Nan::SetPrototypeMethod(ctor, "compute", Compute);
Nan::SetPrototypeMethod(ctor, "computeAsync", ComputeAsync);
Nan::SetPrototypeMethod(ctor, "computeGradient", ComputeGradient);
Nan::SetPrototypeMethod(ctor, "computeGradientAsync", ComputeGradientAsync);
Nan::SetPrototypeMethod(ctor, "detect", Detect);
Nan::SetPrototypeMethod(ctor, "detectAsync", DetectAsync);
Nan::SetPrototypeMethod(ctor, "detectROI", DetectROI);
Nan::SetPrototypeMethod(ctor, "detectROIAsync", DetectROIAsync);
Nan::SetPrototypeMethod(ctor, "detectMultiScale", DetectMultiScale);
Nan::SetPrototypeMethod(ctor, "detectMultiScaleAsync", DetectMultiScaleAsync);
Nan::SetPrototypeMethod(ctor, "detectMultiScaleROI", DetectMultiScaleROI);
Nan::SetPrototypeMethod(ctor, "detectMultiScaleROIAsync", DetectMultiScaleROIAsync);
Nan::SetPrototypeMethod(ctor, "groupRectangles", GroupRectangles);
Nan::SetPrototypeMethod(ctor, "groupRectanglesAsync", GroupRectanglesAsync);
Nan::SetPrototypeMethod(ctor, "checkDetectorSize", CheckDetectorSize);
Nan::SetPrototypeMethod(ctor, "setSVMDetector", SetSVMDetector);
Nan::SetPrototypeMethod(ctor, "save", Save);
Nan::SetPrototypeMethod(ctor, "load", Load);
Nan::Set(target,FF::newString("HOGDescriptor"), FF::getFunction(ctor));
#if CV_VERSION_GREATER_EQUAL(4, 0, 0)
HistogramNormType::init(target);
#endif
};
NAN_METHOD(HOGDescriptor::New) {
constructorBinding<Constructor>(info);
}
NAN_METHOD(HOGDescriptor::GetDaimlerPeopleDetector) {
std::vector<float> detector = cv::HOGDescriptor::getDaimlerPeopleDetector();
info.GetReturnValue().Set(FF::FloatArrayConverter::wrap(detector));
}
NAN_METHOD(HOGDescriptor::GetDefaultPeopleDetector) {
std::vector<float> detector = cv::HOGDescriptor::getDefaultPeopleDetector();
info.GetReturnValue().Set(FF::FloatArrayConverter::wrap(detector));
}
NAN_METHOD(HOGDescriptor::CheckDetectorSize) {
info.GetReturnValue().Set(Nan::New(HOGDescriptor::unwrapSelf(info)->checkDetectorSize()));
}
NAN_METHOD(HOGDescriptor::SetSVMDetector) {
FF::TryCatch tryCatch("HOGDescriptor::SetSVMDetector");
std::vector<float> detector;
if (!FF::hasArg(info, 0) || FF::FloatArrayConverter::unwrapTo(&detector, info[0])) {
return tryCatch.throwError("expected detector to be an Array of type Number");
}
HOGDescriptor::unwrapSelf(info)->setSVMDetector(detector);
}
NAN_METHOD(HOGDescriptor::Save) {
FF::TryCatch tryCatch("HOGDescriptor::Save");
std::string path;
if (FF::StringConverter::arg(0, &path, info)) {
return tryCatch.reThrow();
}
HOGDescriptor::unwrapSelf(info)->save(path);
}
NAN_METHOD(HOGDescriptor::Load) {
FF::TryCatch tryCatch("HOGDescriptor::Load");
std::string path;
if (FF::StringConverter::arg(0, &path, info)) {
return tryCatch.reThrow();
}
HOGDescriptor::unwrapSelf(info)->load(path);
}
NAN_METHOD(HOGDescriptor::Compute) {
FF::executeSyncBinding(
std::make_shared<HOGDescriptorBindings::ComputeWorker>(HOGDescriptor::unwrapSelf(info)),
"HOGDescriptor::Compute",
info
);
}
NAN_METHOD(HOGDescriptor::ComputeAsync) {
FF::executeAsyncBinding(
std::make_shared<HOGDescriptorBindings::ComputeWorker>(HOGDescriptor::unwrapSelf(info)),
"HOGDescriptor::ComputeAsync",
info
);
}
NAN_METHOD(HOGDescriptor::ComputeGradient) {
FF::executeSyncBinding(
std::make_shared<HOGDescriptorBindings::ComputeGradientWorker>(HOGDescriptor::unwrapSelf(info)),
"HOGDescriptor::ComputeGradient",
info
);
}
NAN_METHOD(HOGDescriptor::ComputeGradientAsync) {
FF::executeAsyncBinding(
std::make_shared<HOGDescriptorBindings::ComputeGradientWorker>(HOGDescriptor::unwrapSelf(info)),
"HOGDescriptor::ComputeGradientAsync",
info
);
}
NAN_METHOD(HOGDescriptor::Detect) {
FF::executeSyncBinding(
std::make_shared<HOGDescriptorBindings::DetectWorker>(HOGDescriptor::unwrapSelf(info)),
"HOGDescriptor::Detect",
info
);
}
NAN_METHOD(HOGDescriptor::DetectAsync) {
FF::executeAsyncBinding(
std::make_shared<HOGDescriptorBindings::DetectWorker>(HOGDescriptor::unwrapSelf(info)),
"HOGDescriptor::DetectAsync",
info
);
}
NAN_METHOD(HOGDescriptor::DetectROI) {
FF::executeSyncBinding(
std::make_shared<HOGDescriptorBindings::DetectROIWorker>(HOGDescriptor::unwrapSelf(info)),
"HOGDescriptor::DetectROI",
info
);
}
NAN_METHOD(HOGDescriptor::DetectROIAsync) {
FF::executeAsyncBinding(
std::make_shared<HOGDescriptorBindings::DetectROIWorker>(HOGDescriptor::unwrapSelf(info)),
"HOGDescriptor::DetectROIAsync",
info
);
}
NAN_METHOD(HOGDescriptor::DetectMultiScale) {
FF::executeSyncBinding(
std::make_shared<HOGDescriptorBindings::DetectMultiScaleWorker>(HOGDescriptor::unwrapSelf(info)),
"HOGDescriptor::DetectMultiScale",
info
);
}
NAN_METHOD(HOGDescriptor::DetectMultiScaleAsync) {
FF::executeAsyncBinding(
std::make_shared<HOGDescriptorBindings::DetectMultiScaleWorker>(HOGDescriptor::unwrapSelf(info)),
"HOGDescriptor::DetectMultiScaleAsync",
info
);
}
NAN_METHOD(HOGDescriptor::DetectMultiScaleROI) {
FF::executeSyncBinding(
std::make_shared<HOGDescriptorBindings::DetectMultiScaleROIWorker>(HOGDescriptor::unwrapSelf(info)),
"HOGDescriptor::DetectMultiScaleROI",
info
);
}
NAN_METHOD(HOGDescriptor::DetectMultiScaleROIAsync) {
FF::executeAsyncBinding(
std::make_shared<HOGDescriptorBindings::DetectMultiScaleROIWorker>(HOGDescriptor::unwrapSelf(info)),
"HOGDescriptor::DetectMultiScaleROIAsync",
info
);
}
NAN_METHOD(HOGDescriptor::GroupRectangles) {
FF::executeSyncBinding(
std::make_shared<HOGDescriptorBindings::GroupRectanglesWorker>(HOGDescriptor::unwrapSelf(info)),
"HOGDescriptor::GroupRectangles",
info
);
}
NAN_METHOD(HOGDescriptor::GroupRectanglesAsync) {
FF::executeAsyncBinding(
std::make_shared<HOGDescriptorBindings::GroupRectanglesWorker>(HOGDescriptor::unwrapSelf(info)),
"HOGDescriptor::GroupRectanglesAsync",
info
);
}
#endif