From e70786e05e605074b33e4c00842009847c32f17a Mon Sep 17 00:00:00 2001 From: Rijubrata Bhaumik Date: Sun, 9 Dec 2018 14:08:59 +0200 Subject: [PATCH] Merge pull request #13300 from riju:photoModule MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Enable Javascript bindings for photo module. 1. Enable the build flag in build_js.py. 2. Append js into WRAP list of photo’s CMakefiles.txt 3. Add photo module's API into JS API whitelist (embindgen.py) Exposing the HDR imaging part of photo module. [TODO] Add tests Fix opencv/doc/js_tutorials/ * [WIP] TODO: Add tests * Remove TonemapDurand: algorithm patented in US, so moved to opencv_contrib * Fix ningxin's comment: expose the base class. * Add some more simple binding tests. Also expose process function --- modules/js/src/embindgen.py | 23 +++++++- modules/js/test/test_photo.js | 106 ++++++++++++++++++++++++++++++++++ modules/js/test/tests.html | 1 + modules/js/test/tests.js | 2 +- modules/photo/CMakeLists.txt | 2 +- platforms/js/build_js.py | 2 +- 6 files changed, 132 insertions(+), 4 deletions(-) create mode 100644 modules/js/test/test_photo.js diff --git a/modules/js/src/embindgen.py b/modules/js/src/embindgen.py index 7ba9b6038f..3a7a977774 100644 --- a/modules/js/src/embindgen.py +++ b/modules/js/src/embindgen.py @@ -142,6 +142,27 @@ features2d = {'Feature2D': ['detect', 'compute', 'detectAndCompute', 'descriptor 'BFMatcher': ['isMaskSupported', 'create'], '': ['FAST', 'AGAST', 'drawKeypoints', 'drawMatches']} +photo = {'': ['createAlignMTB', 'createCalibrateDebevec', 'createCalibrateRobertson', \ + 'createMergeDebevec', 'createMergeMertens', 'createMergeRobertson', \ + 'createTonemapDrago', 'createTonemapMantiuk', 'createTonemapReinhard'], + 'CalibrateCRF': ['process'], + 'AlignMTB' : ['calculateShift', 'shiftMat', 'computeBitmaps', 'getMaxBits', 'setMaxBits', \ + 'getExcludeRange', 'setExcludeRange', 'getCut', 'setCut'], + 'CalibrateDebevec' : ['getLambda', 'setLambda', 'getSamples', 'setSamples', 'getRandom', 'setRandom'], + 'CalibrateRobertson' : ['getMaxIter', 'setMaxIter', 'getThreshold', 'setThreshold', 'getRadiance'], + 'MergeExposures' : ['process'], + 'MergeDebevec' : ['process'], + 'MergeMertens' : ['process', 'getContrastWeight', 'setContrastWeight', 'getSaturationWeight', \ + 'setSaturationWeight', 'getExposureWeight', 'setExposureWeight'], + 'MergeRobertson' : ['process'], + 'Tonemap' : ['process' , 'getGamma', 'setGamma'], + 'TonemapDrago' : ['getSaturation', 'setSaturation', 'getBias', 'setBias', \ + 'getSigmaColor', 'setSigmaColor', 'getSigmaSpace','setSigmaSpace'], + 'TonemapMantiuk' : ['getScale', 'setScale', 'getSaturation', 'setSaturation'], + 'TonemapReinhard' : ['getIntensity', 'setIntensity', 'getLightAdaptation', 'setLightAdaptation', \ + 'getColorAdaptation', 'setColorAdaptation'] + } + def makeWhiteList(module_list): wl = {} for m in module_list: @@ -152,7 +173,7 @@ def makeWhiteList(module_list): wl[k] = m[k] return wl -white_list = makeWhiteList([core, imgproc, objdetect, video, dnn, features2d]) +white_list = makeWhiteList([core, imgproc, objdetect, video, dnn, features2d, photo]) # Features to be exported export_enums = False diff --git a/modules/js/test/test_photo.js b/modules/js/test/test_photo.js new file mode 100644 index 0000000000..a2921e6669 --- /dev/null +++ b/modules/js/test/test_photo.js @@ -0,0 +1,106 @@ +// ////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2013, OpenCV Foundation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// + +// Author : Rijubrata Bhaumik, Intel Corporation. rijubrata.bhaumik[at]intel[dot]com + +if (typeof module !== 'undefined' && module.exports) { + // The envrionment is Node.js + var cv = require('./opencv.js'); // eslint-disable-line no-var +} + + +QUnit.module('Photo', {}); + +QUnit.test('test_photo', function(assert) { + // CalibrateDebevec + { + let calibration = new cv.CalibrateDebevec(); + assert.ok(true, calibration); + //let response = calibration.process(images, exposures); + } + // CalibrateRobertson + { + let calibration = new cv.CalibrateRobertson(); + assert.ok(true, calibration); + //let response = calibration.process(images, exposures); + } + + // MergeDebevec + { + let merge = new cv.MergeDebevec(); + assert.ok(true, merge); + //let hdr = merge.process(images, exposures, response); + } + // MergeMertens + { + let merge = new cv.MergeMertens(); + assert.ok(true, merge); + //let hdr = merge.process(images, exposures, response); + } + // MergeRobertson + { + let merge = new cv.MergeRobertson(); + assert.ok(true, merge); + //let hdr = merge.process(images, exposures, response); + } + + // TonemapDrago + { + let tonemap = new cv.TonemapDrago(); + assert.ok(true, tonemap); + // let ldr = new cv.Mat(); + // let retval = tonemap.process(hdr, ldr); + } + // TonemapMantiuk + { + let tonemap = new cv.TonemapMantiuk(); + assert.ok(true, tonemap); + // let ldr = new cv.Mat(); + // let retval = tonemap.process(hdr, ldr); + } + // TonemapReinhard + { + let tonemap = new cv.TonemapReinhard(); + assert.ok(true, tonemap); + // let ldr = new cv.Mat(); + // let retval = tonemap.process(hdr, ldr); + } + +}); \ No newline at end of file diff --git a/modules/js/test/tests.html b/modules/js/test/tests.html index 2ed5325c5b..8f65ce7f66 100644 --- a/modules/js/test/tests.html +++ b/modules/js/test/tests.html @@ -28,6 +28,7 @@ +