From 3d5d3ea20c156ee11922cbbb6e87eb34ac592f3c Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Wed, 10 Nov 2021 02:25:17 +0000 Subject: [PATCH] js: add TrackerMIL --- modules/js/src/core_bindings.cpp | 26 ++++++++++++++++++++++++++ modules/js/test/package.json | 1 + modules/js/test/test_video.js | 25 +++++++++++++++++++++++++ platforms/js/opencv_js.config.py | 19 +++++++++++++++---- 4 files changed, 67 insertions(+), 4 deletions(-) diff --git a/modules/js/src/core_bindings.cpp b/modules/js/src/core_bindings.cpp index 4409778e83..70d1dc70b8 100644 --- a/modules/js/src/core_bindings.cpp +++ b/modules/js/src/core_bindings.cpp @@ -97,6 +97,10 @@ using namespace cv::dnn; using namespace aruco; #endif +#ifdef HAVE_OPENCV_VIDEO +typedef TrackerMIL::Params TrackerMIL_Params; +#endif + namespace binding_utils { template @@ -364,6 +368,23 @@ namespace binding_utils result.call("push", arg2); return result; } + + + void Tracker_init_wrapper(cv::Tracker& arg0, const cv::Mat& arg1, const Rect& arg2) + { + return arg0.init(arg1, arg2); + } + + emscripten::val Tracker_update_wrapper(cv::Tracker& arg0, const cv::Mat& arg1) + { + Rect rect; + bool update = arg0.update(arg1, rect); + + emscripten::val result = emscripten::val::array(); + result.call("push", update); + result.call("push", rect); + return result; + } #endif // HAVE_OPENCV_VIDEO std::string getExceptionMsg(const cv::Exception& e) { @@ -676,6 +697,11 @@ EMSCRIPTEN_BINDINGS(binding_utils) function("CamShift", select_overload(&binding_utils::CamShiftWrapper)); function("meanShift", select_overload(&binding_utils::meanShiftWrapper)); + + emscripten::class_("Tracker") + .function("init", select_overload(&binding_utils::Tracker_init_wrapper), pure_virtual()) + .function("update", select_overload(&binding_utils::Tracker_update_wrapper), pure_virtual()); + #endif function("getBuildInformation", &binding_utils::getBuildInformation); diff --git a/modules/js/test/package.json b/modules/js/test/package.json index 7c2753017c..db73b4b8de 100644 --- a/modules/js/test/package.json +++ b/modules/js/test/package.json @@ -4,6 +4,7 @@ "version": "1.0.1", "dependencies": { "ansi-colors": "^4.1.1", + "cli-table": "0.3.6", "minimist": "^1.2.0", "node-qunit": "latest" }, diff --git a/modules/js/test/test_video.js b/modules/js/test/test_video.js index 3c686a96cd..3594c21ede 100644 --- a/modules/js/test/test_video.js +++ b/modules/js/test/test_video.js @@ -105,3 +105,28 @@ QUnit.test('Background Segmentation', function(assert) { mog2.delete(); } }); + +QUnit.test('TrackerMIL', function(assert) { + { + let src1 = cv.Mat.zeros(100, 100, cv.CV_8UC1); + let src2 = cv.Mat.zeros(100, 100, cv.CV_8UC1); + + let tracker = new cv.TrackerMIL(); + + assert.equal(tracker instanceof cv.TrackerMIL, true); + assert.equal(tracker instanceof cv.Tracker, true); + + let rect = new cv.Rect(10, 10, 50, 60); + tracker.init(src1, rect); + + let [updated, rect2] = tracker.update(src2); + + assert.equal(updated, true); + assert.equal(rect2.width, 50); + assert.equal(rect2.height, 60); + + tracker.delete(); + src1.delete(); + src2.delete(); + } +}); diff --git a/platforms/js/opencv_js.config.py b/platforms/js/opencv_js.config.py index 05a8260112..1ed28af89f 100644 --- a/platforms/js/opencv_js.config.py +++ b/platforms/js/opencv_js.config.py @@ -113,10 +113,21 @@ objdetect = {'': ['groupRectangles'], 'CascadeClassifier': ['load', 'detectMultiScale2', 'CascadeClassifier', 'detectMultiScale3', 'empty', 'detectMultiScale'], 'QRCodeDetector': ['QRCodeDetector', 'decode', 'decodeCurved', 'detect', 'detectAndDecode', 'detectMulti', 'setEpsX', 'setEpsY']} -video = {'': ['CamShift', 'calcOpticalFlowFarneback', 'calcOpticalFlowPyrLK', 'createBackgroundSubtractorMOG2', \ - 'findTransformECC', 'meanShift'], - 'BackgroundSubtractorMOG2': ['BackgroundSubtractorMOG2', 'apply'], - 'BackgroundSubtractor': ['apply', 'getBackgroundImage']} +video = { + '': [ + 'CamShift', + 'calcOpticalFlowFarneback', + 'calcOpticalFlowPyrLK', + 'createBackgroundSubtractorMOG2', + 'findTransformECC', + 'meanShift', + ], + 'BackgroundSubtractorMOG2': ['BackgroundSubtractorMOG2', 'apply'], + 'BackgroundSubtractor': ['apply', 'getBackgroundImage'], + # issue #21070: 'Tracker': ['init', 'update'], + 'TrackerMIL': ['create'], + 'TrackerMIL_Params': [], +} dnn = {'dnn_Net': ['setInput', 'forward'], '': ['readNetFromCaffe', 'readNetFromTensorflow', 'readNetFromTorch', 'readNetFromDarknet',