Skip to content

Commit c1b0fc8

Browse files
authored
Merge pull request #165 from figamore/NanoTrack-Implementation
TrackerNano implementation
2 parents e1412d0 + 3e3f4af commit c1b0fc8

File tree

14 files changed

+6478
-5
lines changed

14 files changed

+6478
-5
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[![NPM Version](https://img.shields.io/npm/v/@u4/opencv4nodejs.svg?style=flat)](https://www.npmjs.org/package/@u4/opencv4nodejs)
44

5-
## Getting starts
5+
## Getting started
66

77
Opencv4nodejs can be linked to a prebuild openCV 3 or 4. or can build its own openCV using [@u4/opencv-build](https://www.npmjs.com/package/@u4/opencv-build),
88
In this case, you have to choose which version you want to link.

binding.gyp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
"cc/tracking/Trackers/TrackerMedianFlow.cc",
9191
"cc/tracking/Trackers/TrackerTLD.cc",
9292
"cc/tracking/Trackers/TrackerGOTURN.cc",
93+
"cc/tracking/Trackers/TrackerNano.cc",
9394
"cc/tracking/Trackers/TrackerCSRT.cc",
9495
"cc/tracking/Trackers/TrackerCSRTParams.cc",
9596
"cc/tracking/Trackers/TrackerMOSSE.cc",

binding_old.gyp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
"cc/tracking/Trackers/TrackerMedianFlow.cc",
9191
"cc/tracking/Trackers/TrackerTLD.cc",
9292
"cc/tracking/Trackers/TrackerGOTURN.cc",
93+
"cc/tracking/Trackers/TrackerNano.cc",
9394
"cc/tracking/Trackers/TrackerCSRT.cc",
9495
"cc/tracking/Trackers/TrackerCSRTParams.cc",
9596
"cc/tracking/Trackers/TrackerMOSSE.cc",

cc/tracking/Trackers/TrackerNano.cc

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
#include "opencv_modules.h"
2+
3+
#ifdef HAVE_OPENCV_TRACKING
4+
5+
#include "TrackerNano.h"
6+
7+
// Ensure that this code is only compiled if OpenCV is 4.7.0 or greater
8+
#if CV_VERSION_GREATER_EQUAL(4, 7, 0)
9+
10+
Nan::Persistent<v8::FunctionTemplate> TrackerNano::constructor;
11+
12+
NAN_METHOD(TrackerNano::Init) {
13+
FF::TryCatch tryCatch("TrackerNano::Init");
14+
cv::Mat image;
15+
cv::Rect2d boundingBox;
16+
17+
// Check if the arguments are correctly passed
18+
if (Mat::Converter::arg(0, &image, info) || Rect::Converter::arg(1, &boundingBox, info)) {
19+
return tryCatch.reThrow();
20+
}
21+
22+
try {
23+
TrackerNano::unwrapThis(info)->getTracker()->init(image, boundingBox);
24+
25+
// If no error is thrown, return true
26+
info.GetReturnValue().Set(Nan::True());
27+
} catch (const std::exception& e) {
28+
return tryCatch.throwError(e.what());
29+
}
30+
}
31+
32+
33+
NAN_METHOD(TrackerNano::Update) {
34+
FF::TryCatch tryCatch("TrackerNano::Update");
35+
cv::Mat image;
36+
if (Mat::Converter::arg(0, &image, info)) {
37+
return tryCatch.reThrow();
38+
}
39+
40+
cv::Rect rect;
41+
bool ret = false;
42+
43+
try {
44+
ret = TrackerNano::unwrapThis(info)->getTracker()->update(image, rect);
45+
} catch (std::exception& e) {
46+
return tryCatch.throwError(e.what());
47+
}
48+
49+
if (ret) {
50+
info.GetReturnValue().Set(Rect::Converter::wrap(rect));
51+
} else {
52+
info.GetReturnValue().Set(Nan::Null());
53+
}
54+
}
55+
56+
NAN_MODULE_INIT(TrackerNano::Init) {
57+
v8::Local<v8::FunctionTemplate> ctor = Nan::New<v8::FunctionTemplate>(TrackerNano::New);
58+
v8::Local<v8::ObjectTemplate> instanceTemplate = ctor->InstanceTemplate();
59+
60+
Nan::SetPrototypeMethod(ctor, "init", TrackerNano::Init);
61+
Nan::SetPrototypeMethod(ctor, "update", TrackerNano::Update);
62+
63+
constructor.Reset(ctor);
64+
ctor->SetClassName(FF::newString("TrackerNano"));
65+
instanceTemplate->SetInternalFieldCount(1);
66+
67+
Nan::Set(target, FF::newString("TrackerNano"), FF::getFunction(ctor));
68+
};
69+
70+
NAN_METHOD(TrackerNano::New) {
71+
FF::TryCatch tryCatch("TrackerNano::New");
72+
FF_ASSERT_CONSTRUCT_CALL();
73+
74+
// Default model paths
75+
std::string backboneModelPath = "backbone.onnx";
76+
std::string neckheadModelPath = "neckhead.onnx";
77+
78+
// Check if the user passed model paths as arguments
79+
if (info.Length() > 0) {
80+
if (FF::StringConverter::arg(0, &backboneModelPath, info)) {
81+
return tryCatch.reThrow();
82+
}
83+
}
84+
85+
if (info.Length() > 1) {
86+
if (FF::StringConverter::arg(1, &neckheadModelPath, info)) {
87+
return tryCatch.reThrow();
88+
}
89+
}
90+
91+
// Initialize TrackerNano with provided or default models
92+
TrackerNano* self = new TrackerNano();
93+
94+
// Create tracker with provided ONNX models
95+
cv::TrackerNano::Params params;
96+
params.backbone = backboneModelPath;
97+
params.neckhead = neckheadModelPath;
98+
99+
// Create the tracker instance with these parameters
100+
self->tracker = cv::TrackerNano::create(params);
101+
102+
self->Wrap(info.Holder());
103+
info.GetReturnValue().Set(info.Holder());
104+
}
105+
106+
#endif
107+
108+
#endif

cc/tracking/Trackers/TrackerNano.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include "../Tracker.h"
2+
3+
#if CV_VERSION_GREATER_EQUAL(4, 7, 0)
4+
5+
#ifndef __FF_TRACKERNANO_H__
6+
#define __FF_TRACKERNANO_H__
7+
8+
// Ensure that TrackerNano is only defined for OpenCV 4.7.0 or greater
9+
#if CV_VERSION_GREATER_EQUAL(4, 7, 0)
10+
class TrackerNano : public FF::ObjectWrapBase<TrackerNano>, public Nan::ObjectWrap {
11+
public:
12+
cv::Ptr<cv::TrackerNano> tracker;
13+
14+
static NAN_MODULE_INIT(Init);
15+
static NAN_METHOD(New);
16+
static NAN_METHOD(Init);
17+
static NAN_METHOD(Update);
18+
19+
static Nan::Persistent<v8::FunctionTemplate> constructor;
20+
21+
cv::Ptr<cv::Tracker> getTracker() {
22+
return tracker;
23+
}
24+
};
25+
#endif
26+
27+
#endif
28+
29+
#endif

cc/tracking/tracking.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
#include "./Trackers/TrackerCSRT.h"
2525
#endif
2626

27+
#if CV_VERSION_GREATER_EQUAL(4, 7, 0)
28+
#include "./Trackers/TrackerNano.h"
29+
#endif
30+
2731
NAN_MODULE_INIT(Tracking::Init) {
2832
TrackerBoosting::Init(target);
2933
TrackerMedianFlow::Init(target);
@@ -50,6 +54,10 @@ NAN_MODULE_INIT(Tracking::Init) {
5054
#if CV_VERSION_GREATER_EQUAL(3, 4, 1)
5155
TrackerCSRT::Init(target);
5256
#endif
57+
58+
#if CV_VERSION_GREATER_EQUAL(4, 7 , 0)
59+
TrackerNano::Init(target);
60+
#endif
5361
};
5462

5563
#endif

cjs/lib/opencv4nodejs.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ exports.goodFeaturesToTrack = exports.cannyAsync = exports.canny = exports.apply
2020
exports.CAP_PROP_ISO_SPEED = exports.CAP_PROP_GUID = exports.CAP_PROP_FOCUS = exports.CAP_PROP_ZOOM = exports.CAP_PROP_WHITE_BALANCE_RED_V = exports.CAP_PROP_TRIGGER_DELAY = exports.CAP_PROP_TRIGGER = exports.CAP_PROP_TEMPERATURE = exports.CAP_PROP_GAMMA = exports.CAP_PROP_AUTO_EXPOSURE = exports.CAP_PROP_SHARPNESS = exports.CAP_PROP_MONOCHROME = exports.CAP_PROP_RECTIFICATION = exports.CAP_PROP_WHITE_BALANCE_BLUE_U = exports.CAP_PROP_CONVERT_RGB = exports.CAP_PROP_EXPOSURE = exports.CAP_PROP_GAIN = exports.CAP_PROP_HUE = exports.CAP_PROP_SATURATION = exports.CAP_PROP_CONTRAST = exports.CAP_PROP_BRIGHTNESS = exports.CAP_PROP_MODE = exports.CAP_PROP_FORMAT = exports.CAP_PROP_FRAME_COUNT = exports.CAP_PROP_FOURCC = exports.CAP_PROP_FPS = exports.CAP_PROP_FRAME_HEIGHT = exports.CAP_PROP_FRAME_WIDTH = exports.CAP_PROP_POS_AVI_RATIO = exports.CAP_PROP_POS_FRAMES = exports.CAP_PROP_POS_MSEC = exports.Contour = exports.Moments = exports.calcHistAsync = exports.calcHist = exports.accumulateWeightedAsync = exports.accumulateWeighted = exports.accumulateSquareAsync = exports.accumulateSquare = exports.accumulateProductAsync = exports.accumulateProduct = exports.accumulateAsync = exports.accumulate = exports.medianBlurAsync = exports.medianBlur = exports.gaussianBlurAsync = exports.gaussianBlur = exports.blurAsync = exports.blur = exports.goodFeaturesToTrackAsync = void 0;
2121
exports.destroyWindow = exports.imdecode = exports.imencode = exports.waitKeyEx = exports.waitKey = exports.imwrite = exports.imshowWait = exports.imshow = exports.imread = exports.VideoWriter = exports.VideoCapture = exports.VIDEOWRITER_PROP_NSTRIPES = exports.VIDEOWRITER_PROP_FRAMEBYTES = exports.VIDEOWRITER_PROP_QUALITY = exports.CAP_ARAVIS = exports.CAP_IMAGES = exports.CAP_FFMPEG = exports.CAP_GSTREAMER = exports.CAP_GPHOTO2 = exports.CAP_OPENNI2_ASUS = exports.CAP_OPENNI2 = exports.CAP_INTELPERC = exports.CAP_WINRT = exports.CAP_MSMF = exports.CAP_GIGANETIX = exports.CAP_AVFOUNDATION = exports.CAP_XIAPI = exports.CAP_ANDROID = exports.CAP_OPENNI_ASUS = exports.CAP_OPENNI = exports.CAP_PVAPI = exports.CAP_DSHOW = exports.CAP_UNICAP = exports.CAP_QT = exports.CAP_CMU1394 = exports.CAP_DC1394 = exports.CAP_IEEE1394 = exports.CAP_FIREWIRE = exports.CAP_V4L2 = exports.CAP_V4L = exports.CAP_VFW = exports.CAP_ANY = exports.CAP_PROP_AUTOFOCUS = exports.CAP_PROP_BUFFERSIZE = exports.CAP_PROP_SETTINGS = exports.CAP_PROP_IRIS = exports.CAP_PROP_ROLL = exports.CAP_PROP_TILT = exports.CAP_PROP_PAN = exports.CAP_PROP_BACKLIGHT = void 0;
2222
exports.HOGHistogramNormType = exports.HOGDescriptor = exports.CascadeClassifier = exports.SVM = exports.StatModel = exports.ParamGrid = exports.TrainData = exports.statModel = exports.ml = exports.IMWRITE_PNG_STRATEGY_FIXED = exports.IMWRITE_PNG_STRATEGY_RLE = exports.IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY = exports.IMWRITE_PNG_STRATEGY_FILTERED = exports.IMWRITE_PNG_STRATEGY_DEFAULT = exports.IMWRITE_PAM_FORMAT_RGB_ALPHA = exports.IMWRITE_PAM_FORMAT_RGB = exports.IMWRITE_PAM_FORMAT_GRAYSCALE_ALPHA = exports.IMWRITE_PAM_FORMAT_GRAYSCALE = exports.IMWRITE_PAM_FORMAT_BLACKANDWHITE = exports.IMWRITE_PAM_FORMAT_NULL = exports.IMWRITE_PAM_TUPLETYPE = exports.IMREAD_IGNORE_ORIENTATION = exports.IMREAD_REDUCED_COLOR_8 = exports.IMREAD_REDUCED_GRAYSCALE_8 = exports.IMREAD_REDUCED_COLOR_4 = exports.IMREAD_REDUCED_GRAYSCALE_4 = exports.IMREAD_REDUCED_COLOR_2 = exports.IMREAD_REDUCED_GRAYSCALE_2 = exports.IMWRITE_WEBP_QUALITY = exports.IMWRITE_PXM_BINARY = exports.IMWRITE_PNG_BILEVEL = exports.IMWRITE_PNG_STRATEGY = exports.IMWRITE_PNG_COMPRESSION = exports.IMWRITE_JPEG_CHROMA_QUALITY = exports.IMWRITE_JPEG_LUMA_QUALITY = exports.IMWRITE_JPEG_RST_INTERVAL = exports.IMWRITE_JPEG_OPTIMIZE = exports.IMWRITE_JPEG_PROGRESSIVE = exports.IMWRITE_JPEG_QUALITY = exports.IMREAD_LOAD_GDAL = exports.IMREAD_ANYCOLOR = exports.IMREAD_ANYDEPTH = exports.IMREAD_COLOR = exports.IMREAD_GRAYSCALE = exports.IMREAD_UNCHANGED = exports.imdecodeAsync = exports.imencodeAsync = exports.imwriteAsync = exports.imreadAsync = exports.destroyAllWindows = void 0;
23-
exports.HAAR_FRONTALFACE_ALT2 = exports.HAAR_FRONTALFACE_ALT = exports.HAAR_FRONTALCATFACE_EXTENDED = exports.HAAR_FRONTALCATFACE = exports.HAAR_EYE_TREE_EYEGLASSES = exports.HAAR_EYE = exports.PHash = exports.SLICO = exports.SLIC = exports.SuperpixelLSC = exports.SuperpixelSLIC = exports.SuperpixelSEEDS = exports.SURFDetector = exports.SIFTDetector = exports.BackgroundSubtractorKNN = exports.BackgroundSubtractorMOG2 = exports.TrackerCSRT = exports.TrackerCSRTParams = exports.TrackerMOSSE = exports.TrackerGOTURN = exports.trackerKCFModes = exports.MultiTracker = exports.TrackerKCF = exports.TrackerKCFParams = exports.TrackerTLD = exports.TrackerMIL = exports.TrackerMILParams = exports.TrackerMedianFlow = exports.TrackerBoosting = exports.TrackerBoostingParams = exports.createOCRHMMTransitionsTableAsync = exports.createOCRHMMTransitionsTable = exports.loadOCRHMMClassifierCNNAsync = exports.loadOCRHMMClassifierCNN = exports.loadOCRHMMClassifierNMAsync = exports.loadOCRHMMClassifierNM = exports.OCRHMMClassifier = exports.OCRHMMDecoder = exports.seamlessCloneAsync = exports.seamlessClone = exports.inpaintAsync = exports.inpaint = exports.fastNlMeansDenoisingColoredAsync = exports.fastNlMeansDenoisingColored = exports.MONOCHROME_TRANSFER = exports.MIXED_CLONE = exports.NORMAL_CLONE = exports.INPAINT_TELEA = exports.INPAINT_NS = exports.DetectionROI = void 0;
23+
exports.HAAR_FRONTALFACE_ALT2 = exports.HAAR_FRONTALFACE_ALT = exports.HAAR_FRONTALCATFACE_EXTENDED = exports.HAAR_FRONTALCATFACE = exports.HAAR_EYE_TREE_EYEGLASSES = exports.HAAR_EYE = exports.PHash = exports.SLICO = exports.SLIC = exports.SuperpixelLSC = exports.SuperpixelSLIC = exports.SuperpixelSEEDS = exports.SURFDetector = exports.SIFTDetector = exports.BackgroundSubtractorKNN = exports.BackgroundSubtractorMOG2 = exports.TrackerCSRT = exports.TrackerCSRTParams = exports.TrackerMOSSE = exports.TrackerGOTURN = exports.TrackerNano = exports.trackerKCFModes = exports.MultiTracker = exports.TrackerKCF = exports.TrackerKCFParams = exports.TrackerTLD = exports.TrackerMIL = exports.TrackerMILParams = exports.TrackerMedianFlow = exports.TrackerBoosting = exports.TrackerBoostingParams = exports.createOCRHMMTransitionsTableAsync = exports.createOCRHMMTransitionsTable = exports.loadOCRHMMClassifierCNNAsync = exports.loadOCRHMMClassifierCNN = exports.loadOCRHMMClassifierNMAsync = exports.loadOCRHMMClassifierNM = exports.OCRHMMClassifier = exports.OCRHMMDecoder = exports.seamlessCloneAsync = exports.seamlessClone = exports.inpaintAsync = exports.inpaint = exports.fastNlMeansDenoisingColoredAsync = exports.fastNlMeansDenoisingColored = exports.MONOCHROME_TRANSFER = exports.MIXED_CLONE = exports.NORMAL_CLONE = exports.INPAINT_TELEA = exports.INPAINT_NS = exports.DetectionROI = void 0;
2424
exports.ORB = exports.FAST = exports.KAZE = exports.AKAZE = exports.AGAST = exports.dropOverlappingZone = exports.getScoreMax = exports.toMatTypeName = exports.getVersionString = exports.getVersion = exports.drawDetection = exports.drawTextBox = exports.LBP_SILVERWARE = exports.LBP_PROFILEFACE = exports.LBP_FRONTALFACE_IMPROVED = exports.LBP_FRONTALFACE = exports.LBP_FRONTALCATFACE = exports.HAAR_UPPERBODY = exports.HAAR_SMILE = exports.HAAR_RUSSIAN_PLATE_NUMBER = exports.HAAR_RIGHTEYE_2SPLITS = exports.HAAR_PROFILEFACE = exports.HAAR_LOWERBODY = exports.HAAR_LICENCE_PLATE_RUS_16STAGES = exports.HAAR_LEFTEYE_2SPLITS = exports.HAAR_FULLBODY = exports.HAAR_FRONTALFACE_DEFAULT = exports.HAAR_FRONTALFACE_ALT_TREE = void 0;
2525
const node_path_1 = __importDefault(require("node:path"));
2626
const promisify_js_1 = __importDefault(require("./promisify.js"));
@@ -998,7 +998,7 @@ exports.createOCRHMMTransitionsTableAsync = createOCRHMMTransitionsTableAsync;
998998
exports.TrackerBoostingParams = TrackerBoostingParams;
999999
exports.TrackerBoosting = TrackerBoosting;
10001000
exports.TrackerMedianFlow = TrackerMedianFlow;
1001-
const { TrackerMILParams, TrackerMIL, TrackerTLD, TrackerKCFParams, TrackerKCF, MultiTracker, trackerKCFModes, TrackerGOTURN, TrackerMOSSE, TrackerCSRTParams, TrackerCSRT, BackgroundSubtractorMOG2, BackgroundSubtractorKNN, SIFTDetector, SURFDetector } = exports.cv;
1001+
const { TrackerMILParams, TrackerMIL, TrackerTLD, TrackerKCFParams, TrackerKCF, MultiTracker, trackerKCFModes, TrackerGOTURN, TrackerNano, TrackerMOSSE, TrackerCSRTParams, TrackerCSRT, BackgroundSubtractorMOG2, BackgroundSubtractorKNN, SIFTDetector, SURFDetector } = exports.cv;
10021002
exports.TrackerMILParams = TrackerMILParams;
10031003
exports.TrackerMIL = TrackerMIL;
10041004
exports.TrackerTLD = TrackerTLD;
@@ -1007,6 +1007,7 @@ exports.TrackerKCF = TrackerKCF;
10071007
exports.MultiTracker = MultiTracker;
10081008
exports.trackerKCFModes = trackerKCFModes;
10091009
exports.TrackerGOTURN = TrackerGOTURN;
1010+
exports.TrackerNano = TrackerNano;
10101011
exports.TrackerMOSSE = TrackerMOSSE;
10111012
exports.TrackerCSRTParams = TrackerCSRTParams;
10121013
exports.TrackerCSRT = TrackerCSRT;

src/lib/opencv4nodejs.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,8 @@ const { TrainData,ParamGrid,StatModel,SVM,CascadeClassifier,HOGDescriptor,HOGHis
174174
export { TrainData,ParamGrid,StatModel,SVM,CascadeClassifier,HOGDescriptor,HOGHistogramNormType,DetectionROI,INPAINT_NS,INPAINT_TELEA,NORMAL_CLONE,MIXED_CLONE,MONOCHROME_TRANSFER,fastNlMeansDenoisingColored,fastNlMeansDenoisingColoredAsync };
175175
const { inpaint,inpaintAsync,seamlessClone,seamlessCloneAsync,OCRHMMDecoder,OCRHMMClassifier,loadOCRHMMClassifierNM,loadOCRHMMClassifierNMAsync,loadOCRHMMClassifierCNN,loadOCRHMMClassifierCNNAsync,createOCRHMMTransitionsTable,createOCRHMMTransitionsTableAsync,TrackerBoostingParams,TrackerBoosting,TrackerMedianFlow } = cv;
176176
export { inpaint,inpaintAsync,seamlessClone,seamlessCloneAsync,OCRHMMDecoder,OCRHMMClassifier,loadOCRHMMClassifierNM,loadOCRHMMClassifierNMAsync,loadOCRHMMClassifierCNN,loadOCRHMMClassifierCNNAsync,createOCRHMMTransitionsTable,createOCRHMMTransitionsTableAsync,TrackerBoostingParams,TrackerBoosting,TrackerMedianFlow };
177-
const { TrackerMILParams,TrackerMIL,TrackerTLD,TrackerKCFParams,TrackerKCF,MultiTracker,trackerKCFModes,TrackerGOTURN,TrackerMOSSE,TrackerCSRTParams,TrackerCSRT,BackgroundSubtractorMOG2,BackgroundSubtractorKNN,SIFTDetector,SURFDetector } = cv;
178-
export { TrackerMILParams,TrackerMIL,TrackerTLD,TrackerKCFParams,TrackerKCF,MultiTracker,trackerKCFModes,TrackerGOTURN,TrackerMOSSE,TrackerCSRTParams,TrackerCSRT,BackgroundSubtractorMOG2,BackgroundSubtractorKNN,SIFTDetector,SURFDetector };
177+
const { TrackerMILParams,TrackerMIL,TrackerTLD,TrackerKCFParams,TrackerKCF,MultiTracker,trackerKCFModes,TrackerGOTURN,TrackerNano,TrackerMOSSE,TrackerCSRTParams,TrackerCSRT,BackgroundSubtractorMOG2,BackgroundSubtractorKNN,SIFTDetector,SURFDetector } = cv;
178+
export { TrackerMILParams,TrackerMIL,TrackerTLD,TrackerKCFParams,TrackerKCF,MultiTracker,trackerKCFModes,TrackerGOTURN,TrackerNano,TrackerMOSSE,TrackerCSRTParams,TrackerCSRT,BackgroundSubtractorMOG2,BackgroundSubtractorKNN,SIFTDetector,SURFDetector };
179179
const { SuperpixelSEEDS,SuperpixelSLIC,SuperpixelLSC,SLIC,SLICO,PHash,HAAR_EYE,HAAR_EYE_TREE_EYEGLASSES,HAAR_FRONTALCATFACE,HAAR_FRONTALCATFACE_EXTENDED,HAAR_FRONTALFACE_ALT,HAAR_FRONTALFACE_ALT2,HAAR_FRONTALFACE_ALT_TREE,HAAR_FRONTALFACE_DEFAULT,HAAR_FULLBODY } = cv;
180180
export { SuperpixelSEEDS,SuperpixelSLIC,SuperpixelLSC,SLIC,SLICO,PHash,HAAR_EYE,HAAR_EYE_TREE_EYEGLASSES,HAAR_FRONTALCATFACE,HAAR_FRONTALCATFACE_EXTENDED,HAAR_FRONTALFACE_ALT,HAAR_FRONTALFACE_ALT2,HAAR_FRONTALFACE_ALT_TREE,HAAR_FRONTALFACE_DEFAULT,HAAR_FULLBODY };
181181
const { HAAR_LEFTEYE_2SPLITS,HAAR_LICENCE_PLATE_RUS_16STAGES,HAAR_LOWERBODY,HAAR_PROFILEFACE,HAAR_RIGHTEYE_2SPLITS,HAAR_RUSSIAN_PLATE_NUMBER,HAAR_SMILE,HAAR_UPPERBODY,LBP_FRONTALCATFACE,LBP_FRONTALFACE,LBP_FRONTALFACE_IMPROVED,LBP_PROFILEFACE,LBP_SILVERWARE,drawTextBox,drawDetection } = cv;
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import { expect } from 'chai';
2+
import { Mat, TrackerNano } from '../../../typings';
3+
import { getTestContext } from '../model';
4+
import toTest from '../toTest';
5+
import path from 'path'; // Import path module to handle file paths
6+
import { fileURLToPath } from 'url';
7+
8+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
9+
const backbonePath = path.join(__dirname, '/TrackerNanoModels/backbone.onnx');
10+
const neckheadPath = path.join(__dirname, '/TrackerNanoModels/neckhead.onnx');
11+
let tracker: TrackerNano
12+
13+
if (toTest.tracking) {
14+
const {
15+
cv,
16+
cvVersionGreaterEqual,
17+
getTestImg,
18+
} = getTestContext();
19+
20+
const hasNano = cvVersionGreaterEqual(4, 7, 0);
21+
22+
(hasNano ? describe : describe.skip)('TrackerNano', () => {
23+
let testImg: Mat;
24+
25+
before(() => {
26+
testImg = getTestImg();
27+
});
28+
29+
describe('constructor', () => {
30+
it('can be constructed', () => {
31+
tracker = new cv.TrackerNano(backbonePath, neckheadPath);
32+
expect(tracker).to.have.property('init').to.be.a('function');
33+
expect(tracker).to.have.property('update').to.be.a('function');
34+
});
35+
});
36+
37+
describe('init', () => {
38+
it('should throw if no args', () => {
39+
// @ts-expect-error missing args
40+
expect(() => tracker.init()).to.throw('TrackerNano::Init - Error: expected argument 0 to be of type');
41+
});
42+
43+
it('can be called with frame and initial box', () => {
44+
const ret = tracker.init(testImg, new cv.Rect(0, 0, 10, 10));
45+
expect(ret).to.be.true;
46+
});
47+
});
48+
49+
describe('update', () => {
50+
it('should throw if no args', () => {
51+
// @ts-expect-error missing args
52+
expect(() => tracker.update()).to.throw('TrackerNano::Update - Error: expected argument 0 to be of type');
53+
});
54+
55+
it('returns bounding box', () => {
56+
tracker.init(testImg, new cv.Rect(0, 0, 10, 10));
57+
const rect = tracker.update(testImg);
58+
expect(rect).to.be.instanceOf(cv.Rect);
59+
});
60+
});
61+
62+
});
63+
}

0 commit comments

Comments
 (0)