123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- const isNodeJs = (typeof window) === 'undefined'? true : false;
- if(isNodeJs) {
- var Base = require("./base");
- global.getCvSize = Base.getCvSize;
- }
- var fillGradient = function(cv, img, delta=5) {
- let ch = img.channels();
- console.assert(!img.empty() && img.depth() == cv.CV_8U && ch <= 4);
- let n = 255 / delta;
- for(let r = 0; r < img.rows; ++r) {
- let kR = r % (2*n);
- let valR = (kR<=n) ? delta*kR : delta*(2*n-kR);
- for(let c = 0; c < img.cols; ++c) {
- let kC = c % (2*n);
- let valC = (kC<=n) ? delta*kC : delta*(2*n-kC);
- let vals = [valR, valC, 200*r/img.rows, 255];
- let p = img.ptr(r, c);
- for(let i = 0; i < ch; ++i) p[i] = vals[i];
- }
- }
- }
- var smoothBorder = function(cv, img, color, delta=5) {
- let ch = img.channels();
- console.assert(!img.empty() && img.depth() == cv.CV_8U && ch <= 4);
- let n = 100/delta;
- let nR = Math.min(n, (img.rows+1)/2);
- let nC = Math.min(n, (img.cols+1)/2);
- let s = new cv.Scalar();
- for (let r = 0; r < nR; r++) {
- let k1 = r*delta/100.0, k2 = 1-k1;
- for(let c = 0; c < img.cols; c++) {
- let view = img.ptr(r, c);
- for(let i = 0; i < ch; i++) s[i] = view[i];
- for(let i = 0; i < ch; i++) view[i] = s[i]*k1 + color[i] * k2;
- }
- for(let c=0; c < img.cols; c++) {
- let view = img.ptr(img.rows-r-1, c);
- for(let i = 0; i < ch; i++) s[i] = view[i];
- for(let i = 0; i < ch; i++) view[i] = s[i]*k1 + color[i] * k2;
- }
- }
- for (let r = 0; r < img.rows; r++) {
- for(let c = 0; c < nC; c++) {
- let k1 = c*delta/100.0, k2 = 1-k1;
- let view = img.ptr(r, c);
- for(let i = 0; i < ch; i++) s[i] = view[i];
- for(let i = 0; i < ch; i++) view[i] = s[i]*k1 + color[i] * k2;
- }
- for(let c = 0; c < n; c++) {
- let k1 = c*delta/100.0, k2 = 1-k1;
- let view = img.ptr(r, img.cols-c-1);
- for(let i = 0; i < ch; i++) s[i] = view[i];
- for(let i = 0; i < ch; i++) view[i] = s[i]*k1 + color[i] * k2;
- }
- }
- }
- var cvtStr2cvSize = function(strSize) {
- let size;
- let cvSize = getCvSize();
- switch(strSize) {
- case "127,61": size = cvSize.szODD;break;
- case '320,240': size = cvSize.szQVGA;break;
- case '640,480': size = cvSize.szVGA;break;
- case '800,600': size = cvSize.szSVGA;break;
- case '960,540': size = cvSize.szqHD;break;
- case '1024,768': size = cvSize.szXGA;break;
- case '1280,720': size = cvSize.sz720p;break;
- case '1280,1024': size = cvSize.szSXGA;break;
- case '1920,1080': size = cvSize.sz1080p;break;
- case "130,60": size = cvSize.sz130x60;break;
- case '213,120': size = cvSize.sz213x120;break;
- default: console.error("unsupported size for this case");
- }
- return size;
- }
- var combine = function() {
- let result = [[]];
- for (let i = 0; i < arguments.length; ++i) {
- result = permute(result, arguments[i]);
- }
- return result;
- }
- function permute (source, target) {
- let result = [];
- for (let i = 0; i < source.length; ++i) {
- for (let j = 0; j < target.length; ++j) {
- let tmp = source[i].slice();
- tmp.push(target[j]);
- result.push(tmp);
- }
- }
- return result;
- }
- var constructMode = function (startStr, sChannel, dChannel) {
- let modeList = []
- for (let j in dChannel) {
- modeList.push(startStr+sChannel+"2"+dChannel[j])
- }
- return modeList;
- }
- var enableButton = function () {
- runButton.removeAttribute('disabled');
- runButton.setAttribute('class', 'btn btn-primary');
- runButton.innerHTML = 'Run';
- }
- var disableButton = function () {
- runButton.setAttribute("disabled", "disabled");
- runButton.setAttribute('class', 'btn btn-primary disabled');
- runButton.innerHTML = "Running";
- }
- var log = function (message) {
- console.log(message);
- if (!isNodeJs) {
- logElement.innerHTML += `\n${'\t' + message}`;
- }
- }
- var addKernelCase = function (suite, params, type, kernelFunc) {
- kernelFunc(suite, type);
- let index = suite.length - 1;
- suite[index].params = params;
- }
- function constructParamLog(params, kernel) {
- let paramLog = '';
- if (kernel == "cvtcolor") {
- let mode = params.mode;
- let size = params.size;
- paramLog = `params: (${parseInt(size[0])}x${parseInt(size[1])}, ${mode})`;
- } else if (kernel == "resize") {
- let matType = params.matType;
- let size1 = params.from;
- let size2 = params.to;
- paramLog = `params: (${matType},${parseInt(size1.width)}x${parseInt(size1.height)},`+
- `${parseInt(size2.width)}x${parseInt(size2.height)})`;
- } else if (kernel == "threshold") {
- let matSize = params.matSize;
- let matType = params.matType;
- let threshType = params.threshType;
- paramLog = `params: (${parseInt(matSize.width)}x${parseInt(matSize.height)},`+
- `${matType},${threshType})`;
- } else if (kernel == "sobel") {
- let size = params.size;
- let ddepth = params.ddepth;
- let dxdy = params.dxdy;
- let ksize = params.ksize;
- let borderType = params.borderType;
- paramLog = `params: (${parseInt(size[0])}x${parseInt(size[1])},`+
- `${ddepth},${dxdy},${borderType}, ksize:${ksize})`;
- } else if (kernel == "filter2d") {
- let size = params.size;
- let ksize = params.ksize;
- let borderMode = params.borderMode;
- paramLog = `params: (${parseInt(size.width)}x${parseInt(size.height)},`+
- `${ksize},${borderMode})`;
- } else if (kernel == "scharr") {
- let size = params.size;
- let ddepth = params.ddepth;
- let dxdy = params.dxdy;
- let borderType = params.borderType;
- paramLog = `params: (${parseInt(size[0])}x${parseInt(size[1])},`+
- `${ddepth},${dxdy},${borderType})`;
- } else if (kernel == "gaussianBlur" || kernel == "blur") {
- let size = params.size;
- let matType = params.matType;
- let borderType = params.borderType;
- let ksize = params.ksize;
- paramLog = `params: (${parseInt(size.width)}x${parseInt(size.height)},`+
- `${matType},${borderType}, ksize: (${ksize}x${ksize}))`;
- } else if (kernel == "medianBlur") {
- let size = params.size;
- let matType = params.matType;
- let ksize = params.ksize;
- paramLog = `params: (${parseInt(size.width)}x${parseInt(size.height)},`+
- `${matType}, ksize: ${ksize})`;
- } else if (kernel == "erode" || kernel == "dilate" || kernel == "pyrDown") {
- let size = params.size;
- let matType = params.matType;
- paramLog = `params: (${parseInt(size.width)}x${parseInt(size.height)},`+
- `${matType})`;
- } else if (kernel == "remap") {
- let size = params.size;
- let matType = params.matType;
- let mapType = params.mapType;
- let interType = params.interType;
- paramLog = `params: (${parseInt(size.width)}x${parseInt(size.height)},`+
- `${matType}, ${mapType}, ${interType})`;
- } else if (kernel == "warpAffine" || kernel == "warpPerspective") {
- let size = params.size;
- let interType = params.interType;
- let borderMode = params.borderMode;
- paramLog = `params: (${parseInt(size.width)}x${parseInt(size.height)},`+
- `${interType}, ${borderMode})`;
- }
- return paramLog;
- }
- var setBenchmarkSuite = function (suite, kernel, currentCaseId) {
- suite
- // add listeners
- .on('cycle', function(event) {
- ++currentCaseId;
- let params = event.target.params;
- paramLog = constructParamLog(params, kernel);
- log(`=== ${event.target.name} ${currentCaseId} ===`);
- log(paramLog);
- log('elapsed time:' +String(event.target.times.elapsed*1000)+' ms');
- log('mean time:' +String(event.target.stats.mean*1000)+' ms');
- log('stddev time:' +String(event.target.stats.deviation*1000)+' ms');
- log(String(event.target));
- })
- .on('error', function(event) { log(`test case ${event.target.name} failed`); })
- .on('complete', function(event) {
- log(`\n ###################################`)
- log(`Finished testing ${event.currentTarget.length} cases \n`);
- if (!isNodeJs) {
- runButton.removeAttribute('disabled');
- runButton.setAttribute('class', 'btn btn-primary');
- runButton.innerHTML = 'Run';
- }
- });
- }
- var decodeParams2Case = function(paramContent, paramsList, combinations) {
- let sizeString = (paramContent.match(/[0-9]+x[0-9]+/g) || []).toString();
- let sizes = (sizeString.match(/[0-9]+/g) || []);
- let paramSize = paramsList.length;
- let paramObjs = []
- let sizeCount = 0;
- for (let i = 0; i < paramSize; i++) {
- let param = paramsList[i];
- let paramName = param.name;
- let paramValue = param.value;
- let paramReg = param.reg;
- let paramIndex = param.index;
- if(paramValue != "") {
- paramObjs.push({name: paramName, value: paramValue, index: paramIndex});
- } else if (paramName.startsWith('size')) {
- let sizeStr = sizes.slice(sizeCount, sizeCount+2).toString();
- paramValue = cvtStr2cvSize(sizeStr);
- sizeCount += 2;
- paramObjs.push({name: paramName, value: paramValue, index: paramIndex});
- } else {
- for (let index in paramReg) {
- let reg = eval(paramReg[index]);
- if ('loc' in param) {
- paramValue = (paramContent.match(reg) || [])[param.loc].toString();
- } else {
- paramValue = (paramContent.match(reg) || []).toString();
- }
- if (paramValue != "") {
- paramObjs.push({name: paramName, value: paramValue, index: paramIndex});
- break;
- }
- }
- }
- }
- let location = [];
- for (let i = 0; i < combinations.length; ++i) {
- let combination = combinations[i];
- for (let j = 0; j < combination.length; ++j) {
- if (judgeCombin(combination[j], paramObjs)) {
- location.push([i,j]);
- }
- }
- }
- return location;
- }
- function judgeCombin(combination, paramObjs) {
- for (let i =0; i < paramObjs.length; i++) {
- if (paramObjs[i].value != combination[paramObjs[i].index]){
- return false;
- }
- }
- return true;
- }
- if (typeof window === 'undefined') {
- exports.enableButton = enableButton;
- exports.disableButton = disableButton;
- exports.fillGradient = fillGradient;
- exports.smoothBorder = smoothBorder;
- exports.cvtStr2cvSize = cvtStr2cvSize;
- exports.combine = combine;
- exports.constructMode = constructMode;
- exports.log = log;
- exports.decodeParams2Case = decodeParams2Case;
- exports.setBenchmarkSuite = setBenchmarkSuite;
- exports.addKernelCase = addKernelCase;
- }
|