diff --git a/modules/js/generator/embindgen.py b/modules/js/generator/embindgen.py index d44e672823c4c339366370546438ce775b4d9964..8a16f92f5ec1e395b8eea54142a9c6249f9b9aa6 100644 --- a/modules/js/generator/embindgen.py +++ b/modules/js/generator/embindgen.py @@ -236,11 +236,6 @@ class ArgInfo(object): self.tp = "std::vector&" elif self.inputarg: self.tp = "const std::vector&" - if self.tp == "vector_string": - if self.outputarg: - self.tp = "std::vector&" - elif self.inputarg: - self.tp = "const std::vector&" self.tp = handle_vector(self.tp).strip() if self.const: self.tp = "const " + self.tp diff --git a/modules/js/src/core_bindings.cpp b/modules/js/src/core_bindings.cpp index 6771c42edb8486ca71197ac27359868c72cb4f71..60fe496ce37ac6b8427ae5a8f71f6ea93d0d316d 100644 --- a/modules/js/src/core_bindings.cpp +++ b/modules/js/src/core_bindings.cpp @@ -101,6 +101,9 @@ using namespace cv::dnn; typedef TrackerMIL::Params TrackerMIL_Params; #endif +// HACK: JS generator ommits namespace for parameter types for some reason. Added typedef to handle std::string correctly +typedef std::string string; + namespace binding_utils { template diff --git a/modules/js/test/test_objdetect.js b/modules/js/test/test_objdetect.js index d4f6c5397b041aad5812d3183a5fcee793ad837d..e7190db3375284975c70e70013fe23b95f663c8a 100644 --- a/modules/js/test/test_objdetect.js +++ b/modules/js/test/test_objdetect.js @@ -221,6 +221,27 @@ QUnit.test('Aruco-based QR code detect', function (assert) { mat.delete(); } }); +QUnit.test('Bar code detect', function (assert) { + { + let detector = new cv.barcode_BarcodeDetector(); + let mat = cv.Mat.ones(800, 600, cv.CV_8U); + assert.ok(mat); + + let points = new cv.Mat(); + let codeFound = detector.detect(mat, points); + assert.equal(points.rows, 0) + assert.equal(points.cols, 0) + assert.equal(codeFound, false); + + codeContent = detector.detectAndDecode(mat); + assert.equal(typeof codeContent, 'string'); + assert.equal(codeContent, ''); + + detector.delete(); + points.delete(); + mat.delete(); + } +}); QUnit.test('Aruco detector', function (assert) { { let dictionary = cv.getPredefinedDictionary(cv.DICT_4X4_50); diff --git a/platforms/js/opencv_js.config.py b/platforms/js/opencv_js.config.py index c926a62f5dcf56b9c78085e675b1c1c04725bab6..69891ea71a07f7454a1546a02abfcdbfc662e870 100644 --- a/platforms/js/opencv_js.config.py +++ b/platforms/js/opencv_js.config.py @@ -126,7 +126,8 @@ objdetect = {'': ['groupRectangles', 'getPredefinedDictionary', 'extendDictionar 'aruco_ArucoDetector': ['ArucoDetector', 'detectMarkers', 'refineDetectedMarkers', 'setDictionary', 'setDetectorParameters', 'setRefineParameters'], 'aruco_CharucoDetector': ['CharucoDetector', 'setBoard', 'setCharucoParameters', 'setDetectorParameters', 'setRefineParameters', 'detectBoard', 'detectDiamonds'], 'QRCodeDetectorAruco_Params': ['Params'], - 'QRCodeDetectorAruco': ['QRCodeDetectorAruco', 'decode', 'detect', 'detectAndDecode', 'detectMulti', 'decodeMulti', 'detectAndDecodeMulti', 'setDetectorParameters', 'setArucoParameters'] + 'QRCodeDetectorAruco': ['QRCodeDetectorAruco', 'decode', 'detect', 'detectAndDecode', 'detectMulti', 'decodeMulti', 'detectAndDecodeMulti', 'setDetectorParameters', 'setArucoParameters'], + 'barcode_BarcodeDetector': ['BarcodeDetector', 'decode', 'detect', 'detectAndDecode', 'detectMulti', 'decodeMulti', 'detectAndDecodeMulti', 'decodeWithType', 'detectAndDecodeWithType'] } video = {