clmtrackr
Version:
Javascript library for precise tracking of facial features via Constrained Local Models
362 lines (299 loc) • 300 kB
JavaScript
import mosse from 'mosse';
import jsfeat from 'jsfeat';
import findFaceWorker from './faceDetection_worker.js';
// import { drawDetection, drawFacialPoints, drawBoundingBox } from './utils/debugging.js';
var faceDetection = function(pdmModel, params) {
// processes an image, detects a face and returns the initial face parameters for clmtrackr
// calls a callback function when it's done
// optionally uses web workers
if (params === undefined) params = {};
if (params.workSize === undefined) params.workSize = 200;
if (params.minScale === undefined) params.minScale = 2;
if (params.scaleFactor === undefined) params.scaleFactor = 1.15;
if (params.useCanny === undefined) params.useCanny = false;
if (params.edgesDensity === undefined) params.edgesDensity = 0.13;
if (params.equalizeHistogram === undefined) params.equalizeHistogram = false;
if (params.min_neighbors === undefined) params.min_neighbors = 2;
if (params.confidenceThreshold === undefined) params.confidenceThreshold = 106.1;
if (params.useWebWorkers === undefined) params.useWebWorkers = true;
// disable web workers if not exists
if (!window.Worker) params.useWebWorkers = false;
var msxmin, msymin, msymax;
var msmodelheight;
var element;
var model = pdmModel;
var mosseFilter = mosse.mosseFilter;
var left_eye_filter = mosse.filters.left_eye_filter;
var right_eye_filter = mosse.filters.right_eye_filter;
var nose_filter = mosse.filters.nose_filter;
var mossef_lefteye, mossef_righteye, mossef_nose;
var right_eye_position = [0.0,0.0];
var left_eye_position = [0.0,0.0];
var nose_position = [0.0,0.0];
if (model.hints && mosseFilter && left_eye_filter && right_eye_filter && nose_filter) {
mossef_lefteye = new mosseFilter();
mossef_lefteye.load(left_eye_filter);
mossef_righteye = new mosseFilter();
mossef_righteye.load(right_eye_filter);
mossef_nose = new mosseFilter();
mossef_nose.load(nose_filter);
} else {
console.log('MOSSE filters not found, using rough approximation for initialization.');
}
// load mean shape
var meanShape = model.shapeModel.meanShape;
var numPatches = model.patchModel.numPatches;
// get max and mins, width and height of meanshape
msymax = 0;
msxmin = msymin = 1000000;
for (var i = 0;i < numPatches;i++) {
if (meanShape[i][0] < msxmin) msxmin = meanShape[i][0];
if (meanShape[i][1] < msymin) msymin = meanShape[i][1];
if (meanShape[i][1] > msymax) msymax = meanShape[i][1];
}
msmodelheight = msymax-msymin;
var jf = new jsfeat_face(params);
this.init = function(video) {
element = video;
jf.init(element);
}
var getBoundingBox = function(box) {
return new Promise(function(resolve, reject) {
if (box) {
resolve({x : box[0], y : box[1], width : box[2], height : box[3]});
} else {
resolve(jf.findFace());
}
});
}
var getFinegrainedPosition = function(candidate) {
var translateX, translateY, scaling, rotation;
var x = candidate.x;
var y = candidate.y;
var w = candidate.width;
var h = candidate.height;
// var debugCC = document.getElementById('overlay2').getContext('2d')
if (model.hints && mosseFilter && left_eye_filter && right_eye_filter && nose_filter) {
var noseFilterWidth = w * 4.5/10;
var eyeFilterWidth = w * 6/10;
// detect position of eyes and nose via mosse filter
var nose_result = mossef_nose.track(element, Math.round(x+(w/2)-(noseFilterWidth/2)), Math.round(y+h*(5/8)-(noseFilterWidth/2)), noseFilterWidth, noseFilterWidth, false);
var right_result = mossef_righteye.track(element, Math.round(x+(w*3/4)-(eyeFilterWidth/2)), Math.round(y+h*(2/5)-(eyeFilterWidth/2)), eyeFilterWidth, eyeFilterWidth, false);
var left_result = mossef_lefteye.track(element, Math.round(x+(w/4)-(eyeFilterWidth/2)), Math.round(y+h*(2/5)-(eyeFilterWidth/2)), eyeFilterWidth, eyeFilterWidth, false);
right_eye_position[0] = Math.round(x+(w*3/4)-(eyeFilterWidth/2))+right_result[0];
right_eye_position[1] = Math.round(y+h*(2/5)-(eyeFilterWidth/2))+right_result[1];
left_eye_position[0] = Math.round(x+(w/4)-(eyeFilterWidth/2))+left_result[0];
left_eye_position[1] = Math.round(y+h*(2/5)-(eyeFilterWidth/2))+left_result[1];
nose_position[0] = Math.round(x+(w/2)-(noseFilterWidth/2))+nose_result[0];
nose_position[1] = Math.round(y+h*(5/8)-(noseFilterWidth/2))+nose_result[1];
// drawDetection(debugCC, candidate, [left_eye_position, right_eye_positions, nose_position]);
// get eye and nose positions of model
var lep = model.hints.leftEye;
var rep = model.hints.rightEye;
var mep = model.hints.nose;
// get scaling, rotation, etc. via procrustes analysis
var procrustes_params = procrustes([left_eye_position, right_eye_position, nose_position], [lep, rep, mep]);
translateX = procrustes_params[0];
translateY = procrustes_params[1];
scaling = procrustes_params[2];
rotation = procrustes_params[3];
// drawFacialPoints(debugCC, [lep, rep, mep], procrustes_params);
} else {
// drawBoundingBox(debugCC, [x,y,w,h]);
scaling = w/msmodelheight;
rotation = 0;
translateX = x-(msxmin*scaling)+0.1*w;
translateY = y-(msymin*scaling)+0.25*h;
}
return [scaling, rotation, translateX, translateY];
}
// get initial starting point for model
this.getInitialPosition = function(box) {
return new Promise(function(resolve, reject) {
getBoundingBox(box)
.then(getFinegrainedPosition)
.then(resolve)
.catch(reject);
});
}
// procrustes analysis
function procrustes(template, shape) {
// assume template and shape is a vector of x,y-coordinates
//i.e. template = [[x1,y1], [x2,y2], [x3,y3]];
var templateClone = [];
var shapeClone = [];
for (var i = 0;i < template.length;i++) {
templateClone[i] = [template[i][0], template[i][1]];
}
for (var i = 0;i < shape.length;i++) {
shapeClone[i] = [shape[i][0], shape[i][1]];
}
shape = shapeClone;
template = templateClone;
// calculate translation
var templateMean = [0.0, 0.0];
for (var i = 0;i < template.length;i++) {
templateMean[0] += template[i][0];
templateMean[1] += template[i][1];
}
templateMean[0] /= template.length;
templateMean[1] /= template.length;
var shapeMean = [0.0, 0.0];
for (var i = 0;i < shape.length;i++) {
shapeMean[0] += shape[i][0];
shapeMean[1] += shape[i][1];
}
shapeMean[0] /= shape.length;
shapeMean[1] /= shape.length;
var translationX = templateMean[0] - shapeMean[0];
var translationY = templateMean[1] - shapeMean[1];
// centralize
for (var i = 0;i < shape.length;i++) {
shape[i][0] -= shapeMean[0];
shape[i][1] -= shapeMean[1];
}
for (var i = 0;i < template.length;i++) {
template[i][0] -= templateMean[0];
template[i][1] -= templateMean[1];
}
// scaling
var scaleS = 0.0;
for (var i = 0;i < shape.length;i++) {
scaleS += ((shape[i][0])*(shape[i][0]));
scaleS += ((shape[i][1])*(shape[i][1]));
}
scaleS = Math.sqrt(scaleS/shape.length);
var scaleT = 0.0;
for (var i = 0;i < template.length;i++) {
scaleT += ((template[i][0])*(template[i][0]));
scaleT += ((template[i][1])*(template[i][1]));
}
scaleT = Math.sqrt(scaleT/template.length);
var scaling = scaleT/scaleS;
for (var i = 0;i < shape.length;i++) {
shape[i][0] *= scaling;
shape[i][1] *= scaling;
}
// rotation
var top = 0.0;
var bottom = 0.0;
for (var i = 0;i < shape.length;i++) {
top += (shape[i][0]*template[i][1] - shape[i][1]*template[i][0]);
bottom += (shape[i][0]*template[i][0] + shape[i][1]*template[i][1]);
}
var rotation = Math.atan(top/bottom);
translationX += (shapeMean[0]-(scaling*Math.cos(-rotation)*shapeMean[0])-(scaling*shapeMean[1]*Math.sin(-rotation)));
translationY += (shapeMean[1]+(scaling*Math.sin(-rotation)*shapeMean[0])-(scaling*shapeMean[1]*Math.cos(-rotation)));
return [translationX, translationY, scaling, rotation];
}
}
// simple wrapper for jsfeat face detector that can run as a webworker
var jsfeat_face = function(parameters) {
var params = parameters;
var maxWorkSize = params.workSize;
var useWebWorkers = params.useWebWorkers;
var work_canvas = document.createElement('canvas');
var work_ctx = work_canvas.getContext('2d');
var videoWidth, videoHeight, scale, video, w, h;
var img_u8, edg, ii_sum, ii_sqsum, ii_tilted, ii_canny, classifier;
var worker;
if (useWebWorkers) {
// Courtesy of stackoverflow
Worker.createURL = function(func_or_string) {
var str = (typeof func_or_string === 'function')?func_or_string.toString():func_or_string;
var blob = new Blob(['\'use strict\';\nself.onmessage ='+str], { type: 'text/javascript' });
return window.URL.createObjectURL(blob);
};
Worker.create = function(func_or_string) {
return new Worker(Worker.createURL(func_or_string));
};
worker = Worker.create(findFaceWorker);
}
this.init = function(element) {
video = element;
videoWidth = video.width;
videoHeight = video.height;
// scale down canvas we do detection on (to reduce noisy detections)
scale = Math.min(maxWorkSize/videoWidth, maxWorkSize/videoHeight);
w = (videoWidth*scale)|0;
h = (videoHeight*scale)|0;
work_canvas.height = h;
work_canvas.width = w;
if (!useWebWorkers) {
img_u8 = new jsfeat.matrix_t(w, h, jsfeat.U8_t | jsfeat.C1_t);
edg = new jsfeat.matrix_t(w, h, jsfeat.U8_t | jsfeat.C1_t);
ii_sum = new Int32Array((w+1)*(h+1));
ii_sqsum = new Int32Array((w+1)*(h+1));
ii_tilted = new Int32Array((w+1)*(h+1));
ii_canny = new Int32Array((w+1)*(h+1));
classifier = jsfeat.haar.frontalface;
}
}
this.findFace = function () {
work_ctx.drawImage(video, 0, 0, work_canvas.width, work_canvas.height);
var imageData = work_ctx.getImageData(0, 0, work_canvas.width, work_canvas.height);
return new Promise(function(resolve, reject) {
if (useWebWorkers) {
worker.addEventListener('message', function (e) {
if (e.data.faces.length > 0) {
resolve(e.data.faces[0]);
} else {
reject();
}
}.bind(this), false);
worker.postMessage({
w: work_canvas.width,
h: work_canvas.height,
videoWidth: videoWidth,
imageData:imageData,
params: params
});
} else {
jsfeat.imgproc.grayscale(imageData.data, work_canvas.width, work_canvas.height, img_u8);
// possible params
if(params.equalizeHistogram) {
jsfeat.imgproc.equalize_histogram(img_u8, img_u8);
}
//jsfeat.imgproc.gaussian_blur(img_u8, img_u8, 3);
jsfeat.imgproc.compute_integral_image(img_u8, ii_sum, ii_sqsum, classifier.tilted ? ii_tilted : null);
if(params.useCanny) {
jsfeat.imgproc.canny(img_u8, edg, 10, 50);
jsfeat.imgproc.compute_integral_image(edg, ii_canny, null, null);
}
jsfeat.haar.edgesDensity = params.edgesDensity;
var rects = jsfeat.haar.detect_multi_scale(ii_sum, ii_sqsum, ii_tilted, params.useCanny? ii_canny : null, img_u8.cols, img_u8.rows, classifier, params.scaleFactor, params.minScale);
rects = jsfeat.haar.group_rectangles(rects, params.min_neighbors);
for (var i = rects.length-1;i >= 0;i--) {
if (rects[i].confidence < params.confidenceThreshold) {
rects.splice(i,1);
}
}
var rl = rects.length;
if (rl == 0) {
reject();
} else {
var best = rects[0];
for (var i = 1; i < rl; i++) {
if (rects[i].neighbors > best.neighbors) {
best = rects[i];
} else if (rects[i].neighbors == best.neighbors) {
// if (rects[i].width > best.width) best = rects[i]; // use biggest rect
if (rects[i].confidence > best.confidence) best = rects[i]; // use most confident rect
}
}
var sc = videoWidth / img_u8.cols;
best.x = (best.x*sc)|0;
best.y = (best.y*sc)|0;
best.width = (best.width*sc)|0;
best.height = (best.height*sc)|0;
resolve(best);
}
}
});
};
};
/**
* this cascade is derived from https://github.com/mtschirs/js-objectdetect implementation
* @author Martin Tschirsich / http://www.tu-darmstadt.de/~m_t
*/
jsfeat.haar.frontalface = {complexClassifiers:[{simpleClassifiers:[{features:[[3,7,14,4,-1.],[3,9,14,2,2.]],threshold:4.0141958743333817e-003,right_val:0.8378106951713562,left_val:0.0337941907346249},{features:[[1,2,18,4,-1.],[7,2,6,4,3.]],threshold:0.0151513395830989,right_val:0.7488812208175659,left_val:0.1514132022857666},{features:[[1,7,15,9,-1.],[1,10,15,3,3.]],threshold:4.2109931819140911e-003,right_val:0.6374819874763489,left_val:0.0900492817163467}],threshold:0.8226894140243530},{simpleClassifiers:[{features:[[5,6,2,6,-1.],[5,9,2,3,2.]],threshold:1.6227109590545297e-003,right_val:0.7110946178436279,left_val:0.0693085864186287},{features:[[7,5,6,3,-1.],[9,5,2,3,3.]],threshold:2.2906649392098188e-003,right_val:0.6668692231178284,left_val:0.1795803010463715},{features:[[4,0,12,9,-1.],[4,3,12,3,3.]],threshold:5.0025708042085171e-003,right_val:0.6554006934165955,left_val:0.1693672984838486},{features:[[6,9,10,8,-1.],[6,13,10,4,2.]],threshold:7.9659894108772278e-003,right_val:0.0914145186543465,left_val:0.5866332054138184},{features:[[3,6,14,8,-1.],[3,10,14,4,2.]],threshold:-3.5227010957896709e-003,right_val:0.6031895875930786,left_val:0.1413166970014572},{features:[[14,1,6,10,-1.],[14,1,3,10,2.]],threshold:0.0366676896810532,right_val:0.7920318245887756,left_val:0.3675672113895416},{features:[[7,8,5,12,-1.],[7,12,5,4,3.]],threshold:9.3361474573612213e-003,right_val:0.2088509947061539,left_val:0.6161385774612427},{features:[[1,1,18,3,-1.],[7,1,6,3,3.]],threshold:8.6961314082145691e-003,right_val:0.6360273957252502,left_val:0.2836230993270874},{features:[[1,8,17,2,-1.],[1,9,17,1,2.]],threshold:1.1488880263641477e-003,right_val:0.5800700783729553,left_val:0.2223580926656723},{features:[[16,6,4,2,-1.],[16,7,4,1,2.]],threshold:-2.1484689787030220e-003,right_val:0.5787054896354675,left_val:0.2406464070081711},{features:[[5,17,2,2,-1.],[5,18,2,1,2.]],threshold:2.1219060290604830e-003,right_val:0.1362237036228180,left_val:0.5559654831886292},{features:[[14,2,6,12,-1.],[14,2,3,12,2.]],threshold:-0.0939491465687752,right_val:0.4717740118503571,left_val:0.8502737283706665},{features:[[4,0,4,12,-1.],[4,0,2,6,2.],[6,6,2,6,2.]],threshold:1.3777789426967502e-003,right_val:0.2834529876708984,left_val:0.5993673801422119},{features:[[2,11,18,8,-1.],[8,11,6,8,3.]],threshold:0.0730631574988365,right_val:0.7060034275054932,left_val:0.4341886043548584},{features:[[5,7,10,2,-1.],[5,8,10,1,2.]],threshold:3.6767389974556863e-004,right_val:0.6051574945449829,left_val:0.3027887940406799},{features:[[15,11,5,3,-1.],[15,12,5,1,3.]],threshold:-6.0479710809886456e-003,right_val:0.5675256848335266,left_val:0.1798433959484100}],threshold:6.9566087722778320},{simpleClassifiers:[{features:[[5,3,10,9,-1.],[5,6,10,3,3.]],threshold:-0.0165106896311045,right_val:0.1424857974052429,left_val:0.6644225120544434},{features:[[9,4,2,14,-1.],[9,11,2,7,2.]],threshold:2.7052499353885651e-003,right_val:0.1288477033376694,left_val:0.6325352191925049},{features:[[3,5,4,12,-1.],[3,9,4,4,3.]],threshold:2.8069869149476290e-003,right_val:0.6193193197250366,left_val:0.1240288019180298},{features:[[4,5,12,5,-1.],[8,5,4,5,3.]],threshold:-1.5402400167658925e-003,right_val:0.5670015811920166,left_val:0.1432143002748489},{features:[[5,6,10,8,-1.],[5,10,10,4,2.]],threshold:-5.6386279175058007e-004,right_val:0.5905207991600037,left_val:0.1657433062791824},{features:[[8,0,6,9,-1.],[8,3,6,3,3.]],threshold:1.9253729842603207e-003,right_val:0.5738824009895325,left_val:0.2695507109165192},{features:[[9,12,1,8,-1.],[9,16,1,4,2.]],threshold:-5.0214841030538082e-003,right_val:0.5782774090766907,left_val:0.1893538981676102},{features:[[0,7,20,6,-1.],[0,9,20,2,3.]],threshold:2.6365420781075954e-003,right_val:0.5695425868034363,left_val:0.2309329062700272},{features:[[7,0,6,17,-1.],[9,0,2,17,3.]],threshold:-1.5127769438549876e-003,right_val:0.5956642031669617,left_val:0.2759602069854736},{features:[[9,0,6,4,-1.],[11,0,2,4,3.]],threshold:-0.0101574398577213,right_val:0.5522047281265259,left_val:0.1732538044452667},{features:[[5,1,6,4,-1.],[7,1,2,4,3.]],threshold:-0.0119536602869630,right_val:0.5559014081954956,left_val:0.1339409947395325},{features:[[12,1,6,16,-1.],[14,1,2,16,3.]],threshold:4.8859491944313049e-003,right_val:0.6188849210739136,left_val:0.3628703951835632},{features:[[0,5,18,8,-1.],[0,5,9,4,2.],[9,9,9,4,2.]],threshold:-0.0801329165697098,right_val:0.5475944876670837,left_val:0.0912110507488251},{features:[[8,15,10,4,-1.],[13,15,5,2,2.],[8,17,5,2,2.]],threshold:1.0643280111253262e-003,right_val:0.5711399912834168,left_val:0.3715142905712128},{features:[[3,1,4,8,-1.],[3,1,2,4,2.],[5,5,2,4,2.]],threshold:-1.3419450260698795e-003,right_val:0.3318097889423370,left_val:0.5953313708305359},{features:[[3,6,14,10,-1.],[10,6,7,5,2.],[3,11,7,5,2.]],threshold:-0.0546011403203011,right_val:0.5602846145629883,left_val:0.1844065934419632},{features:[[2,1,6,16,-1.],[4,1,2,16,3.]],threshold:2.9071690514683723e-003,right_val:0.6131715178489685,left_val:0.3594244122505188},{features:[[0,18,20,2,-1.],[0,19,20,1,2.]],threshold:7.4718717951327562e-004,right_val:0.3459562957286835,left_val:0.5994353294372559},{features:[[8,13,4,3,-1.],[8,14,4,1,3.]],threshold:4.3013808317482471e-003,right_val:0.6990845203399658,left_val:0.4172652065753937},{features:[[9,14,2,3,-1.],[9,15,2,1,3.]],threshold:4.5017572119832039e-003,right_val:0.7801457047462463,left_val:0.4509715139865875},{features:[[0,12,9,6,-1.],[0,14,9,2,3.]],threshold:0.0241385009139776,right_val:0.1319826990365982,left_val:0.5438212752342224}],threshold:9.4985427856445313},{simpleClassifiers:[{features:[[5,7,3,4,-1.],[5,9,3,2,2.]],threshold:1.9212230108678341e-003,right_val:0.6199870705604553,left_val:0.1415266990661621},{features:[[9,3,2,16,-1.],[9,11,2,8,2.]],threshold:-1.2748669541906565e-004,right_val:0.1884928941726685,left_val:0.6191074252128601},{features:[[3,6,13,8,-1.],[3,10,13,4,2.]],threshold:5.1409931620582938e-004,right_val:0.5857927799224854,left_val:0.1487396955490112},{features:[[12,3,8,2,-1.],[12,3,4,2,2.]],threshold:4.1878609918057919e-003,right_val:0.6359239816665649,left_val:0.2746909856796265},{features:[[8,8,4,12,-1.],[8,12,4,4,3.]],threshold:5.1015717908740044e-003,right_val:0.2175628989934921,left_val:0.5870851278305054},{features:[[11,3,8,6,-1.],[15,3,4,3,2.],[11,6,4,3,2.]],threshold:-2.1448440384119749e-003,right_val:0.2979590892791748,left_val:0.5880944728851318},{features:[[7,1,6,19,-1.],[9,1,2,19,3.]],threshold:-2.8977119363844395e-003,right_val:0.5876647233963013,left_val:0.2373327016830444},{features:[[9,0,6,4,-1.],[11,0,2,4,3.]],threshold:-0.0216106791049242,right_val:0.5194202065467835,left_val:0.1220654994249344},{features:[[3,1,9,3,-1.],[6,1,3,3,3.]],threshold:-4.6299318782985210e-003,right_val:0.5817409157752991,left_val:0.2631230950355530},{features:[[8,15,10,4,-1.],[13,15,5,2,2.],[8,17,5,2,2.]],threshold:5.9393711853772402e-004,right_val:0.5698544979095459,left_val:0.3638620078563690},{features:[[0,3,6,10,-1.],[3,3,3,10,2.]],threshold:0.0538786612451077,right_val:0.7559366226196289,left_val:0.4303531050682068},{features:[[3,4,15,15,-1.],[3,9,15,5,3.]],threshold:1.8887349870055914e-003,right_val:0.5613427162170410,left_val:0.2122603058815002},{features:[[6,5,8,6,-1.],[6,7,8,2,3.]],threshold:-2.3635339457541704e-003,right_val:0.2642767131328583,left_val:0.5631849169731140},{features:[[4,4,12,10,-1.],[10,4,6,5,2.],[4,9,6,5,2.]],threshold:0.0240177996456623,right_val:0.2751705944538117,left_val:0.5797107815742493},{features:[[6,4,4,4,-1.],[8,4,2,4,2.]],threshold:2.0543030404951423e-004,right_val:0.5752568840980530,left_val:0.2705242037773132},{features:[[15,11,1,2,-1.],[15,12,1,1,2.]],threshold:8.4790197433903813e-004,right_val:0.2334876954555512,left_val:0.5435624718666077},{features:[[3,11,2,2,-1.],[3,12,2,1,2.]],threshold:1.4091329649090767e-003,right_val:0.2063155025243759,left_val:0.5319424867630005},{features:[[16,11,1,3,-1.],[16,12,1,1,3.]],threshold:1.4642629539594054e-003,right_val:0.3068861067295075,left_val:0.5418980717658997},{features:[[3,15,6,4,-1.],[3,15,3,2,2.],[6,17,3,2,2.]],threshold:1.6352549428120255e-003,right_val:0.6112868189811707,left_val:0.3695372939109802},{features:[[6,7,8,2,-1.],[6,8,8,1,2.]],threshold:8.3172752056270838e-004,right_val:0.6025236248970032,left_val:0.3565036952495575},{features:[[3,11,1,3,-1.],[3,12,1,1,3.]],threshold:-2.0998890977352858e-003,right_val:0.5362827181816101,left_val:0.1913982033729553},{features:[[6,0,12,2,-1.],[6,1,12,1,2.]],threshold:-7.4213981861248612e-004,right_val:0.5529310107231140,left_val:0.3835555016994476},{features:[[9,14,2,3,-1.],[9,15,2,1,3.]],threshold:3.2655049581080675e-003,right_val:0.7101895809173584,left_val:0.4312896132469177},{features:[[7,15,6,2,-1.],[7,16,6,1,2.]],threshold:8.9134991867467761e-004,right_val:0.6391963958740234,left_val:0.3984830975532532},{features:[[0,5,4,6,-1.],[0,7,4,2,3.]],threshold:-0.0152841797098517,right_val:0.5433713793754578,left_val:0.2366732954978943},{features:[[4,12,12,2,-1.],[8,12,4,2,3.]],threshold:4.8381411470472813e-003,right_val:0.3239189088344574,left_val:0.5817500948905945},{features:[[6,3,1,9,-1.],[6,6,1,3,3.]],threshold:-9.1093179071322083e-004,right_val:0.2911868989467621,left_val:0.5540593862533569},{features:[[10,17,3,2,-1.],[11,17,1,2,3.]],threshold:-6.1275060288608074e-003,right_val:0.5196629166603088,left_val:0.1775255054235458},{features:[[9,9,2,2,-1.],[9,10,2,1,2.]],threshold:-4.4576259097084403e-004,right_val:0.5533593893051148,left_val:0.3024170100688934},{features:[[7,6,6,4,-1.],[9,6,2,4,3.]],threshold:0.0226465407758951,right_val:0.6975377202033997,left_val:0.4414930939674377},{features:[[7,17,3,2,-1.],[8,17,1,2,3.]],threshold:-1.8804960418492556e-003,right_val:0.5497952103614807,left_val:0.2791394889354706},{features:[[10,17,3,3,-1.],[11,17,1,3,3.]],threshold:7.0889107882976532e-003,right_val:0.2385547012090683,left_val:0.5263199210166931},{features:[[8,12,3,2,-1.],[8,13,3,1,2.]],threshold:1.7318050377070904e-003,right_val:0.6983600854873657,left_val:0.4319379031658173},{features:[[9,3,6,2,-1.],[11,3,2,2,3.]],threshold:-6.8482700735330582e-003,right_val:0.5390920042991638,left_val:0.3082042932510376},{features:[[3,11,14,4,-1.],[3,13,14,2,2.]],threshold:-1.5062530110299122e-005,right_val:0.3120366036891937,left_val:0.5521922111511231},{features:[[1,10,18,4,-1.],[10,10,9,2,2.],[1,12,9,2,2.]],threshold:0.0294755697250366,right_val:0.1770603060722351,left_val:0.5401322841644287},{features:[[0,10,3,3,-1.],[0,11,3,1,3.]],threshold:8.1387329846620560e-003,right_val:0.1211019009351730,left_val:0.5178617835044861},{features:[[9,1,6,6,-1.],[11,1,2,6,3.]],threshold:0.0209429506212473,right_val:0.3311221897602081,left_val:0.5290294289588928},{features:[[8,7,3,6,-1.],[9,7,1,6,3.]],threshold:-9.5665529370307922e-003,right_val:0.4451968967914581,left_val:0.7471994161605835}],threshold:18.4129695892333980},{simpleClassifiers:[{features:[[1,0,18,9,-1.],[1,3,18,3,3.]],threshold:-2.8206960996612906e-004,right_val:0.6076732277870178,left_val:0.2064086049795151},{features:[[12,10,2,6,-1.],[12,13,2,3,2.]],threshold:1.6790600493550301e-003,right_val:0.1255383938550949,left_val:0.5851997137069702},{features:[[0,5,19,8,-1.],[0,9,19,4,2.]],threshold:6.9827912375330925e-004,right_val:0.5728961229324341,left_val:0.0940184295177460},{features:[[7,0,6,9,-1.],[9,0,2,9,3.]],threshold:7.8959012171253562e-004,right_val:0.5694308876991272,left_val:0.1781987994909287},{features:[[5,3,6,1,-1.],[7,3,2,1,3.]],threshold:-2.8560499195009470e-003,right_val:0.5788664817810059,left_val:0.1638399064540863},{features:[[11,3,6,1,-1.],[13,3,2,1,3.]],threshold:-3.8122469559311867e-003,right_val:0.5508564710617065,left_val:0.2085440009832382},{features:[[5,10,4,6,-1.],[5,13,4,3,2.]],threshold:1.5896620461717248e-003,right_val:0.1857215017080307,left_val:0.5702760815620422},{features:[[11,3,6,1,-1.],[13,3,2,1,3.]],threshold:0.0100783398374915,right_val:0.2189770042896271,left_val:0.5116943120956421},{features:[[4,4,12,6,-1.],[4,6,12,2,3.]],threshold:-0.0635263025760651,right_val:0.4043813049793243,left_val:0.7131379842758179},{features:[[15,12,2,6,-1.],[15,14,2,2,3.]],threshold:-9.1031491756439209e-003,right_val:0.5463973283767700,left_val:0.2567181885242462},{features:[[9,3,2,2,-1.],[10,3,1,2,2.]],threshold:-2.4035000242292881e-003,right_val:0.5590974092483521,left_val:0.1700665950775147},{features:[[9,3,3,1,-1.],[10,3,1,1,3.]],threshold:1.5226360410451889e-003,right_val:0.2619054019451141,left_val:0.5410556793212891},{features:[[1,1,4,14,-1.],[3,1,2,14,2.]],threshold:0.0179974399507046,right_val:0.6535220742225647,left_val:0.3732436895370483},{features:[[9,0,4,4,-1.],[11,0,2,2,2.],[9,2,2,2,2.]],threshold:-6.4538191072642803e-003,right_val:0.5537446141242981,left_val:0.2626481950283051},{features:[[7,5,1,14,-1.],[7,12,1,7,2.]],threshold:-0.0118807600811124,right_val:0.5544745922088623,left_val:0.2003753930330277},{features:[[19,0,1,4,-1.],[19,2,1,2,2.]],threshold:1.2713660253211856e-003,right_val:0.3031975924968720,left_val:0.5591902732849121},{features:[[5,5,6,4,-1.],[8,5,3,4,2.]],threshold:1.1376109905540943e-003,right_val:0.5646508932113648,left_val:0.2730407118797302},{features:[[9,18,3,2,-1.],[10,18,1,2,3.]],threshold:-4.2651998810470104e-003,right_val:0.5461820960044861,left_val:0.1405909061431885},{features:[[8,18,3,2,-1.],[9,18,1,2,3.]],threshold:-2.9602861031889915e-003,right_val:0.5459290146827698,left_val:0.1795035004615784},{features:[[4,5,12,6,-1.],[4,7,12,2,3.]],threshold:-8.8448226451873779e-003,right_val:0.2809219956398010,left_val:0.5736783146858215},{features:[[3,12,2,6,-1.],[3,14,2,2,3.]],threshold:-6.6430689767003059e-003,right_val:0.5503826141357422,left_val:0.2370675951242447},{features:[[10,8,2,12,-1.],[10,12,2,4,3.]],threshold:3.9997808635234833e-003,right_val:0.3304282128810883,left_val:0.5608199834823608},{features:[[7,18,3,2,-1.],[8,18,1,2,3.]],threshold:-4.1221720166504383e-003,right_val:0.5378993153572083,left_val:0.1640105992555618},{features:[[9,0,6,2,-1.],[11,0,2,2,3.]],threshold:0.0156249096617103,right_val:0.2288603931665421,left_val:0.5227649211883545},{features:[[5,11,9,3,-1.],[5,12,9,1,3.]],threshold:-0.0103564197197557,right_val:0.4252927899360657,left_val:0.7016193866729736},{features:[[9,0,6,2,-1.],[11,0,2,2,3.]],threshold:-8.7960809469223022e-003,right_val:0.5355830192565918,left_val:0.2767347097396851},{features:[[1,1,18,5,-1.],[7,1,6,5,3.]],threshold:0.1622693985700607,right_val:0.7442579269409180,left_val:0.4342240095138550},{features:[[8,0,4,4,-1.],[10,0,2,2,2.],[8,2,2,2,2.]],threshold:4.5542530715465546e-003,right_val:0.2582125067710877,left_val:0.5726485848426819},{features:[[3,12,1,3,-1.],[3,13,1,1,3.]],threshold:-2.1309209987521172e-003,right_val:0.5361018776893616,left_val:0.2106848061084747},{features:[[8,14,5,3,-1.],[8,15,5,1,3.]],threshold:-0.0132084200158715,right_val:0.4552468061447144,left_val:0.7593790888786316},{features:[[5,4,10,12,-1.],[5,4,5,6,2.],[10,10,5,6,2.]],threshold:-0.0659966766834259,right_val:0.5344039797782898,left_val:0.1252475976943970},{features:[[9,6,9,12,-1.],[9,10,9,4,3.]],threshold:7.9142656177282333e-003,right_val:0.5601043105125427,left_val:0.3315384089946747},{features:[[2,2,12,14,-1.],[2,2,6,7,2.],[8,9,6,7,2.]],threshold:0.0208942797034979,right_val:0.2768838107585907,left_val:0.5506049990653992}],threshold:15.3241395950317380},{simpleClassifiers:[{features:[[4,7,12,2,-1.],[8,7,4,2,3.]],threshold:1.1961159761995077e-003,right_val:0.6156241297721863,left_val:0.1762690991163254},{features:[[7,4,6,4,-1.],[7,6,6,2,2.]],threshold:-1.8679830245673656e-003,right_val:0.1832399964332581,left_val:0.6118106842041016},{features:[[4,5,11,8,-1.],[4,9,11,4,2.]],threshold:-1.9579799845814705e-004,right_val:0.5723816156387329,left_val:0.0990442633628845},{features:[[3,10,16,4,-1.],[3,12,16,2,2.]],threshold:-8.0255657667294145e-004,right_val:0.2377282977104187,left_val:0.5579879879951477},{features:[[0,0,16,2,-1.],[0,1,16,1,2.]],threshold:-2.4510810617357492e-003,right_val:0.5858935117721558,left_val:0.2231457978487015},{features:[[7,5,6,2,-1.],[9,5,2,2,3.]],threshold:5.0361850298941135e-004,right_val:0.5794103741645813,left_val:0.2653993964195252},{features:[[3,2,6,10,-1.],[3,2,3,5,2.],[6,7,3,5,2.]],threshold:4.0293349884450436e-003,right_val:0.2484865039587021,left_val:0.5803827047348023},{features:[[10,5,8,15,-1.],[10,10,8,5,3.]],threshold:-0.0144517095759511,right_val:0.5484204888343811,left_val:0.1830351948738098},{features:[[3,14,8,6,-1.],[3,14,4,3,2.],[7,17,4,3,2.]],threshold:2.0380979403853416e-003,right_val:0.6051092743873596,left_val:0.3363558948040009},{features:[[14,2,2,2,-1.],[14,3,2,1,2.]],threshold:-1.6155190533027053e-003,right_val:0.5441246032714844,left_val:0.2286642044782639},{features:[[1,10,7,6,-1.],[1,13,7,3,2.]],threshold:3.3458340913057327e-003,right_val:0.2392338067293167,left_val:0.5625913143157959},{features:[[15,4,4,3,-1.],[15,4,2,3,2.]],threshold:1.6379579901695251e-003,right_val:0.5964621901512146,left_val:0.3906993865966797},{features:[[2,9,14,6,-1.],[2,9,7,3,2.],[9,12,7,3,2.]],threshold:0.0302512105554342,right_val:0.1575746983289719,left_val:0.5248482227325440},{features:[[5,7,10,4,-1.],[5,9,10,2,2.]],threshold:0.0372519902884960,right_val:0.6748418807983398,left_val:0.4194310903549194},{features:[[6,9,8,8,-1.],[6,9,4,4,2.],[10,13,4,4,2.]],threshold:-0.0251097902655602,right_val:0.5473451018333435,left_val:0.1882549971342087},{features:[[14,1,3,2,-1.],[14,2,3,1,2.]],threshold:-5.3099058568477631e-003,right_val:0.5227110981941223,left_val:0.1339973062276840},{features:[[1,4,4,2,-1.],[3,4,2,2,2.]],threshold:1.2086479691788554e-003,right_val:0.6109635829925537,left_val:0.3762088119983673},{features:[[11,10,2,8,-1.],[11,14,2,4,2.]],threshold:-0.0219076797366142,right_val:0.5404006838798523,left_val:0.2663142979145050},{features:[[0,0,5,3,-1.],[0,1,5,1,3.]],threshold:5.4116579703986645e-003,right_val:0.2232273072004318,left_val:0.5363578796386719},{features:[[2,5,18,8,-1.],[11,5,9,4,2.],[2,9,9,4,2.]],threshold:0.0699463263154030,right_val:0.2453698068857193,left_val:0.5358232855796814},{features:[[6,6,1,6,-1.],[6,9,1,3,2.]],threshold:3.4520021290518343e-004,right_val:0.5376930236816406,left_val:0.2409671992063522},{features:[[19,1,1,3,-1.],[19,2,1,1,3.]],threshold:1.2627709656953812e-003,right_val:0.3155693113803864,left_val:0.5425856709480286},{features:[[7,6,6,6,-1.],[9,6,2,6,3.]],threshold:0.0227195098996162,right_val:0.6597865223884583,left_val:0.4158405959606171},{features:[[19,1,1,3,-1.],[19,2,1,1,3.]],threshold:-1.8111000536009669e-003,right_val:0.5505244731903076,left_val:0.2811253070831299},{features:[[3,13,2,3,-1.],[3,14,2,1,3.]],threshold:3.3469670452177525e-003,right_val:0.1891465038061142,left_val:0.5260028243064880},{features:[[8,4,8,12,-1.],[12,4,4,6,2.],[8,10,4,6,2.]],threshold:4.0791751234792173e-004,right_val:0.3344210088253021,left_val:0.5673509240150452},{features:[[5,2,6,3,-1.],[7,2,2,3,3.]],threshold:0.0127347996458411,right_val:0.2395612001419067,left_val:0.5343592166900635},{features:[[6,1,9,10,-1.],[6,6,9,5,2.]],threshold:-7.3119727894663811e-003,right_val:0.4022207856178284,left_val:0.6010890007019043},{features:[[0,4,6,12,-1.],[2,4,2,12,3.]],threshold:-0.0569487512111664,right_val:0.4543190896511078,left_val:0.8199151158332825},{features:[[15,13,2,3,-1.],[15,14,2,1,3.]],threshold:-5.0116591155529022e-003,right_val:0.5357710719108582,left_val:0.2200281023979187},{features:[[7,14,5,3,-1.],[7,15,5,1,3.]],threshold:6.0334368608891964e-003,right_val:0.7181751132011414,left_val:0.4413081109523773},{features:[[15,13,3,3,-1.],[15,14,3,1,3.]],threshold:3.9437441155314445e-003,right_val:0.2791733145713806,left_val:0.5478860735893250},{features:[[6,14,8,3,-1.],[6,15,8,1,3.]],threshold:-3.6591119132936001e-003,right_val:0.3989723920822144,left_val:0.6357867717742920},{features:[[15,13,3,3,-1.],[15,14,3,1,3.]],threshold:-3.8456181064248085e-003,right_val:0.5300664901733398,left_val:0.3493686020374298},{features:[[2,13,3,3,-1.],[2,14,3,1,3.]],threshold:-7.1926261298358440e-003,right_val:0.5229672789573669,left_val:0.1119614988565445},{features:[[4,7,12,12,-1.],[10,7,6,6,2.],[4,13,6,6,2.]],threshold:-0.0527989417314529,right_val:0.5453451275825501,left_val:0.2387102991342545},{features:[[9,7,2,6,-1.],[10,7,1,6,2.]],threshold:-7.9537667334079742e-003,right_val:0.4439376890659332,left_val:0.7586917877197266},{features:[[8,9,5,2,-1.],[8,10,5,1,2.]],threshold:-2.7344180271029472e-003,right_val:0.5489321947097778,left_val:0.2565476894378662},{features:[[8,6,3,4,-1.],[9,6,1,4,3.]],threshold:-1.8507939530536532e-003,right_val:0.4252474904060364,left_val:0.6734347939491272},{features:[[9,6,2,8,-1.],[9,10,2,4,2.]],threshold:0.0159189198166132,right_val:0.2292661964893341,left_val:0.5488352775573731},{features:[[7,7,3,6,-1.],[8,7,1,6,3.]],threshold:-1.2687679845839739e-003,right_val:0.4022389948368073,left_val:0.6104331016540527},{features:[[11,3,3,3,-1.],[12,3,1,3,3.]],threshold:6.2883910723030567e-003,right_val:0.1536193042993546,left_val:0.5310853123664856},{features:[[5,4,6,1,-1.],[7,4,2,1,3.]],threshold:-6.2259892001748085e-003,right_val:0.5241606235504150,left_val:0.1729111969470978},{features:[[5,6,10,3,-1.],[5,7,10,1,3.]],threshold:-0.0121325999498367,right_val:0.4325182139873505,left_val:0.6597759723663330}],threshold:21.0106391906738280},{simpleClassifiers:[{features:[[7,3,6,9,-1.],[7,6,6,3,3.]],threshold:-3.9184908382594585e-003,right_val:0.1469330936670303,left_val:0.6103435158729553},{features:[[6,7,9,1,-1.],[9,7,3,1,3.]],threshold:1.5971299726516008e-003,right_val:0.5896466970443726,left_val:0.2632363140583038},{features:[[2,8,16,8,-1.],[2,12,16,4,2.]],threshold:0.0177801102399826,right_val:0.1760361939668655,left_val:0.5872874259948731},{features:[[14,6,2,6,-1.],[14,9,2,3,2.]],threshold:6.5334769897162914e-004,right_val:0.5596066117286682,left_val:0.1567801982164383},{features:[[1,5,6,15,-1.],[1,10,6,5,3.]],threshold:-2.8353091329336166e-004,right_val:0.5732036232948303,left_val:0.1913153976202011},{features:[[10,0,6,9,-1.],[10,3,6,3,3.]],threshold:1.6104689566418529e-003,right_val:0.5623080730438232,left_val:0.2914913892745972},{features:[[6,6,7,14,-1.],[6,13,7,7,2.]],threshold:-0.0977506190538406,right_val:0.5648233294487000,left_val:0.1943476945161820},{features:[[13,7,3,6,-1.],[13,9,3,2,3.]],threshold:5.5182358482852578e-004,right_val:0.5504639744758606,left_val:0.3134616911411285},{features:[[1,8,15,4,-1.],[6,8,5,4,3.]],threshold:-0.0128582203760743,right_val:0.5760142803192139,left_val:0.2536481916904450},{features:[[11,2,3,10,-1.],[11,7,3,5,2.]],threshold:4.1530239395797253e-003,right_val:0.3659774065017700,left_val:0.5767722129821777},{features:[[3,7,4,6,-1.],[3,9,4,2,3.]],threshold:1.7092459602281451e-003,right_val:0.5918939113616943,left_val:0.2843191027641296},{features:[[13,3,6,10,-1.],[15,3,2,10,3.]],threshold:7.5217359699308872e-003,right_val:0.6183109283447266,left_val:0.4052427113056183},{features:[[5,7,8,10,-1.],[5,7,4,5,2.],[9,12,4,5,2.]],threshold:2.2479810286313295e-003,right_val:0.3135401010513306,left_val:0.5783755183219910},{features:[[4,4,12,12,-1.],[10,4,6,6,2.],[4,10,6,6,2.]],threshold:0.0520062111318111,right_val:0.1916636973619461,left_val:0.5541312098503113},{features:[[1,4,6,9,-1.],[3,4,2,9,3.]],threshold:0.0120855299755931,right_val:0.6644591093063355,left_val:0.4032655954360962},{features:[[11,3,2,5,-1.],[11,3,1,5,2.]],threshold:1.4687820112158079e-005,right_val:0.5709382891654968,left_val:0.3535977900028229},{features:[[7,3,2,5,-1.],[8,3,1,5,2.]],threshold:7.1395188570022583e-006,right_val:0.5610269904136658,left_val:0.3037444949150085},{features:[[10,14,2,3,-1.],[10,15,2,1,3.]],threshold:-4.6001640148460865e-003,right_val:0.4580326080322266,left_val:0.7181087136268616},{features:[[5,12,6,2,-1.],[8,12,3,2,2.]],threshold:2.0058949012309313e-003,right_val:0.2953684031963348,left_val:0.5621951818466187},{features:[[9,14,2,3,-1.],[9,15,2,1,3.]],threshold:4.5050270855426788e-003,right_val:0.7619017958641052,left_val:0.4615387916564941},{features:[[4,11,12,6,-1.],[4,14,12,3,2.]],threshold:0.0117468303069472,right_val:0.1772529035806656,left_val:0.5343837141990662},{features:[[11,11,5,9,-1.],[11,14,5,3,3.]],threshold:-0.0583163388073444,right_val:0.5340772271156311,left_val:0.1686245948076248},{features:[[6,15,3,2,-1.],[6,16,3,1,2.]],threshold:2.3629379575140774e-004,right_val:0.6026803851127625,left_val:0.3792056143283844},{features:[[11,0,3,5,-1.],[12,0,1,5,3.]],threshold:-7.8156180679798126e-003,right_val:0.5324323773384094,left_val:0.1512867063283920},{features:[[5,5,6,7,-1.],[8,5,3,7,2.]],threshold:-0.0108761601150036,right_val:0.5319945216178894,left_val:0.2081822007894516},{features:[[13,0,1,9,-1.],[13,3,1,3,3.]],threshold:-2.7745519764721394e-003,right_val:0.5210328102111816,left_val:0.4098246991634369},{features:[[3,2,4,8,-1.],[3,2,2,4,2.],[5,6,2,4,2.]],threshold:-7.8276381827890873e-004,right_val:0.3478842079639435,left_val:0.5693274140357971},{features:[[13,12,4,6,-1.],[13,14,4,2,3.]],threshold:0.0138704096898437,right_val:0.2257698029279709,left_val:0.5326750874519348},{features:[[3,12,4,6,-1.],[3,14,4,2,3.]],threshold:-0.0236749108880758,right_val:0.5200707912445068,left_val:0.1551305055618286},{features:[[13,11,3,4,-1.],[13,13,3,2,2.]],threshold:-1.4879409718560055e-005,right_val:0.3820176124572754,left_val:0.5500566959381104},{features:[[4,4,4,3,-1.],[4,5,4,1,3.]],threshold:3.6190641112625599e-003,right_val:0.6639748215675354,left_val:0.4238683879375458},{features:[[7,5,11,8,-1.],[7,9,11,4,2.]],threshold:-0.0198171101510525,right_val:0.5382357835769653,left_val:0.2150038033723831},{features:[[7,8,3,4,-1.],[8,8,1,4,3.]],threshold:-3.8154039066284895e-003,right_val:0.4215297102928162,left_val:0.6675711274147034},{features:[[9,1,6,1,-1.],[11,1,2,1,3.]],threshold:-4.9775829538702965e-003,right_val:0.5386328101158142,left_val:0.2267289012670517},{features:[[5,5,3,3,-1.],[5,6,3,1,3.]],threshold:2.2441020701080561e-003,right_val:0.6855735778808594,left_val:0.4308691024780273},{features:[[0,9,20,6,-1.],[10,9,10,3,2.],[0,12,10,3,2.]],threshold:0.0122824599966407,right_val:0.3467479050159454,left_val:0.5836614966392517},{features:[[8,6,3,5,-1.],[9,6,1,5,3.]],threshold:-2.8548699337989092e-003,right_val:0.4311453998088837,left_val:0.7016944885253906},{features:[[11,0,1,3,-1.],[11,1,1,1,3.]],threshold:-3.7875669077038765e-003,right_val:0.5224946141242981,left_val:0.2895345091819763},{features:[[4,2,4,2,-1.],[4,3,4,1,2.]],threshold:-1.2201230274513364e-003,right_val:0.5481644868850708,left_val:0.2975570857524872},{features:[[12,6,4,3,-1.],[12,7,4,1,3.]],threshold:0.0101605998352170,right_val:0.8182697892189026,left_val:0.4888817965984345},{features:[[5,0,6,4,-1.],[7,0,2,4,3.]],threshold:-0.0161745697259903,right_val:0.5239992737770081,left_val:0.1481492966413498},{features:[[9,7,3,8,-1.],[10,7,1,8,3.]],threshold:0.0192924607545137,right_val:0.7378190755844116,left_val:0.4786309897899628},{features:[[9,7,2,2,-1.],[10,7,1,2,2.]],threshold:-3.2479539513587952e-003,right_val:0.4470643997192383,left_val:0.7374222874641419},{features:[[6,7,14,4,-1.],[13,7,7,2,2.],[6,9,7,2,2.]],threshold:-9.3803480267524719e-003,right_val:0.5537996292114258,left_val:0.3489154875278473},{features:[[0,5,3,6,-1.],[0,7,3,2,3.]],threshold:-0.0126061299815774,right_val:0.5315443277359009,left_val:0.2379686981439591},{features:[[13,11,3,4,-1.],[13,13,3,2,2.]],threshold:-0.0256219301372766,right_val:0.5138769745826721,left_val:0.1964688003063202},{features:[[4,11,3,4,-1.],[4,13,3,2,2.]],threshold:-7.5741496402770281e-005,right_val:0.3365853130817413,left_val:0.5590522885322571},{features:[[5,9,12,8,-1.],[11,9,6,4,2.],[5,13,6,4,2.]],threshold:-0.0892108827829361,right_val:0.5162634849548340,left_val:0.0634046569466591},{features:[[9,12,1,3,-1.],[9,13,1,1,3.]],threshold:-2.7670480776578188e-003,right_val:0.4490706026554108,left_val:0.7323467731475830},{features:[[10,15,2,4,-1.],[10,17,2,2,2.]],threshold:2.7152578695677221e-004,right_val:0.5985518097877502,left_val:0.4114834964275360}],threshold:23.9187908172607420},{simpleClassifiers:[{features:[[7,7,6,1,-1.],[9,7,2,1,3.]],threshold:1.4786219689995050e-003,right_val:0.6643316745758057,left_val:0.2663545012474060},{features:[[12,3,6,6,-1.],[15,3,3,3,2.],[12,6,3,3,2.]],threshold:-1.8741659587249160e-003,right_val:0.2518512904644013,left_val:0.6143848896026611},{features:[[0,4,10,6,-1.],[0,6,10,2,3.]],threshold:-1.7151009524241090e-003,right_val:0.2397463023662567,left_val:0.5766341090202332},{features:[[8,3,8,14,-1.],[12,3,4,7,2.],[8,10,4,7,2.]],threshold:-1.8939269939437509e-003,right_val:0.2529144883155823,left_val:0.5682045817375183},{features:[[4,4,7,15,-1.],[4,9,7,5,3.]],threshold:-5.3006052039563656e-003,right_val:0.5556079745292664,left_val:0.1640675961971283},{features:[[12,2,6,8,-1.],[15,2,3,4,2.],[12,6,3,4,2.]],threshold:-0.0466625317931175,right_val:0.4762830138206482,left_val:0.6123154163360596},{features:[[2,2,6,8,-1.],[2,2,3,4,2.],[5,6,3,4,2.]],threshold:-7.9431332414969802e-004,right_val:0.2839404046535492,left_val:0.5707858800888062},{features:[[2,13,18,7,-1.],[8,13,6,7,3.]],threshold:0.0148916700854898,right_val:0.6006367206573486,left_val:0.4089672863483429},{features:[[4,3,8,14,-1.],[4,3,4,7,2.],[8,10,4,7,2.]],threshold:-1.2046529445797205e-003,right_val:0.2705289125442505,left_val:0.5712450742721558},{features:[[18,1,2,6,-1.],[18,3,2,2,3.]],threshold:6.0619381256401539e-003,right_val:0.3262225985527039,left_val:0.5262504220008850},{features:[[9,11,2,3,-1.],[9,12,2,1,3.]],threshold:-2.5286648888140917e-003,right_val:0.4199256896972656,left_val:0.6853830814361572},{features:[[18,1,2,6,-1.],[18,3,2,2,3.]],threshold:-5.9010218828916550e-003,right_val:0.5434812903404236,left_val:0.3266282081604004},{features:[[0,1,2,6,-1.],[0,3,2,2,3.]],threshold:5.6702760048210621e-003,right_val:0.2319003939628601,left_val:0.5468410849571228},{features:[[1,5,18,6,-1.],[1,7,18,2,3.]],threshold:-3.0304100364446640e-003,right_val:0.2708238065242767,left_val:0.5570667982101440},{features:[[0,2,6,7,-1.],[3,2,3,7,2.]],threshold:2.9803649522364140e-003,right_val:0.5890625715255737,left_val:0.3700568974018097},{features:[[7,3,6,14,-1.],[7,10,6,7,2.]],threshold:-0.0758405104279518,right_val:0.5419948101043701,left_val:0.2140070050954819},{features:[[3,7,13,10,-1.],[3,12,13,5,2.]],threshold:0.0192625392228365,right_val:0.2726590037345886,left_val:0.5526772141456604},{features:[[11,15,2,2,-1.],[11,16,2,1,2.]],threshold:1.8888259364757687e-004,right_val:0.6017209887504578,left_val:0.3958011865615845},{features:[[2,11,16,4,-1.],[2,11,8,2,2.],[10,13,8,2,2.]],threshold:0.0293695498257875,right_val:0.1435758024454117,left_val:0.5241373777389526},{features:[[13,7,6,4,-1.],[16,7,3,2,2.],[13,9,3,2,2.]],threshold:1.0417619487270713e-003,right_val:0.5929983258247376,left_val:0.3385409116744995},{features:[[6,10,3,9,-1.],[6,13,3,3,3.]],threshold:2.6125640142709017e-003,right_val:0.3021597862243652,left_val:0.5485377907752991},{features:[[14,6,1,6,-1.],[14,9,1,3,2.]],threshold:9.6977467183023691e-004,right_val:0.5532032847404480,left_val:0.3375276029109955},{features:[[5,10,4,1,-1.],[7,10,2,1,2.]],threshold:5.9512659208849072e-004,right_val:0.3359399139881134,left_val:0.5631743073463440},{features:[[3,8,15,5,-1.],[8,8,5,5,3.]],threshold:-0.1015655994415283,right_val:0.5230425000190735,left_val:0.0637350380420685},{features:[[1,6,5,4,-1.],[1,8,5,2,2.]],threshold:0.0361566990613937,right_val:0.1029528975486755,left_val:0.5136963129043579},{features:[[3,1,17,6,-1.],[3,3,17,2,3.]],threshold:3.4624140243977308e-003,right_val:0.5558289289474487,left_val:0.3879320025444031},{features:[[6,7,8,2,-1.],[10,7,4,2,2.]],threshold:0.0195549800992012,right_val:0.1875859946012497,left_val:0.5250086784362793},{features:[[9,7,3,2,-1.],[10,7,1,2,3.]],threshold:-2.3121440317481756e-003,right_val:0.4679641127586365,left_val:0.6672028899192810},{features:[[8,7,3,2,-1.],[9,7,1,2,3.]],threshold:-1.8605289515107870e-003,right_val:0.4334670901298523,left_val:0.7163379192352295},{features:[[8,9,4,2,-1.],[8,10,4,1,2.]],threshold:-9.4026362057775259e-004,right_val:0.5650203227996826,left_val:0.3021360933780670},{features:[[8,8,4,3,-1.],[8,9,4,1,3.]],threshold:-5.2418331615626812e-003,right_val:0.5250256061553955,left_val:0.1820009052753449},{features:[[9,5,6,4,-1.],[9,5,3,4,2.]],threshold:1.1729019752237946e-004,right_val:0.5445973277091980,left_val:0.3389188051223755},{features:[[8,13,4,3,-1.],[8,14,4,1,3.]],threshold:1.1878840159624815e-003,right_val:0.6253563165664673,left_val:0.4085349142551422},{features:[[4,7,12,6,-1.],[10,7,6,3,2.],[4,10,6,3,2.]],threshold:-0.0108813596889377,right_val:0.5700082778930664,left_val:0.3378399014472961},{features:[[8,14,4,3,-1.],[8,15,4,1,3.]],threshold:1.7354859737679362e-003,right_val:0.6523038744926453,left_val:0.4204635918140411},{features:[[9,7,3,3,-1.],[9,8,3,1,3.]],threshold:-6.5119052305817604e-003,right_val:0.5428143739700317,left_val:0.2595216035842896},{features:[[7,4,3,8,-1.],[8,4,1,8,3.]],threshold:-1.2136430013924837e-003,right_val:0.3977893888950348,left_val:0.6165143847465515},{features:[[10,0,3,6,-1.],[11,0,1,6,3.]],threshold:-0.0103542404249310,right_val:0.5219504833221436,left_val:0.1628028005361557},{features:[[6,3,4,8,-1.],[8,3,2,8,2.]],threshold:5.5858830455690622e-004,right_val:0.5503574013710022,left_val:0.3199650943279266},{features:[[14,3,6,13,-1.],[14,3,3,13,2.]],threshold:0.0152996499091387,right_val:0.6122388243675232,left_val:0.4103994071483612},{features:[[8,13,3,6,-1.],[8,16,3,3,2.]],threshold:-0.0215882100164890,right_val:0.5197384953498840,left_val:0.1034912988543510},{features:[[14,3,6,13,-1.],[14,3,3,13,2.]],threshold:-0.1283462941646576,right_val:0.4893102943897247,left_val:0.8493865132331848},{features:[[0,7,10,4,-1.],[0,7,5,2,2.],[5,9,5,2,2.]],threshold:-2.2927189711481333e-003,right_val:0.5471575260162354,left_val:0.3130157887935638},{features:[[14,3,6,13,-1.],[14,3,3,13,2.]],threshold:0.0799151062965393,right_val:0.6073989272117615,left_val:0.4856320917606354},{features:[[0,3,6,13,-1.],[3,3,3,13,2.]],threshold:-0.0794410929083824,right_val:0.4624533057212830,left_val:0.8394674062728882},{features:[[9,1,4,1,-1.],[9,1,2,1,2.]],threshold:-5.2800010889768600e-003,right_val:0.5306698083877564,left_val:0.1881695985794067},{features:[[8,0,2,1,-1.],[9,0,1,1,2.]],threshold:1.0463109938427806e-003,right_val:0.2583065927028656,left_val:0.5271229147911072},{features:[[10,16,4,4,-1.],[12,16,2,2,2.],[10,18,2,2,2.]],threshold:2.6317298761568964e-004,right_val:0.5735440850257874,left_val:0.4235304892063141},{features:[[9,6,2,3,-1.],[10,6,1,3,2.]],threshold:-3.6173160187900066e-003,right_val:0.4495444893836975,left_val:0.6934396028518677},{features:[[4,5,12,2,-1.],[8,5,4,2,3.]],threshold:0.0114218797534704,right_val:0.4138193130493164,left_val:0.5900921225547791},{features:[[8,7,3,5,-1.],[9,7,1,5,3.]],threshold:-1.9963278900831938e-003,right_val:0.4327239990234375,left_val:0.6466382741928101}],threshold:24.5278797149658200},{simpleClassifiers:[{features:[[6,4,8,6,-1.],[6,6,8,2,3.]],threshold:-9.9691245704889297e-003,right_val:0.2482212036848068,left_val:0.6142324209213257},{features:[[9,5,2,12,-1.],[9,11,2,6,2.]],threshold:7.3073059320449829e-004,right_val:0.2321965992450714,left_val:0.5704951882362366},{features:[[4,6,6,8,-1.],[4,10,6,4,2.]],threshold:6.4045301405712962e-004,right_val:0.5814933180809021,left_val:0.2112251967191696},{features:[[12,2,8,5,-1.],[12,2,4,5,2.]],threshold:4.5424019917845726e-003,right_val:0.5866311788558960,left_val:0.2950482070446014},{features:[[0,8,18,3,-1.],[0,9,18,1,3.]],threshold:9.2477443104144186e-005,right_val:0.5791326761245728,left_val:0.2990990877151489},{features:[[8,12,4,8,-1.],[8,16,4,4,2.]],threshold:-8.6603146046400070e-003,right_val:0.5635542273521423,left_val:0.2813029885292053},{features:[[0,2,8,5,-1.],[4,2,4,5,2.]],threshold:8.0515816807746887e-003,right_val:0.6054757237434387,left_val:0.3535369038581848},{features:[[13,11,3,4,-1.],[13,13,3,2,2.]],threshold:4.3835240649059415e-004,right_val:0.2731510996818543,left_val:0.5596532225608826},{features:[[5,11,6,1,-1.],[7,11,2,1,3.]],threshold:-9.8168973636347800e-005,right_val:0.3638561069965363,left_val:0.5978031754493713},{features:[[11,3,3,1,-1.],[12,3,1,1,3.]],threshold:-1.1298790341243148e-003,right_val:0.5432729125022888,left_val:0.2755252122879028},{features:[[7,13,5,3,-1.],[7,14,5,1,3.]],threshold:6.4356150105595589e-003,right_val:0.7069833278656006,left_val:0.4305641949176788},{features:[[11,11,7,6,-1.],[11,14,7,3,2.]],threshold:-0.0568293295800686,right_val:0.5294997096061707,left_val:0.2495242953300476},{features:[[2,11,7,6,-1.],[2,14,7,3,2.]],threshold:4.0668169967830181e-003,right_val:0.2497723996639252,left_val:0.5478553175926209},{features:[[12,14,2,6,-1.],[12,16,2,2,3.]],threshold:4.8164798499783501e-005,right_val:0.5706356167793274,left_val:0.3938601016998291},{features:[[8,14,3,3,-1.],[8,15,3,1,3.]],threshold:6.1795017682015896e-003,right_val:0.7394766807556152,left_val:0.4407606124877930},{features:[[11,0,3,5,-1.],[12,0,1,5,3.]],threshold:6.4985752105712891e-003,right_val:0.2479152977466583,left_val:0.5445243120193481},{features:[[6,1,4,9,-1.],[8,1,2,9,2.]],threshold:-1.0211090557277203e-003,right_val:0.5338971018791199,left_val:0.2544766962528229},{features:[[10,3,6,1,-1.],[12,3,2,1,3.]],threshold:-5.4247528314590454e-003,right_val:0.5324069261550903,left_val:0.2718858122825623},{features:[[8,8,3,4,-1.],[8,10,3,2,2.]],threshold:-1.0559899965301156e-003,right_val:0.5534508824348450,left_val:0.3178288042545319},{features:[[8,12,4,2,-1.],[8,13,4,1,2.]],threshold:6.6465808777138591e-004,right_val:0.6558194160461426,left_val:0.4284219145774841},{features:[[5,18,4,2,-1.],[5,19,4,1,2.]],threshold:-2.7524109464138746e-004,right_val:0.3810262978076935,left_val:0.5902860760688782},{features:[[2,1,18,6,-1.],[2,3,18,2,3.]],threshold:4.2293202131986618e-003,right_val:0.5709385871887207,left_val:0.3816489875316620},{features:[[6,0,3,2,-1.],[7,0,1,2,3.]],threshold:-3.2868210691958666e-003,right_val:0.5259544253349304,left_val:0.1747743934392929},{features:[[13,8,6,2,-1.],[16,8,3,1,2.],[13,9,3,1,2.]]