python ./platforms/js/build_js.py build_js --cmake_option="-DOPENCV_EXTRA_MODULES_PATH=opencv_contrib/modules"
@endcode
+
Running OpenCV.js Tests
---------------------------------------
docker run --rm -v $(pwd):/src -u $(id -u):$(id -g) emscripten/emsdk:2.0.10 emcmake python3 ./platforms/js/build_js.py build_js
@endcode
+In Windows use the following PowerShell command:
+
+@code{.bash}
+docker run --rm --workdir /src -v "$(get-location):/src" "emscripten/emsdk:2.0.10" emcmake python3 ./platforms/js/build_js.py build_js
+@endcode
+
### Building the documentation with Docker
To build the documentation `doxygen` needs to be installed. Create a file named `Dockerfile` with the following content:
'InputOutputArray': 'cv::Mat&',
'InputArrayOfArrays': 'const std::vector<cv::Mat>&',
'OutputArrayOfArrays': 'std::vector<cv::Mat>&',
+ 'string': 'std::string',
'String': 'std::string',
'const String&':'const std::string&'
}
ret_type = type_dict[ptr_type]
for key in type_dict:
if key in ret_type:
- ret_type = ret_type.replace(key, type_dict[key])
-
+ ret_type = re.sub('(^|[^\w])' + key + '($|[^\w])', type_dict[key], ret_type)
arg_types = []
unwrapped_arg_types = []
for arg in variant.args:
# consider the default parameter variants
args_num = len(variant.args) - j
if args_num in class_info.constructor_arg_num:
- # FIXME: workaournd for constructor overload with same args number
+ # FIXME: workaround for constructor overload with same args number
# e.g. DescriptorMatcher
continue
class_info.constructor_arg_num.add(args_num)
ret_type = 'void' if variant.rettype.strip() == '' else variant.rettype
ret_type = ret_type.strip()
-
if ret_type.startswith('Ptr'): #smart pointer
ptr_type = ret_type.replace('Ptr<', '').replace('>', '')
if ptr_type in type_dict:
locations.delete();
}
});
+QUnit.test('QR code detect and decode', function (assert) {
+ {
+ const detector = new cv.QRCodeDetector();
+ let mat = cv.Mat.ones(800, 600, cv.CV_8U);
+ assert.ok(mat);
+
+ // test detect
+ let points = new cv.Mat();
+ let qrCodeFound = detector.detect(mat, points);
+ assert.equal(points.rows, 0)
+ assert.equal(points.cols, 0)
+ assert.equal(qrCodeFound, false);
+
+ // test detectMult
+ qrCodeFound = detector.detectMulti(mat, points);
+ assert.equal(points.rows, 0)
+ assert.equal(points.cols, 0)
+ assert.equal(qrCodeFound, false);
+
+ // test decode (with random numbers)
+ let decodeTestPoints = cv.matFromArray(1, 4, cv.CV_32FC2, [10, 20, 30, 40, 60, 80, 90, 100]);
+ let qrCodeContent = detector.decode(mat, decodeTestPoints);
+ assert.equal(typeof qrCodeContent, 'string');
+ assert.equal(qrCodeContent, '');
+
+ //test detectAndDecode
+ qrCodeContent = detector.detectAndDecode(mat);
+ assert.equal(typeof qrCodeContent, 'string');
+ assert.equal(qrCodeContent, '');
+
+ // test decodeCurved
+ qrCodeContent = detector.decodeCurved(mat, decodeTestPoints);
+ assert.equal(typeof qrCodeContent, 'string');
+ assert.equal(qrCodeContent, '');
+
+ decodeTestPoints.delete();
+ points.delete();
+ mat.delete();
+
+ }
+});
\ No newline at end of file
"-DWITH_GPHOTO2=OFF",
"-DWITH_LAPACK=OFF",
"-DWITH_ITT=OFF",
- "-DWITH_QUIRC=OFF",
+ "-DWITH_QUIRC=ON",
"-DBUILD_ZLIB=ON",
"-DBUILD_opencv_apps=OFF",
"-DBUILD_opencv_calib3d=ON",
objdetect = {'': ['groupRectangles'],
'HOGDescriptor': ['load', 'HOGDescriptor', 'getDefaultPeopleDetector', 'getDaimlerPeopleDetector', 'setSVMDetector', 'detectMultiScale'],
- 'CascadeClassifier': ['load', 'detectMultiScale2', 'CascadeClassifier', 'detectMultiScale3', 'empty', 'detectMultiScale']}
+ 'CascadeClassifier': ['load', 'detectMultiScale2', 'CascadeClassifier', 'detectMultiScale3', 'empty', 'detectMultiScale'],
+ 'QRCodeDetector': ['QRCodeDetector', 'decode', 'decodeCurved', 'detect', 'detectAndDecode', 'detectMulti', 'setEpsX', 'setEpsY']}
video = {'': ['CamShift', 'calcOpticalFlowFarneback', 'calcOpticalFlowPyrLK', 'createBackgroundSubtractorMOG2', \
'findTransformECC', 'meanShift'],