diff --git a/modules/objdetect/CMakeLists.txt b/modules/objdetect/CMakeLists.txt index 78aa4aa234..5739ee9e38 100644 --- a/modules/objdetect/CMakeLists.txt +++ b/modules/objdetect/CMakeLists.txt @@ -1,2 +1,2 @@ set(the_description "Object Detection") -ocv_define_module(objdetect opencv_core opencv_imgproc OPTIONAL opencv_highgui) +ocv_define_module(objdetect opencv_core opencv_imgproc opencv_ml OPTIONAL opencv_highgui) diff --git a/modules/objdetect/include/opencv2/objdetect.hpp b/modules/objdetect/include/opencv2/objdetect.hpp index 3ccb057e33..39cf4654d0 100644 --- a/modules/objdetect/include/opencv2/objdetect.hpp +++ b/modules/objdetect/include/opencv2/objdetect.hpp @@ -394,5 +394,6 @@ CV_EXPORTS_W void drawDataMatrixCodes(InputOutputArray image, } #include "opencv2/objdetect/linemod.hpp" +#include "opencv2/objdetect/erfilter.hpp" #endif diff --git a/modules/objdetect/include/opencv2/objdetect/erfilter.hpp b/modules/objdetect/include/opencv2/objdetect/erfilter.hpp new file mode 100644 index 0000000000..c03d49f94e --- /dev/null +++ b/modules/objdetect/include/opencv2/objdetect/erfilter.hpp @@ -0,0 +1,202 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// 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) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009, Willow Garage Inc., all rights reserved. +// 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. +// +//M*/ + +#ifndef __OPENCV_OBJDETECT_ERFILTER_HPP__ +#define __OPENCV_OBJDETECT_ERFILTER_HPP__ + +#include "opencv2/core.hpp" +#include +#include + +namespace cv +{ + +/*! + Extremal Region Stat structure + + The ERStat structure represents a class-specific Extremal Region (ER). + + An ER is a 4-connected set of pixels with all its grey-level values smaller than the values + in its outer boundary. A class-specific ER is selected (using a classifier) from all the ER's + in the component tree of the image. +*/ +struct CV_EXPORTS ERStat +{ +public: + //! Constructor + ERStat(int level = 256, int pixel = 0, int x = 0, int y = 0); + //! Destructor + ~ERStat(){}; + + //! seed point and the threshold (max grey-level value) + int pixel; + int level; + + //! incrementally computable features + int area; + int perimeter; + int euler; //!< euler number + int bbox[4]; + double raw_moments[2]; //!< order 1 raw moments to derive the centroid + double central_moments[3]; //!< order 2 central moments to construct the covariance matrix + std::deque *crossings;//!< horizontal crossings + + //! 1st stage features + float aspect_ratio; + float compactness; + float num_holes; + float med_crossings; + + //! 2nd stage features + float hole_area_ratio; + float convex_hull_ratio; + float num_inflexion_points; + + // TODO Other features can be added (average color, standard deviation, and such) + + + // TODO shall we include the pixel list whenever available (i.e. after 2nd stage) ? + std::vector *pixels; + + //! probability that the ER belongs to the class we are looking for + double probability; + + //! pointers preserving the tree structure of the component tree + ERStat* parent; + ERStat* child; + ERStat* next; + ERStat* prev; + + //! wenever the regions is a local maxima of the probability + bool local_maxima; + ERStat* max_probability_ancestor; + ERStat* min_probability_ancestor; +}; + +/*! + Base class for 1st and 2nd stages of Neumann and Matas scene text detection algorithms + Neumann L., Matas J.: Real-Time Scene Text Localization and Recognition, CVPR 2012 + + Extracts the component tree (if needed) and filter the extremal regions (ER's) by using a given classifier. +*/ +class CV_EXPORTS ERFilter : public cv::Algorithm +{ +public: + + //! callback with the classifier is made a class. By doing it we hide SVM, Boost etc. + class CV_EXPORTS Callback + { + public: + virtual ~Callback(){}; + //! The classifier must return probability measure for the region. + virtual double eval(const ERStat& stat) = 0; //const = 0; //TODO why cannot use const = 0 here? + }; + + /*! + the key method. Takes image on input and returns the selected regions in a vector of ERStat + only distinctive ERs which correspond to characters are selected by a sequential classifier + \param image is the input image + \param regions is output for the first stage, input/output for the second one. + */ + virtual void run( cv::InputArray image, std::vector& regions ) = 0; + + + //! set/get methods to set the algorithm properties, + virtual void setCallback(const cv::Ptr& cb) = 0; + virtual void setThresholdDelta(int thresholdDelta) = 0; + virtual void setMinArea(float minArea) = 0; + virtual void setMaxArea(float maxArea) = 0; + virtual void setMinProbability(float minProbability) = 0; + virtual void setMinProbabilityDiff(float minProbabilityDiff) = 0; + virtual void setNonMaxSuppression(bool nonMaxSuppression) = 0; + virtual int getNumRejected() = 0; +}; + + +/*! + Create an Extremal Region Filter for the 1st stage classifier of N&M algorithm + Neumann L., Matas J.: Real-Time Scene Text Localization and Recognition, CVPR 2012 + + The component tree of the image is extracted by a threshold increased step by step + from 0 to 255, incrementally computable descriptors (aspect_ratio, compactness, + number of holes, and number of horizontal crossings) are computed for each ER + and used as features for a classifier which estimates the class-conditional + probability P(er|character). The value of P(er|character) is tracked using the inclusion + relation of ER across all thresholds and only the ERs which correspond to local maximum + of the probability P(er|character) are selected (if the local maximum of the + probability is above a global limit pmin and the difference between local maximum and + local minimum is greater than minProbabilityDiff). + + \param cb Callback with the classifier. + if omitted tries to load a default classifier from file trained_classifierNM1.xml + \param thresholdDelta Threshold step in subsequent thresholds when extracting the component tree + \param minArea The minimum area (% of image size) allowed for retreived ER's + \param minArea The maximum area (% of image size) allowed for retreived ER's + \param minProbability The minimum probability P(er|character) allowed for retreived ER's + \param nonMaxSuppression Whenever non-maximum suppression is done over the branch probabilities + \param minProbability The minimum probability difference between local maxima and local minima ERs +*/ +CV_EXPORTS cv::Ptr createERFilterNM1(const cv::Ptr& cb = NULL, + int thresholdDelta = 1, float minArea = 0.000025, + float maxArea = 0.13, float minProbability = 0.2, + bool nonMaxSuppression = true, + float minProbabilityDiff = 0.1); + +/*! + Create an Extremal Region Filter for the 2nd stage classifier of N&M algorithm + Neumann L., Matas J.: Real-Time Scene Text Localization and Recognition, CVPR 2012 + + In the second stage, the ERs that passed the first stage are classified into character + and non-character classes using more informative but also more computationally expensive + features. The classifier uses all the features calculated in the first stage and the following + additional features: hole area ratio, convex hull ratio, and number of outer inflexion points. + + \param cb Callback with the classifier + if omitted tries to load a default classifier from file trained_classifierNM2.xml + \param minProbability The minimum probability P(er|character) allowed for retreived ER's +*/ +CV_EXPORTS cv::Ptr createERFilterNM2(const cv::Ptr& cb = NULL, + float minProbability = 0.85); + +} +#endif // _OPENCV_ERFILTER_HPP_ diff --git a/modules/objdetect/src/erfilter.cpp b/modules/objdetect/src/erfilter.cpp new file mode 100644 index 0000000000..002aa5247a --- /dev/null +++ b/modules/objdetect/src/erfilter.cpp @@ -0,0 +1,1124 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// 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) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009, Willow Garage Inc., 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. +// +//M*/ + +#include "precomp.hpp" +#include + +using namespace std; + +namespace cv +{ + +ERStat::ERStat(int init_level, int init_pixel, int init_x, int init_y) : pixel(init_pixel), + level(init_level), area(0), perimeter(0), euler(0), probability(1.0), + parent(0), child(0), next(0), prev(0), local_maxima(0), + max_probability_ancestor(0), min_probability_ancestor(0) +{ + bbox[0] = init_x; + bbox[1] = init_y; + bbox[2] = init_x; + bbox[3] = init_y; + raw_moments[0] = 0.0; + raw_moments[1] = 0.0; + central_moments[0] = 0.0; + central_moments[1] = 0.0; + central_moments[2] = 0.0; + crossings = new std::deque(); + crossings->push_back(0); +} + + +// derivative classes + + +// the classe implementing the interface for the 1st and 2nd stages of Neumann and Matas algorithm +class CV_EXPORTS ERFilterNM : public ERFilter +{ +public: + //Constructor + ERFilterNM(); + //Destructor + ~ERFilterNM() {}; + + float minProbability; + bool nonMaxSuppression; + float minProbabilityDiff; + + // the key method. Takes image on input, vector of ERStat is output for the first stage, + // input/output - for the second one. + void run( cv::InputArray image, std::vector& regions ); + +protected: + int thresholdDelta; + float maxArea; + float minArea; + + cv::Ptr classifier; + + // count of the rejected/accepted regions + int num_rejected_regions; + int num_accepted_regions; + +public: + + // set/get methods to set the algorithm properties, + void setCallback(const cv::Ptr& cb); + void setThresholdDelta(int thresholdDelta); + void setMinArea(float minArea); + void setMaxArea(float maxArea); + void setMinProbability(float minProbability); + void setMinProbabilityDiff(float minProbabilityDiff); + void setNonMaxSuppression(bool nonMaxSuppression); + int getNumRejected(); + +private: + // pointer to the input/output regions vector + std::vector *regions; + // image mask used for feature calculations + cv::Mat region_mask; + + // extract the component tree and store all the ER regions + void er_tree_extract( cv::InputArray image ); + // accumulate a pixel into an ER + void er_add_pixel( ERStat *parent, int x, int y, int non_boundary_neighbours, + int non_boundary_neighbours_horiz, + int d_C1, int d_C2, int d_C3 ); + // merge an ER with its nested parent + void er_merge( ERStat *parent, ERStat *child ); + // recursively walk the tree and clean memory + void er_tree_clean( ERStat *er ); + // copy extracted regions into the output vector + ERStat* er_save( ERStat *er, ERStat *parent, ERStat *prev ); + // recursively walk the tree and filter (remove) regions using the callback classifier + ERStat* er_tree_filter( cv::InputArray image, ERStat *stat, ERStat *parent, ERStat *prev ); + // recursively walk the tree selecting only regions with local maxima probability + ERStat* er_tree_nonmax_suppression( ERStat *er, ERStat *parent, ERStat *prev ); +}; + + +// default 1st stage classifier +class CV_EXPORTS ERClassifierNM1 : public ERFilter::Callback +{ +public: + //Constructor + ERClassifierNM1(); + // Destructor + ~ERClassifierNM1() {}; + + // The classifier must return probability measure for the region. + double eval(const ERStat& stat); + +private: + CvBoost boost; +}; + +// default 2nd stage classifier +class CV_EXPORTS ERClassifierNM2 : public ERFilter::Callback +{ +public: + //constructor + ERClassifierNM2(); + // Destructor + ~ERClassifierNM2() {}; + + // The classifier must return probability measure for the region. + double eval(const ERStat& stat); + +private: + CvBoost boost; +}; + + + + + +// default constructor +ERFilterNM::ERFilterNM() +{ + thresholdDelta = 1; + minArea = 0.; + maxArea = 1.; + minProbability = 0.; + nonMaxSuppression = false; + minProbabilityDiff = 1.; + num_accepted_regions = 0; + num_rejected_regions = 0; + classifier = NULL; +} + +// the key method. Takes image on input, vector of ERStat is output for the first stage, +// input/output for the second one. +void ERFilterNM::run( cv::InputArray image, std::vector& _regions ) +{ + + // assert correct image type + CV_Assert( image.getMat().type() == CV_8UC1 ); + + regions = &_regions; + region_mask = Mat::zeros(image.getMat().rows+2, image.getMat().cols+2, CV_8UC1); + + // if regions vector is empty we must extract the entire component tree + if ( regions->size() == 0 ) + { + er_tree_extract( image ); + if (nonMaxSuppression) + { + vector aux_regions; + regions->swap(aux_regions); + regions->reserve(aux_regions.size()); + er_tree_nonmax_suppression( &aux_regions.front(), NULL, NULL ); + aux_regions.clear(); + } + } + else // if regions vector is already filled we'll just filter the current regions + { + // the tree root must have no parent + CV_Assert( regions->front().parent == NULL ); + + vector aux_regions; + regions->swap(aux_regions); + regions->reserve(aux_regions.size()); + er_tree_filter( image, &aux_regions.front(), NULL, NULL ); + aux_regions.clear(); + } +} + +// extract the component tree and store all the ER regions +// uses the algorithm described in +// Linear time maximally stable extremal regions, D Nistér, H Stewénius – ECCV 2008 +void ERFilterNM::er_tree_extract( cv::InputArray image ) +{ + + Mat src = image.getMat(); + // assert correct image type + CV_Assert( src.type() == CV_8UC1 ); + + if (thresholdDelta > 1) + { + Mat tmp; + src.copyTo(tmp); + src.release(); + src = (image.getMat() / thresholdDelta) -1; + } + + const unsigned char * image_data = src.data; + int width = src.cols, height = src.rows; + + // the component stack + vector er_stack; + + //the quads for euler number calculation + unsigned char quads[3][4]; + quads[0][0] = 1 << 3; + quads[0][1] = 1 << 2; + quads[0][2] = 1 << 1; + quads[0][3] = 1; + quads[1][0] = (1<<2)|(1<<1)|(1); + quads[1][1] = (1<<3)|(1<<1)|(1); + quads[1][2] = (1<<3)|(1<<2)|(1); + quads[1][3] = (1<<3)|(1<<2)|(1<<1); + quads[2][0] = (1<<2)|(1<<1); + quads[2][1] = (1<<3)|(1); + quads[2][3] = 255; + quads[2][4] = 255; + + + // masks to know if a pixel is accessible and if it has been already added to some region + vector accessible_pixel_mask(width * height); + vector accumulated_pixel_mask(width * height); + + // heap of boundary pixels + vector boundary_pixes[(255/thresholdDelta)+1]; + vector boundary_edges[(255/thresholdDelta)+1]; + + // add a dummy-component before start + er_stack.push_back(new ERStat); + + // we'll look initially for all pixels with grey-level lower than a grey-level higher than any allowed in the image + int threshold_level = (255/thresholdDelta)+1; + + // starting from the first pixel (0,0) + int current_pixel = 0; + int current_edge = 0; + int current_level = image_data[0]; + accessible_pixel_mask[0] = true; + + bool push_new_component = true; + + for (;;) { + + int x = current_pixel % width; + int y = current_pixel / width; + + // push a component with current level in the component stack + if (push_new_component) + er_stack.push_back(new ERStat(current_level, current_pixel, x, y)); + push_new_component = false; + + // explore the (remaining) edges to the neighbors to the current pixel + for (current_edge = current_edge; current_edge < 4; current_edge++) + { + + int neighbour_pixel = current_pixel; + + switch (current_edge) + { + case 0: if (x < width - 1) neighbour_pixel = current_pixel + 1; break; + case 1: if (y < height - 1) neighbour_pixel = current_pixel + width; break; + case 2: if (x > 0) neighbour_pixel = current_pixel - 1; break; + default: if (y > 0) neighbour_pixel = current_pixel - width; break; + } + + // if neighbour is not accessible, mark it accessible and retreive its grey-level value + if ( !accessible_pixel_mask[neighbour_pixel] && (neighbour_pixel != current_pixel) ) + { + + int neighbour_level = image_data[neighbour_pixel]; + accessible_pixel_mask[neighbour_pixel] = true; + + // if neighbour level is not lower than current level add neighbour to the boundary heap + if (neighbour_level >= current_level) + { + + boundary_pixes[neighbour_level].push_back(neighbour_pixel); + boundary_edges[neighbour_level].push_back(0); + + // if neighbour level is lower than our threshold_level set threshold_level to neighbour level + if (neighbour_level < threshold_level) + threshold_level = neighbour_level; + + } + else // if neighbour level is lower than current add current_pixel (and next edge) + // to the boundary heap for later processing + { + + boundary_pixes[current_level].push_back(current_pixel); + boundary_edges[current_level].push_back(current_edge + 1); + + // if neighbour level is lower than threshold_level set threshold_level to neighbour level + if (current_level < threshold_level) + threshold_level = current_level; + + // consider the new pixel and its grey-level as current pixel + current_pixel = neighbour_pixel; + current_edge = 0; + current_level = neighbour_level; + + // and push a new component + push_new_component = true; + break; + } + } + + } // else neigbor was already accessible + + if (push_new_component) continue; + + + // once here we can add the current pixel to the component at the top of the stack + // but first we find how many of its neighbours are part of the region boundary (needed for + // perimeter and crossings calc.) and the increment in quads counts for euler number calc. + int non_boundary_neighbours = 0; + int non_boundary_neighbours_horiz = 0; + + unsigned char quad_before[4] = {0,0,0,0}; + unsigned char quad_after[4] = {0,0,0,0}; + quad_after[0] = 1<<1; + quad_after[1] = 1<<3; + quad_after[2] = 1<<2; + quad_after[3] = 1; + + for (int edge = 0; edge < 8; edge++) + { + int neighbour4 = -1; + int neighbour8 = -1; + int cell = 0; + switch (edge) + { + case 0: if (x < width - 1) { neighbour4 = neighbour8 = current_pixel + 1;} cell = 5; break; + case 1: if ((x < width - 1)&&(y < height - 1)) { neighbour8 = current_pixel + 1 + width;} cell = 8; break; + case 2: if (y < height - 1) { neighbour4 = neighbour8 = current_pixel + width;} cell = 7; break; + case 3: if ((x > 0)&&(y < height - 1)) { neighbour8 = current_pixel - 1 + width;} cell = 6; break; + case 4: if (x > 0) { neighbour4 = neighbour8 = current_pixel - 1;} cell = 3; break; + case 5: if ((x > 0)&&(y > 0)) { neighbour8 = current_pixel - 1 - width;} cell = 0; break; + case 6: if (y > 0) { neighbour4 = neighbour8 = current_pixel - width;} cell = 1; break; + default: if ((x < width - 1)&&(y > 0)) { neighbour8 = current_pixel + 1 - width;} cell = 2; break; + } + if ((neighbour4 != -1)&&(accumulated_pixel_mask[neighbour4])&&(image_data[neighbour4]<=image_data[current_pixel])) + { + non_boundary_neighbours++; + if ((edge == 0) || (edge == 4)) + non_boundary_neighbours_horiz++; + } + + int pix_value = image_data[current_pixel] + 1; + if (neighbour8 != -1) + { + if (accumulated_pixel_mask[neighbour8]) + pix_value = image_data[neighbour8]; + } + + if (pix_value<=image_data[current_pixel]) + { + switch(cell) + { + case 0: + quad_before[3] = quad_before[3] | (1<<3); + quad_after[3] = quad_after[3] | (1<<3); + break; + case 1: + quad_before[3] = quad_before[3] | (1<<2); + quad_after[3] = quad_after[3] | (1<<2); + quad_before[0] = quad_before[0] | (1<<3); + quad_after[0] = quad_after[0] | (1<<3); + break; + case 2: + quad_before[0] = quad_before[0] | (1<<2); + quad_after[0] = quad_after[0] | (1<<2); + break; + case 3: + quad_before[3] = quad_before[3] | (1<<1); + quad_after[3] = quad_after[3] | (1<<1); + quad_before[2] = quad_before[2] | (1<<3); + quad_after[2] = quad_after[2] | (1<<3); + break; + case 5: + quad_before[0] = quad_before[0] | (1); + quad_after[0] = quad_after[0] | (1); + quad_before[1] = quad_before[1] | (1<<2); + quad_after[1] = quad_after[1] | (1<<2); + break; + case 6: + quad_before[2] = quad_before[2] | (1<<1); + quad_after[2] = quad_after[2] | (1<<1); + break; + case 7: + quad_before[2] = quad_before[2] | (1); + quad_after[2] = quad_after[2] | (1); + quad_before[1] = quad_before[1] | (1<<1); + quad_after[1] = quad_after[1] | (1<<1); + break; + default: + quad_before[1] = quad_before[1] | (1); + quad_after[1] = quad_after[1] | (1); + break; + } + } + + } + + int C_before[3] = {0, 0, 0}; + int C_after[3] = {0, 0, 0}; + + for (int p=0; p<3; p++) + { + for (int q=0; q<4; q++) + { + if ( (quad_before[0] == quads[p][q]) ) + if ((p<2)||(q<2)) C_before[p]++; + if ( (quad_before[1] == quads[p][q]) ) + if ((p<2)||(q<2)) C_before[p]++; + if ( (quad_before[2] == quads[p][q]) ) + if ((p<2)||(q<2)) C_before[p]++; + if ( (quad_before[3] == quads[p][q]) ) + if ((p<2)||(q<2)) C_before[p]++; + + if ( (quad_after[0] == quads[p][q]) ) + if ((p<2)||(q<2)) C_after[p]++; + if ( (quad_after[1] == quads[p][q]) ) + if ((p<2)||(q<2)) C_after[p]++; + if ( (quad_after[2] == quads[p][q]) ) + if ((p<2)||(q<2)) C_after[p]++; + if ( (quad_after[3] == quads[p][q]) ) + if ((p<2)||(q<2)) C_after[p]++; + } + } + + int d_C1 = C_after[0]-C_before[0]; + int d_C2 = C_after[1]-C_before[1]; + int d_C3 = C_after[2]-C_before[2]; + + er_add_pixel(er_stack.back(), x, y, non_boundary_neighbours, non_boundary_neighbours_horiz, d_C1, d_C2, d_C3); + accumulated_pixel_mask[current_pixel] = true; + + // if we have processed all the possible threshold levels (the hea is empty) we are done! + if (threshold_level == (255/thresholdDelta)+1) + { + + // save the extracted regions into the output vector + regions->reserve(num_accepted_regions+1); + er_save(er_stack.back(), NULL, NULL); + + // clean memory + er_tree_clean(er_stack.back()); + er_stack.clear(); + + return; + } + + + // pop the heap of boundary pixels + current_pixel = boundary_pixes[threshold_level].back(); + boundary_pixes[threshold_level].erase(boundary_pixes[threshold_level].end()-1); + current_edge = boundary_edges[threshold_level].back(); + boundary_edges[threshold_level].erase(boundary_edges[threshold_level].end()-1); + + while (boundary_pixes[threshold_level].empty() && (threshold_level < (255/thresholdDelta)+1)) + threshold_level++; + + + int new_level = image_data[current_pixel]; + + // if the new pixel has higher grey value than the current one + if (new_level != current_level) { + + current_level = new_level; + + // process components on the top of the stack until we reach the higher grey-level + while (er_stack.back()->level < new_level) + { + ERStat* er = er_stack.back(); + er_stack.erase(er_stack.end()-1); + + if (new_level < er_stack.back()->level) + { + er_stack.push_back(new ERStat(new_level, current_pixel, current_pixel%width, current_pixel/width)); + er_merge(er_stack.back(), er); + break; + } + + er_merge(er_stack.back(), er); + } + + } + + } +} + +// accumulate a pixel into an ER +void ERFilterNM::er_add_pixel(ERStat *parent, int x, int y, int non_border_neighbours, + int non_border_neighbours_horiz, + int d_C1, int d_C2, int d_C3) +{ + parent->area++; + parent->perimeter += 4 - 2*non_border_neighbours; + + if (parent->crossings->size()>0) + { + if (ybbox[1]) parent->crossings->push_front(2); + else if (y>parent->bbox[3]) parent->crossings->push_back(2); + else { + parent->crossings->at(y - parent->bbox[1]) += 2-2*non_border_neighbours_horiz; + } + } else { + parent->crossings->push_back(2); + } + + parent->euler += (d_C1 - d_C2 + 2*d_C3) / 4; + + parent->bbox[0] = min(parent->bbox[0],x); + parent->bbox[1] = min(parent->bbox[1],y); + parent->bbox[2] = max(parent->bbox[2],x); + parent->bbox[3] = max(parent->bbox[3],y); + + parent->raw_moments[0] += x; + parent->raw_moments[1] += y; + + parent->central_moments[0] += x * x; + parent->central_moments[1] += x * y; + parent->central_moments[2] += y * y; +} + +// merge an ER with its nested parent +void ERFilterNM::er_merge(ERStat *parent, ERStat *child) +{ + + parent->area += child->area; + + parent->perimeter += child->perimeter; + + for (int i=parent->bbox[1]; i<=min(parent->bbox[3],child->bbox[3]); i++) + if (i-child->bbox[1] >= 0) + parent->crossings->at(i-parent->bbox[1]) += child->crossings->at(i-child->bbox[1]); + + for (int i=parent->bbox[1]-1; i>=child->bbox[1]; i--) + if (i-child->bbox[1] < (int)child->crossings->size()) + parent->crossings->push_front(child->crossings->at(i-child->bbox[1])); + else + parent->crossings->push_front(0); + + for (int i=parent->bbox[3]+1; ibbox[1]; i++) + parent->crossings->push_back(0); + + for (int i=max(parent->bbox[3]+1,child->bbox[1]); i<=child->bbox[3]; i++) + parent->crossings->push_back(child->crossings->at(i-child->bbox[1])); + + parent->euler += child->euler; + + parent->bbox[0] = min(parent->bbox[0],child->bbox[0]); + parent->bbox[1] = min(parent->bbox[1],child->bbox[1]); + parent->bbox[2] = max(parent->bbox[2],child->bbox[2]); + parent->bbox[3] = max(parent->bbox[3],child->bbox[3]); + + parent->raw_moments[0] += child->raw_moments[0]; + parent->raw_moments[1] += child->raw_moments[1]; + + parent->central_moments[0] += child->central_moments[0]; + parent->central_moments[1] += child->central_moments[1]; + parent->central_moments[2] += child->central_moments[2]; + + // child region done, we can calculate 1st stage features from the incrementally computable descriptors + child->aspect_ratio = (float)(child->bbox[2]-child->bbox[0]+1)/(child->bbox[3]-child->bbox[1]+1); + child->compactness = sqrt(child->area)/child->perimeter; + child->num_holes = (float)(1-child->euler); + + vector m_crossings; + m_crossings.push_back(child->crossings->at((int)(child->bbox[3]-child->bbox[1]+1)/6)); + m_crossings.push_back(child->crossings->at((int)3*(child->bbox[3]-child->bbox[1]+1)/6)); + m_crossings.push_back(child->crossings->at((int)5*(child->bbox[3]-child->bbox[1]+1)/6)); + sort(m_crossings.begin(), m_crossings.end()); + child->med_crossings = (float)m_crossings.at(1); + + // free unnecessary mem + child->crossings->clear(); + delete(child->crossings); + child->crossings = NULL; + + // recover the original grey-level + child->level = child->level*thresholdDelta; + + // before saving calculate P(child|character) and filter if possible + if (classifier != NULL) + { + child->probability = classifier->eval(*child); + } + + if ( ((classifier!=NULL)?(child->probability >= minProbability):true) && + ((child->area >= (minArea*region_mask.rows*region_mask.cols)) && + (child->area <= (maxArea*region_mask.rows*region_mask.cols))) ) + { + + num_accepted_regions++; + + child->next = parent->child; + if (parent->child) + parent->child->prev = child; + parent->child = child; + child->parent = parent; + + } else { + + num_rejected_regions++; + + if (child->prev !=NULL) + child->prev->next = child->next; + + ERStat *new_child = child->child; + if (new_child != NULL) + { + while (new_child->next != NULL) + new_child = new_child->next; + new_child->next = parent->child; + if (parent->child) + parent->child->prev = new_child; + parent->child = child->child; + child->child->parent = parent; + } + + // free mem + if(child->crossings) + { + child->crossings->clear(); + delete(child->crossings); + child->crossings = NULL; + } + delete(child); + } + +} + +// recursively walk the tree and clean memory +void ERFilterNM::er_tree_clean( ERStat *stat ) +{ + for (ERStat * child = stat->child; child; child = child->next) + { + er_tree_clean(child); + } + if (stat->crossings) + { + stat->crossings->clear(); + delete(stat->crossings); + stat->crossings = NULL; + } + delete stat; +} + +// copy extracted regions into the output vector +ERStat* ERFilterNM::er_save( ERStat *er, ERStat *parent, ERStat *prev ) +{ + + regions->push_back(*er); + + regions->back().parent = parent; + if (prev != NULL) + prev->next = &(regions->back()); + else if (parent != NULL) + parent->child = &(regions->back()); + + ERStat *old_prev = NULL; + ERStat *this_er = ®ions->back(); + + if (nonMaxSuppression) + { + if (this_er->parent == NULL) + { + this_er->probability = 0; //TODO this makes sense in order to select at least one region in short tree's but is it really necessary? + this_er->max_probability_ancestor = this_er; + this_er->min_probability_ancestor = this_er; + } + else + { + this_er->max_probability_ancestor = (this_er->probability > parent->max_probability_ancestor->probability)? this_er : parent->max_probability_ancestor; + + this_er->min_probability_ancestor = (this_er->probability < parent->min_probability_ancestor->probability)? this_er : parent->min_probability_ancestor; + + if ( (this_er->max_probability_ancestor->probability > minProbability) && (this_er->max_probability_ancestor->probability - this_er->min_probability_ancestor->probability > minProbabilityDiff)) + { + + this_er->max_probability_ancestor->local_maxima = true; + //TODO check here if the last local_maxima can be also suppressed, is the following correct? + //if (this_er->min_probability_ancestor->local_maxima) + // this_er->min_probability_ancestor->local_maxima = false; + + this_er->max_probability_ancestor = this_er; + this_er->min_probability_ancestor = this_er; + } + } + } + + for (ERStat * child = er->child; child; child = child->next) + { + old_prev = er_save(child, this_er, old_prev); + } + + return this_er; +} + +// recursively walk the tree and filter (remove) regions using the callback classifier +ERStat* ERFilterNM::er_tree_filter ( cv::InputArray image, ERStat * stat, ERStat *parent, ERStat *prev ) +{ + Mat src = image.getMat(); + // assert correct image type + CV_Assert( src.type() == CV_8UC1 ); + + //Fill the region and calculate 2nd stage features + Mat region = region_mask(Rect(Point(stat->bbox[0],stat->bbox[1]),Point(stat->bbox[2]+3,stat->bbox[3]+3))); + region = Scalar(0); + int newMaskVal = 255; + int flags = 4 + (newMaskVal << 8) + FLOODFILL_FIXED_RANGE + FLOODFILL_MASK_ONLY; + Rect rect; + + floodFill( src(Rect(Point(stat->bbox[0],stat->bbox[1]),Point(stat->bbox[2]+1,stat->bbox[3]+1))), + region, Point(stat->pixel%src.cols - stat->bbox[0], stat->pixel/src.cols - stat->bbox[1]), + Scalar(255), &rect, Scalar(stat->level), Scalar(0), flags ); + rect.width += 2; + rect.height += 2; + region = region(rect); + + vector > contours; + vector contour_poly; + vector hierarchy; + findContours( region, contours, hierarchy, RETR_TREE, CHAIN_APPROX_NONE, Point(0, 0) ); + //TODO check epsilon parameter of approxPolyDP (set empirically) : we want more precission + // if the region is very small because otherwise we'll loose all the convexities + approxPolyDP( Mat(contours[0]), contour_poly, max(rect.width,rect.height)/25, true ); + + + bool was_convex = false; + int num_inflexion_points = 0; + + for (int p = 0 ; p<(int)contour_poly.size(); p++) + { + int p_prev = p-1; + int p_next = p+1; + if (p_prev == -1) + p_prev = contour_poly.size()-1; + if (p_next == (int)contour_poly.size()) + p_next = 0; + + double angle_next = atan2((contour_poly[p_next].y-contour_poly[p].y),(contour_poly[p_next].x-contour_poly[p].x)); + double angle_prev = atan2((contour_poly[p_prev].y-contour_poly[p].y),(contour_poly[p_prev].x-contour_poly[p].x)); + if ( angle_next < 0 ) + angle_next = 2.*CV_PI + angle_next; + + double angle = (angle_next - angle_prev); + if (angle > 2.*CV_PI) + angle = angle - 2.*CV_PI; + else if (angle < 0) + angle = 2.*CV_PI + std::abs(angle); + + if (p>0) + { + if ( ((angle > CV_PI)&&(!was_convex)) || ((angle < CV_PI)&&(was_convex)) ) + num_inflexion_points++; + } + was_convex = (angle > CV_PI); + + } + + floodFill(region, Point(0,0), Scalar(255), 0); + int holes_area = region.cols*region.rows-countNonZero(region); + + int hull_area = 0; + + { + + vector hull; + cv::convexHull(contours[0], hull, false); + hull_area = contourArea(hull); + } + + + stat->hole_area_ratio = (float)holes_area / stat->area; + stat->convex_hull_ratio = (float)hull_area / contourArea(contours[0]); + stat->num_inflexion_points = (float)num_inflexion_points; + + + // calculate P(child|character) and filter if possible + if ( (classifier != NULL) && (stat->parent != NULL) ) + { + stat->probability = classifier->eval(*stat); + } + + if ( ( ((classifier != NULL)?(stat->probability >= minProbability):true) && + ((stat->area >= minArea*region_mask.rows*region_mask.cols) && + (stat->area <= maxArea*region_mask.rows*region_mask.cols)) ) || + (stat->parent == NULL) ) + { + + num_accepted_regions++; + regions->push_back(*stat); + + regions->back().parent = parent; + regions->back().next = NULL; + regions->back().child = NULL; + + if (prev != NULL) + prev->next = &(regions->back()); + else if (parent != NULL) + parent->child = &(regions->back()); + + ERStat *old_prev = NULL; + ERStat *this_er = ®ions->back(); + + for (ERStat * child = stat->child; child; child = child->next) + { + old_prev = er_tree_filter(image, child, this_er, old_prev); + } + + return this_er; + + } else { + + num_rejected_regions++; + + ERStat *old_prev = prev; + + for (ERStat * child = stat->child; child; child = child->next) + { + old_prev = er_tree_filter(image, child, parent, old_prev); + } + + return old_prev; + } + +} + +// recursively walk the tree selecting only regions with local maxima probability +ERStat* ERFilterNM::er_tree_nonmax_suppression ( ERStat * stat, ERStat *parent, ERStat *prev ) +{ + + if ( ( stat->local_maxima ) || ( stat->parent == NULL ) ) + { + + regions->push_back(*stat); + + regions->back().parent = parent; + regions->back().next = NULL; + regions->back().child = NULL; + + if (prev != NULL) + prev->next = &(regions->back()); + else if (parent != NULL) + parent->child = &(regions->back()); + + ERStat *old_prev = NULL; + ERStat *this_er = ®ions->back(); + + for (ERStat * child = stat->child; child; child = child->next) + { + old_prev = er_tree_nonmax_suppression( child, this_er, old_prev ); + } + + return this_er; + + } else { + + num_rejected_regions++; + num_accepted_regions--; + + ERStat *old_prev = prev; + + for (ERStat * child = stat->child; child; child = child->next) + { + old_prev = er_tree_nonmax_suppression( child, parent, old_prev ); + } + + return old_prev; + } + +} + +void ERFilterNM::setCallback(const Ptr& cb) +{ + classifier = cb; +}; + +void ERFilterNM::setMinArea(float _minArea) +{ + CV_Assert( (_minArea >= 0) && (_minArea < maxArea) ); + minArea = _minArea; + return; +}; + +void ERFilterNM::setMaxArea(float _maxArea) +{ + CV_Assert(_maxArea <= 1); + CV_Assert(minArea < _maxArea); + maxArea = _maxArea; + return; +}; + +void ERFilterNM::setThresholdDelta(int _thresholdDelta) +{ + CV_Assert( (_thresholdDelta > 0) && (_thresholdDelta <= 128) ); + thresholdDelta = _thresholdDelta; + return; +}; + +void ERFilterNM::setMinProbability(float _minProbability) +{ + CV_Assert( (_minProbability >= 0.0) && (_minProbability <= 1.0) ); + minProbability = _minProbability; + return; +}; + +void ERFilterNM::setMinProbabilityDiff(float _minProbabilityDiff) +{ + CV_Assert( (_minProbabilityDiff >= 0.0) && (_minProbabilityDiff <= 1.0) ); + minProbabilityDiff = _minProbabilityDiff; + return; +}; + +void ERFilterNM::setNonMaxSuppression(bool _nonMaxSuppression) +{ + nonMaxSuppression = _nonMaxSuppression; + return; +}; + +int ERFilterNM::getNumRejected() +{ + return num_rejected_regions; +}; + + + + +// load default 1st stage classifier if found +ERClassifierNM1::ERClassifierNM1() +{ + + if (ifstream("./trained_classifierNM1.xml")) + { + // The file with default classifier exists + boost.load("./trained_classifierNM1.xml", "boost"); + } + else if (ifstream("./training/trained_classifierNM1.xml")) + { + // The file with default classifier exists + boost.load("./training/trained_classifierNM1.xml", "boost"); + } + else + { + // File not found + CV_Error(CV_StsBadArg, "Default classifier ./trained_classifierNM1.xml not found!"); + } +}; + +double ERClassifierNM1::eval(const ERStat& stat) +{ + //Classify + float arr[] = {0,stat.aspect_ratio, stat.compactness, stat.num_holes, stat.med_crossings}; + vector sample (arr, arr + sizeof(arr) / sizeof(arr[0]) ); + + float votes = boost.predict( Mat(sample), Mat(), Range::all(), false, true ); + + // Logistic Correction returns a probability value (in the range(0,1)) + return (double)1-(double)1/(1+exp(-2*votes)); +}; + + +// load default 2nd stage classifier if found +ERClassifierNM2::ERClassifierNM2() +{ + + if (ifstream("./trained_classifierNM2.xml")) + { + // The file with default classifier exists + boost.load("./trained_classifierNM2.xml", "boost"); + } + else if (ifstream("./training/trained_classifierNM2.xml")) + { + // The file with default classifier exists + boost.load("./training/trained_classifierNM2.xml", "boost"); + } + else + { + // File not found + CV_Error(CV_StsBadArg, "Default classifier ./trained_classifierNM2.xml not found!"); + } +}; + +double ERClassifierNM2::eval(const ERStat& stat) +{ + //Classify + float arr[] = {0,stat.aspect_ratio, stat.compactness, stat.num_holes, stat.med_crossings, + stat.hole_area_ratio, stat.convex_hull_ratio, stat.num_inflexion_points}; + vector sample (arr, arr + sizeof(arr) / sizeof(arr[0]) ); + + float votes = boost.predict( Mat(sample), Mat(), Range::all(), false, true ); + + // Logistic Correction returns a probability value (in the range(0,1)) + return (double)1-(double)1/(1+exp(-2*votes)); +}; + + +/*! + Create an Extremal Region Filter for the 1st stage classifier of N&M algorithm + Neumann L., Matas J.: Real-Time Scene Text Localization and Recognition, CVPR 2012 + + The component tree of the image is extracted by a threshold increased step by step + from 0 to 255, incrementally computable descriptors (aspect_ratio, compactness, + number of holes, and number of horizontal crossings) are computed for each ER + and used as features for a classifier which estimates the class-conditional + probability P(er|character). The value of P(er|character) is tracked using the inclusion + relation of ER across all thresholds and only the ERs which correspond to local maximum + of the probability P(er|character) are selected (if the local maximum of the + probability is above a global limit pmin and the difference between local maximum and + local minimum is greater than minProbabilityDiff). + + \param cb Callback with the classifier. + if omitted tries to load a default classifier from file trained_classifierNM1.xml + \param thresholdDelta Threshold step in subsequent thresholds when extracting the component tree + \param minArea The minimum area (% of image size) allowed for retreived ER's + \param minArea The maximum area (% of image size) allowed for retreived ER's + \param minProbability The minimum probability P(er|character) allowed for retreived ER's + \param nonMaxSuppression Whenever non-maximum suppression is done over the branch probabilities + \param minProbability The minimum probability difference between local maxima and local minima ERs +*/ +Ptr createERFilterNM1(const cv::Ptr& cb, int thresholdDelta, + float minArea, float maxArea, float minProbability, + bool nonMaxSuppression, float minProbabilityDiff) +{ + + CV_Assert( (minProbability >= 0.) && (minProbability <= 1.) ); + CV_Assert( (minArea < maxArea) && (minArea >=0.) && (maxArea <= 1.) ); + CV_Assert( (thresholdDelta >= 0) && (thresholdDelta <= 128) ); + CV_Assert( (minProbabilityDiff >= 0.) && (minProbabilityDiff <= 1.) ); + + Ptr filter = new ERFilterNM(); + + if (cb == NULL) + filter->setCallback(new ERClassifierNM1()); + else + filter->setCallback(cb); + + filter->setThresholdDelta(thresholdDelta); + filter->setMinArea(minArea); + filter->setMaxArea(maxArea); + filter->setMinProbability(minProbability); + filter->setNonMaxSuppression(nonMaxSuppression); + filter->setMinProbabilityDiff(minProbabilityDiff); + return (Ptr)filter; +} + +/*! + Create an Extremal Region Filter for the 2nd stage classifier of N&M algorithm + Neumann L., Matas J.: Real-Time Scene Text Localization and Recognition, CVPR 2012 + + In the second stage, the ERs that passed the first stage are classified into character + and non-character classes using more informative but also more computationally expensive + features. The classifier uses all the features calculated in the first stage and the following + additional features: hole area ratio, convex hull ratio, and number of outer inflexion points. + + \param cb Callback with the classifier + if omitted tries to load a default classifier from file trained_classifierNM2.xml + \param minProbability The minimum probability P(er|character) allowed for retreived ER's +*/ +Ptr createERFilterNM2(const cv::Ptr& cb, float minProbability) +{ + + CV_Assert( (minProbability >= 0.) && (minProbability <= 1.) ); + + Ptr filter = new ERFilterNM(); + + + if (cb == NULL) + filter->setCallback(new ERClassifierNM2()); + else + filter->setCallback(cb); + + filter->setMinProbability(minProbability); + return (Ptr)filter; +} + +} diff --git a/samples/cpp/erfilter.cpp b/samples/cpp/erfilter.cpp new file mode 100644 index 0000000000..f318371d70 --- /dev/null +++ b/samples/cpp/erfilter.cpp @@ -0,0 +1,120 @@ + +//-------------------------------------------------------------------------------------------------- +// A demo program of the Extremal Region Filter algorithm described in +// Neumann L., Matas J.: Real-Time Scene Text Localization and Recognition, CVPR 2012 +//-------------------------------------------------------------------------------------------------- + +#include "opencv2/opencv.hpp" +#include "opencv2/objdetect.hpp" +#include "opencv2/highgui.hpp" +#include "opencv2/imgproc.hpp" + +#include +#include +#include + +using namespace std; +using namespace cv; + +void er_draw(Mat &src, Mat &dst, ERStat& er); + +void er_draw(Mat &src, Mat &dst, ERStat& er) +{ + + if (er.parent != NULL) // deprecate the root region + { + int newMaskVal = 255; + int flags = 4 + (newMaskVal << 8) + FLOODFILL_FIXED_RANGE + FLOODFILL_MASK_ONLY; + floodFill(src,dst,Point(er.pixel%src.cols,er.pixel/src.cols),Scalar(255),0,Scalar(er.level),Scalar(0),flags); + } + +} + +int main(int argc, const char * argv[]) +{ + + + vector regions; + + if (argc < 2) { + cout << "Demo program of the Extremal Region Filter algorithm described in " << endl; + cout << "Neumann L., Matas J.: Real-Time Scene Text Localization and Recognition, CVPR 2012" << endl << endl; + cout << " Usage: " << argv[0] << " input_image " << endl; + cout << " Default classifier files (trained_classifierNM*.xml) should be in ./" << endl; + return -1; + } + + Mat original = imread(argv[1]); + Mat gt; + if (argc > 2) + { + gt = imread(argv[2]); + cvtColor(gt, gt, COLOR_RGB2GRAY); + threshold(gt, gt, 254, 255, THRESH_BINARY); + } + Mat grey(original.size(),CV_8UC1); + cvtColor(original,grey,COLOR_RGB2GRAY); + + double t = (double)getTickCount(); + + // Build ER tree and filter with the 1st stage default classifier + Ptr er_filter1 = createERFilterNM1(); + + er_filter1->run(grey, regions); + + t = (double)getTickCount() - t; + cout << " --------------------------------------------------------------------------------------------------" << endl; + cout << "\t FIRST STAGE CLASSIFIER done in " << t * 1000. / getTickFrequency() << " ms." << endl; + cout << " --------------------------------------------------------------------------------------------------" << endl; + cout << setw(9) << regions.size()+er_filter1->getNumRejected() << "\t Extremal Regions extracted " << endl; + cout << setw(9) << regions.size() << "\t Extremal Regions selected by the first stage of the sequential classifier." << endl; + cout << "\t \t (saving into out_second_stage.jpg)" << endl; + cout << " --------------------------------------------------------------------------------------------------" << endl; + + er_filter1.release(); + + // draw regions + Mat mask = Mat::zeros(grey.rows+2,grey.cols+2,CV_8UC1); + for (int r=0; r<(int)regions.size(); r++) + er_draw(grey, mask, regions.at(r)); + mask = 255-mask; + imwrite("out_first_stage.jpg", mask); + + if (argc > 2) + { + Mat tmp_mask = (255-gt) & (255-mask(Rect(Point(1,1),Size(mask.cols-2,mask.rows-2)))); + cout << "Recall for the 1st stage filter = " << (float)countNonZero(tmp_mask) / countNonZero(255-gt) << endl; + } + + t = (double)getTickCount(); + + // Default second stage classifier + Ptr er_filter2 = createERFilterNM2(); + er_filter2->run(grey, regions); + + t = (double)getTickCount() - t; + cout << " --------------------------------------------------------------------------------------------------" << endl; + cout << "\t SECOND STAGE CLASSIFIER done in " << t * 1000. / getTickFrequency() << " ms." << endl; + cout << " --------------------------------------------------------------------------------------------------" << endl; + cout << setw(9) << regions.size() << "\t Extremal Regions selected by the second stage of the sequential classifier." << endl; + cout << "\t \t (saving into out_second_stage.jpg)" << endl; + cout << " --------------------------------------------------------------------------------------------------" << endl; + + er_filter2.release(); + + // draw regions + mask = mask*0; + for (int r=0; r<(int)regions.size(); r++) + er_draw(grey, mask, regions.at(r)); + mask = 255-mask; + imwrite("out_second_stage.jpg", mask); + + if (argc > 2) + { + Mat tmp_mask = (255-gt) & (255-mask(Rect(Point(1,1),Size(mask.cols-2,mask.rows-2)))); + cout << "Recall for the 2nd stage filter = " << (float)countNonZero(tmp_mask) / countNonZero(255-gt) << endl; + } + + regions.clear(); + +} diff --git a/samples/cpp/scenetext.jpg b/samples/cpp/scenetext.jpg new file mode 100644 index 0000000000..6a9c6bf5e2 Binary files /dev/null and b/samples/cpp/scenetext.jpg differ diff --git a/samples/cpp/scenetext_GT.png b/samples/cpp/scenetext_GT.png new file mode 100644 index 0000000000..a5c1905572 Binary files /dev/null and b/samples/cpp/scenetext_GT.png differ diff --git a/samples/cpp/trained_classifierNM1.xml b/samples/cpp/trained_classifierNM1.xml new file mode 100644 index 0000000000..afce7951c6 --- /dev/null +++ b/samples/cpp/trained_classifierNM1.xml @@ -0,0 +1,4046 @@ + + + + RealAdaboost + Gini + 100 + 1. + 1 + 5 + 4 + 4 + 0 + + 0 + 10 + 1 + 10 + 0 + + 1 + 2 +
d
+ + 1. 1.
+ + 1 + 4 +
i
+ + 1 2 3 4
+ + 0 0 0 0 + + 1 + 1 +
i
+ + 2
+ + 1 + 2 +
i
+ + 1 2
+ + <_> + -1 + + <_> + 0 + 6696 + -4.2738068875125497e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 6.1327493190765381e-01 + 7.8049004077911377e-02 + <_> + 1 + 1344 + 1.4897232658416162e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5352 + -2.8797404326299503e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 4.1522341120979132e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 6.4094465970993042e-01 + 1.9897949695587158e-01 + <_> + 1 + 5301 + -3.6524083494067622e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 1395 + 1.1149576991343251e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -2.2870594307278749e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.6980127096176147e-01 + 1.5000000000000000e+00 + <_> + 1 + 5523 + -1.7166415896295562e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 1173 + 1.1605005959787533e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -7.1054273576015067e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.4822087287902832e-01 + 8.7975895404815674e-01 + <_> + 1 + 2833 + -4.2480176423068461e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 3863 + 2.4532852260825078e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 2.9753977059953312e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>3 + 5.3140330314636230e-01 + 3. + <_> + 1 + 3996 + 1.7646926498854212e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 2700 + -3.7641896870070152e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.5543122344752435e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.3332197666168213e-01 + 2.2678799927234650e-01 + <_> + 1 + 6524 + 7.6426114713215615e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 172 + -1.3485157356563835e+00 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 1.8873791418627305e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.1992774009704590e-01 + 9.8430499434471130e-02 + <_> + 1 + 2081 + 3.1735773403827577e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 4615 + -1.3050941677698649e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 1.0436096431476363e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.1678413152694702e-01 + 2.1212799847126007e-01 + <_> + 1 + 5467 + -8.5787873301210987e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 1229 + 4.1446003655995284e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 2.6645352591003686e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.1522570848464966e-01 + 4.8514001071453094e-02 + <_> + 1 + 539 + 5.7564577324623896e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 6157 + -3.0460809939285270e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 9.6331636897139381e-05 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>3 + 5.1313066482543945e-01 + 5. + <_> + 1 + 5925 + 4.9494433475081236e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 771 + -5.9287972929575039e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -6.1617377866696567e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.1186925172805786e-01 + 4.5000000000000000e+00 + <_> + 1 + 5993 + -2.9420461509411709e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 703 + 1.1186642275618490e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -9.2703622556201423e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>3 + 5.0727468729019165e-01 + 9. + <_> + 1 + 6456 + 1.6434634269188026e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 240 + -1.4000712292827926e+00 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 7.5495165674510077e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0708127021789551e-01 + 1.1246799677610397e-01 + <_> + 1 + 2822 + 1.5367268082053392e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 3874 + -9.3153347245118326e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 1.5765166949676974e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>3 + 5.0856590270996094e-01 + 3. + <_> + 1 + 3996 + 8.6645581882989806e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 2700 + -2.0087671007861391e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.6653345369377626e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0680923461914062e-01 + 1.1478445529937744e+00 + <_> + 1 + 5204 + -7.6986298456679980e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 1492 + 1.7913581369068632e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 3.9968028886505478e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0697994232177734e-01 + 2.3513150215148926e-01 + <_> + 1 + 6606 + 1.8205194893492923e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 90 + -1.0127354329715519e+00 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.6930901125533924e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0548201799392700e-01 + 6.5295994281768799e-02 + <_> + 1 + 1017 + 6.0829163150572041e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5679 + -2.0197118707513909e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 1.4876988529976877e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0390088558197021e-01 + 7.7498495578765869e-02 + <_> + 1 + 1331 + -2.9288428551454943e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5365 + 2.7401920556891796e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 1.5987211554601999e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0314640998840332e-01 + 8.5879504680633545e-02 + <_> + 1 + 1585 + 1.9731826096849678e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5111 + -3.2315549250537055e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -6.6613381477509432e-16 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0262790918350220e-01 + 5.0000000000000000e-01 + <_> + 1 + 4065 + 4.9691828670874537e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 2631 + -1.0625426423292537e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.3267165144270797e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0338900089263916e-01 + 2.5000000000000000e+00 + <_> + 1 + 5768 + -1.7170808915642276e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 928 + 4.1744759002228976e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.7985612998927861e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>3 + 5.0293552875518799e-01 + 7. + <_> + 1 + 6301 + 1.0888539178029287e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 395 + -6.0305085268185177e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 3.4638958368303685e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0289756059646606e-01 + 5.5853001773357391e-02 + <_> + 1 + 718 + 1.2205678809210552e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5978 + -6.9005117704737801e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -2.4868995751604125e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0243860483169556e-01 + 2.4084049463272095e-01 + <_> + 1 + 6641 + 4.8772808782470770e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 55 + -5.7564577324601141e+00 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.5423216747138017e-05 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0226837396621704e-01 + 2.5287950038909912e-01 + <_> + 1 + 102 + 6.3884081938725468e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 6594 + -8.0577599144550840e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 3.5527136788004883e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0213474035263062e-01 + 7.7158403396606445e-01 + <_> + 1 + 2002 + -1.1284984024243835e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 4694 + 3.8011668822737661e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.6209256159527547e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0280165672302246e-01 + 2.2507858276367188e+00 + <_> + 1 + 6293 + 2.4730504036563516e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 403 + -2.3062669491245841e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 3.8191672047103927e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0253432989120483e-01 + 3.3653845787048340e+00 + <_> + 1 + 6503 + -1.2970930120556381e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 193 + 4.1274031243257897e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -2.8921309791486167e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0166010856628418e-01 + 2.1390999853610992e-01 + <_> + 1 + 5531 + -2.6331896149722072e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 1165 + 1.2679568803286576e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 8.4376949871511187e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0131356716156006e-01 + 1.2306049466133118e-01 + <_> + 1 + 3485 + 5.4575202207966189e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 3211 + -4.8223341249251692e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.3988810110277168e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0198501348495483e-01 + 7.8255996108055115e-02 + <_> + 1 + 1348 + -2.1033914009293908e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5348 + 1.9154114250964308e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.4266365866433467e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0248610973358154e-01 + 7.1467995643615723e-02 + <_> + 1 + 1172 + 3.2968968312473473e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5524 + -1.5625348431658897e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 2.7311486405778106e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>3 + 5.0194221735000610e-01 + 3. + <_> + 1 + 3996 + 4.0295610512256365e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 2700 + -9.6752005977083597e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 2.2204460492503126e-16 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0114709138870239e-01 + 2.3718249797821045e-01 + <_> + 1 + 6622 + -4.1635503904929108e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 74 + 6.1985783533374139e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.5543122344752215e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0172209739685059e-01 + 2.2217050194740295e-01 + <_> + 1 + 6227 + 1.8681120427040978e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 469 + -1.8652401242387370e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.8263168755084160e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0099056959152222e-01 + 4.9510002136230469e-02 + <_> + 1 + 558 + -1.2384335357514746e+00 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 6138 + 2.3445521303984249e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 9.7699626167012829e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0089961290359497e-01 + 2.6500000000000000e+01 + <_> + 1 + 6360 + -1.7992041757429087e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 336 + 5.7564577324623896e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 5.6895823335701191e-06 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0118094682693481e-01 + 2.5500000000000000e+01 + <_> + 1 + 6354 + 2.4166608864464967e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 342 + -2.2888465010954078e+00 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 1.2212453270876572e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0121438503265381e-01 + 5.9582501649856567e-02 + <_> + 1 + 840 + 5.8664647966628169e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5856 + -4.6044963433007156e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -3.5915714846625102e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0101113319396973e-01 + 1.4623999595642090e-01 + <_> + 1 + 4616 + -3.5172502282471305e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 2080 + 5.7583719480068560e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 1.1990408665951547e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0141471624374390e-01 + 1.2247450649738312e-01 + <_> + 1 + 3452 + 5.8002397978578264e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 3244 + -4.8874279877898136e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 1.5987211554601999e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0116842985153198e-01 + 7.7498495578765869e-02 + <_> + 1 + 1331 + -1.7188494142274119e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5365 + 1.3729831506301223e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.4155343563970946e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0121414661407471e-01 + 8.5879504680633545e-02 + <_> + 1 + 1585 + 1.2910598338382803e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5111 + -1.8915572816328115e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -9.8254737679327316e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0097846984863281e-01 + 1.4246150851249695e-01 + <_> + 1 + 4487 + -3.6309005742797516e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 2209 + 5.3973974005312779e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -3.5527136788005136e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0104773044586182e-01 + 2.2507858276367188e+00 + <_> + 1 + 6293 + 1.5347843260515710e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 403 + -1.3739749447098926e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 1.1102230246251442e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0123411417007446e-01 + 1.5166850090026855e+00 + <_> + 1 + 5860 + -2.3701090631262016e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 836 + 1.0454047746295661e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.2823075934420722e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0128591060638428e-01 + 9.4609153270721436e-01 + <_> + 1 + 4087 + 5.1776557405042833e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 2609 + -4.9756941186903984e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -7.3274719625260868e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0179207324981689e-01 + 9.0595495700836182e-01 + <_> + 1 + 3201 + -7.3543589169859577e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 3495 + 4.8861495908556145e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 6.2172489379008380e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0125002861022949e-01 + 9.4482445716857910e-01 + <_> + 1 + 4054 + 5.1511711137020161e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 2642 + -4.8614381935802115e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 1.1324274851176469e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0097835063934326e-01 + 1.9254249334335327e-01 + <_> + 1 + 5273 + 2.4249345169349911e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 1423 + -8.0884629261426991e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 0. + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0128620862960815e-01 + 9.0595495700836182e-01 + <_> + 1 + 3201 + -6.1924911935004358e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 3495 + 4.1617731368296211e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -6.8833827526760179e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0084191560745239e-01 + 1.0500000000000000e+01 + <_> + 1 + 6225 + -2.3118353841113238e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 471 + 9.2521939431936440e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -2.8865798640254153e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0089126825332642e-01 + 1.5000000000000000e+00 + <_> + 1 + 5523 + 1.2785114635458802e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 1173 + -1.4034194909765221e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 1.4876988529976877e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0066828727722168e-01 + 9.4609153270721436e-01 + <_> + 1 + 4087 + 3.7042053076389733e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 2609 + -3.6115236940030694e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 2.4424906541753385e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0070559978485107e-01 + 2.1943551301956177e-01 + <_> + 1 + 5937 + -1.3556222624079359e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 759 + 1.0448586331664383e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 2.2204460492503126e-16 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0076895952224731e-01 + 2.5000000000000000e+00 + <_> + 1 + 5768 + -7.2706716286118954e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 928 + 2.1477157646629505e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 3.9968028886505478e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0089627504348755e-01 + 5.5000000000000000e+00 + <_> + 1 + 6059 + 4.7555763245711435e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 637 + -3.9649216330408060e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -5.1070259132757461e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0070571899414062e-01 + 1.0819125175476074e+00 + <_> + 1 + 4995 + -2.7626368121990579e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 1701 + 5.1146227808315924e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.3877787807814476e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0076258182525635e-01 + 2.3045200109481812e-01 + <_> + 1 + 6570 + 6.0114816457133369e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 126 + -2.5936805626824372e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -3.8857805861880494e-16 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0089013576507568e-01 + 2.2690850496292114e-01 + <_> + 1 + 6527 + -8.4053681892962469e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 169 + 2.1506217431803590e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 5.3290705182007230e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0091993808746338e-01 + 1.9974449276924133e-01 + <_> + 1 + 5306 + 2.3129710639090150e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 1390 + -7.9729164788981108e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -6.8833827526760179e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>3 + 5.0070244073867798e-01 + 15. + <_> + 1 + 6577 + 1.4519902873964278e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 119 + -2.0528590518345577e+00 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 6.6613381477509353e-16 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0066137313842773e-01 + 1.5967300534248352e-01 + <_> + 1 + 4943 + -2.4632987250352092e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 1753 + 5.3762047393361698e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.1601830607333020e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0063061714172363e-01 + 6.5000000000000000e+00 + <_> + 1 + 6108 + -2.7833790336225339e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 588 + 4.8862416747241927e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 7.3274719625259795e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0056153535842896e-01 + 2.5500000000000000e+01 + <_> + 1 + 6354 + 1.2338724584192815e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 342 + -1.5285879647299458e+00 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 1.7985612998927211e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0059783458709717e-01 + 6.9747999310493469e-02 + <_> + 1 + 1130 + 1.9080524927748807e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5566 + -6.3423198578975272e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.1990408665951834e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0096279382705688e-01 + 6.0209497809410095e-02 + <_> + 1 + 861 + -4.0817517109117923e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5835 + 4.9768691931133605e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 2.8865798640253987e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0055110454559326e-01 + 2.2292549908161163e-01 + <_> + 1 + 6305 + 9.6745303354929309e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 391 + -1.1442976817312843e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 4.6629367034256354e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0055730342864990e-01 + 2.0428659915924072e+00 + <_> + 1 + 6209 + 1.2165695293698981e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 487 + -9.1881742448303563e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.0880185641326652e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0080114603042603e-01 + 1.7432234287261963e+00 + <_> + 1 + 6040 + -1.6635134534456867e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 656 + 9.6630407896139747e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 7.7715611723760358e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0061732530593872e-01 + 2.0428659915924072e+00 + <_> + 1 + 6209 + 1.2816939066706903e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 487 + -9.6630407896139317e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -2.2204460492503136e-16 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0048106908798218e-01 + 2.1943551301956177e-01 + <_> + 1 + 5937 + -1.1171481463132401e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 759 + 8.6341268832712953e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -9.7699626167014722e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0053101778030396e-01 + 1.7432234287261963e+00 + <_> + 1 + 6040 + -1.3543848469927067e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 656 + 7.8582931296741751e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -5.1070259132757461e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0048828125000000e-01 + 9.1913700103759766e-01 + <_> + 1 + 3647 + 3.4887448910966123e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 3049 + -2.8012044396154241e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 5.5511151231257519e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0055414438247681e-01 + 9.0595495700836182e-01 + <_> + 1 + 3201 + -4.0494401261701257e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 3495 + 2.7391089531531652e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -4.2188474935756130e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0054299831390381e-01 + 1.9254249334335327e-01 + <_> + 1 + 5273 + 1.8114158117713660e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 1423 + -6.0031734810025980e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 8.8817841970012444e-16 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0045472383499146e-01 + 2.1390999853610992e-01 + <_> + 1 + 5531 + -1.3573468584292573e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 1165 + 6.7110013394457699e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 5.7731597280507809e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0056809186935425e-01 + 2.2181048989295959e-01 + <_> + 1 + 6195 + 1.0958949879470268e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 501 + -1.0405905416434932e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -8.8817841970013312e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0050455331802368e-01 + 2.3346549272537231e-01 + <_> + 1 + 6598 + -3.7162552864078665e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 98 + 2.7851529107598672e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 5.7731597280507809e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0067859888076782e-01 + 2.2977349162101746e-01 + <_> + 1 + 6564 + 5.9841883908755391e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 132 + -2.3081415106275815e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -6.7168492989822420e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0083827972412109e-01 + 2.2690850496292114e-01 + <_> + 1 + 6527 + -8.0783228170665522e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 169 + 2.1059902875292844e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 3.3306690738754586e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0056660175323486e-01 + 2.2977349162101746e-01 + <_> + 1 + 6564 + 5.4599483267954918e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 132 + -2.1059902875292799e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -5.5511151231257827e-17 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0044262409210205e-01 + 5.9594953060150146e-01 + <_> + 1 + 947 + 7.4434424661432769e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5749 + -1.1915844396920790e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 8.2156503822260906e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0045764446258545e-01 + 2.1943551301956177e-01 + <_> + 1 + 5937 + -1.0789854032467761e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 759 + 8.5034851941486828e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.7763568394002536e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0045067071914673e-01 + 1.0878099501132965e-01 + <_> + 1 + 2616 + 4.3888692055889571e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 4080 + -2.0552208863441928e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -2.2204460492503136e-16 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0064951181411743e-01 + 7.8714996576309204e-02 + <_> + 1 + 1358 + -1.2807332940239827e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5338 + 1.0198923757349111e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -4.4964032497319045e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0096720457077026e-01 + 7.1467995643615723e-02 + <_> + 1 + 1172 + 2.2610922663354846e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5524 + -8.7007112104894625e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 6.4392935428258661e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0050342082977295e-01 + 7.7498495578765869e-02 + <_> + 1 + 1331 + -1.1596157752301800e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5365 + 8.7217073487711374e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -3.9968028886505793e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0044137239456177e-01 + 9.2569001019001007e-02 + <_> + 1 + 1806 + 6.5049069533991741e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 4890 + -1.3590045945499412e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -6.6613381477509834e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>3 + 5.0045472383499146e-01 + 3. + <_> + 1 + 3996 + 1.9372403332724102e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 2700 + -4.6983655893048516e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.9984014443252857e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0038576126098633e-01 + 1.6262821197509766e+01 + <_> + 1 + 6672 + -7.7151022484104465e-04 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 24 + 5.7564577324623896e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 2.4397360458841918e-06 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0039798021316528e-01 + 4.2022142410278320e+00 + <_> + 1 + 6568 + 3.5478094143947562e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 128 + -2.2840957942555040e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -1.3877787807814476e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0070858001708984e-01 + 3.6316020488739014e+00 + <_> + 1 + 6533 + -6.0271504793015986e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 163 + 2.3962237729233701e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 5.5511151231257519e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0043815374374390e-01 + 4.2022142410278320e+00 + <_> + 1 + 6568 + 3.7270150937976335e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 128 + -2.3962237729233693e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -4.3853809472693873e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0041538476943970e-01 + 5.0116462707519531e+00 + <_> + 1 + 6605 + -3.0578445307874662e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 91 + 2.7868955243849686e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -6.2727600891321739e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0037473440170288e-01 + 1.4896666526794434e+01 + <_> + 1 + 6670 + 7.5413849870097256e-04 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 26 + -2.8921490337872560e+00 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -5.5511151231257827e-17 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0054270029067993e-01 + 1.2005734443664551e+01 + <_> + 1 + 6665 + -1.1638027534938869e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 31 + 1.6786149859003261e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 4.6629367034256354e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0044608116149902e-01 + 4.2022142410278320e+00 + <_> + 1 + 6568 + 3.4675087855743224e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 128 + -2.6321539599441751e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + 4.2188474935755767e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0035691261291504e-01 + 1.0500000000000000e+01 + <_> + 1 + 6225 + -1.0399202570737451e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 471 + 8.4121798274828596e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 6696 + -3.7747582837255464e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0044542551040649e-01 + 5.5000000000000000e+00 + <_> + 1 + 6059 + 3.0397076453332855e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 637 + -3.0190805541684723e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0.
+
diff --git a/samples/cpp/trained_classifierNM2.xml b/samples/cpp/trained_classifierNM2.xml new file mode 100644 index 0000000000..4dc259f635 --- /dev/null +++ b/samples/cpp/trained_classifierNM2.xml @@ -0,0 +1,4046 @@ + + + + RealAdaboost + Gini + 100 + 1. + 1 + 8 + 7 + 7 + 0 + + 0 + 10 + 1 + 10 + 0 + + 1 + 2 +
d
+ + 1. 1.
+ + 1 + 7 +
i
+ + 1 2 3 4 5 6 7
+ + 0 0 0 0 0 0 0 + + 1 + 1 +
i
+ + 2
+ + 1 + 2 +
i
+ + 1 2
+ + <_> + -1 + + <_> + 0 + 85052 + -2.0851517666418171e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 8.0945491790771484e-01 + 1.4282399415969849e-01 + <_> + 1 + 51211 + -1.1655815615009795e+00 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 33841 + 9.2576486302104599e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -4.0434322556864549e-13 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.5560266971588135e-01 + 1.1992645263671875e+00 + <_> + 1 + 53830 + -2.7774940068788956e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 31222 + 4.3636095679254611e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -5.5244697705378314e-13 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>6 + 5.6166672706604004e-01 + 8.5000000000000000e+00 + <_> + 1 + 77849 + -1.9387850902953174e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 7203 + 7.6512998048339842e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 1.1137757383027165e-12 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.3432768583297729e-01 + 1.0000740289688110e+00 + <_> + 1 + 9695 + 1.0093966120501190e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 75357 + -8.9927193923099238e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -5.6671334292023235e-13 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.2853655815124512e-01 + 1.9998995065689087e+00 + <_> + 1 + 68496 + -1.3284462220844204e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 16556 + 4.6253459906468258e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 1.5987211554599700e-13 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.3614515066146851e-01 + 1.1410850286483765e-01 + <_> + 1 + 37005 + -4.3322351556582656e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 48047 + 1.7906662718891103e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -2.5979218776229338e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.2565670013427734e-01 + 1.1428444385528564e+00 + <_> + 1 + 28123 + -2.9299227512780235e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 56929 + 1.8210542749456476e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -6.6169292267663710e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.1728218793869019e-01 + 2.5000000000000000e+00 + <_> + 1 + 84594 + -3.5132932294418412e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 458 + 2.4171615055929991e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -4.4853010194858337e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.2121073007583618e-01 + 1.7495599389076233e-01 + <_> + 1 + 59074 + -1.6093402696177866e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 25978 + 2.7241130230718985e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 1.3811174426335039e-13 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.1690614223480225e-01 + 1.4999510049819946e+00 + <_> + 1 + 48787 + -1.5569102806697110e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 36265 + 2.2252947017737912e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -8.1934459217343267e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.1266878843307495e-01 + 1.2102149426937103e-01 + <_> + 1 + 42059 + -2.2672787671659753e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 42993 + 1.1415487554925473e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -9.1093799170502387e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>4 + 5.1520520448684692e-01 + 1.5279999934136868e-03 + <_> + 1 + 68702 + -7.3421607355411075e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 16350 + 4.4155451359037357e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 1.8229862064341748e-13 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.1154321432113647e-01 + 2.4999566078186035e+00 + <_> + 1 + 79214 + -4.8683110415928377e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 5838 + 5.1598158925116355e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -9.2592600253746626e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.1093620061874390e-01 + 1.0245949774980545e-01 + <_> + 1 + 26510 + -3.0550267219933458e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 58542 + 7.3942734827146334e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -8.9761531540951959e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>6 + 5.0920587778091431e-01 + 5.0000000000000000e-01 + <_> + 1 + 11135 + -3.1755783174672919e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 73917 + 5.9987198000351898e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 1.1635137298070287e-13 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.1026338338851929e-01 + 9.6662950515747070e-01 + <_> + 1 + 2959 + 1.8170860205295931e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 82093 + -2.1643576105994013e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -5.8619775700211698e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.1050859689712524e-01 + 4.2910051345825195e-01 + <_> + 1 + 1142 + 6.1481242791051749e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 83910 + -3.8405933276937039e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -3.9968028886507232e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.1034581661224365e-01 + 3.1224999427795410e+00 + <_> + 1 + 83931 + -3.4360295599506332e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 1121 + 6.9695853321977042e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -2.2110091535414882e-13 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0685334205627441e-01 + 1.6315400600433350e-01 + <_> + 1 + 56302 + -1.0536507458437382e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 28750 + 1.3131876124230615e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 4.2632564145604194e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.1097369194030762e-01 + 1.3333054780960083e+00 + <_> + 1 + 39585 + -1.3980281702427369e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 45467 + 1.5934471638769365e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -1.5365486660814527e-13 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0712108612060547e-01 + 5.4749999195337296e-02 + <_> + 1 + 268 + 2.0102810951501930e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 84784 + -1.4763722474947673e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 5.3068660577079668e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0855076313018799e-01 + 1.8632251024246216e-01 + <_> + 1 + 62257 + -9.8863683143064443e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 22795 + 1.7531854005917147e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -2.1010970741035503e-13 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>6 + 5.0839239358901978e-01 + 2.1500000000000000e+01 + <_> + 1 + 84180 + 3.3709711253908758e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 872 + -5.4678827729280677e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 5.1070259132756941e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>6 + 5.1185333728790283e-01 + 4.5000000000000000e+00 + <_> + 1 + 54850 + -1.3957538523591986e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 30202 + 1.7264526939599670e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -1.0724754417880162e-13 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>4 + 5.0670981407165527e-01 + 1.5279999934136868e-03 + <_> + 1 + 68702 + -4.6140615158621334e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 16350 + 2.9971095384690405e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 5.9729998724829850e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>3 + 5.0741368532180786e-01 + 3. + <_> + 1 + 64284 + 5.3257435738342171e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 20768 + -2.8624303413816726e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 5.3290705182004674e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0632566213607788e-01 + 2.3696850240230560e-01 + <_> + 1 + 84618 + 1.5950331395399531e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 434 + -1.0801049499585134e+00 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -9.1870955287740148e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0532805919647217e-01 + 3.7046184539794922e+00 + <_> + 1 + 84455 + -1.2273968085806013e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 597 + 1.3258536030843857e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -2.8421709430404815e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0496006011962891e-01 + 1.1423504352569580e+00 + <_> + 1 + 49633 + -8.4710336395360977e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 35419 + 1.1792957927648873e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -3.5305092183081228e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0832629203796387e-01 + 1.0025000572204590e+00 + <_> + 1 + 38800 + 1.3411668655420397e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 46252 + -1.2556436569616300e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 1.0880185641326416e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0588506460189819e-01 + 9.9288249015808105e-01 + <_> + 1 + 29974 + -1.5381446520138317e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 55078 + 7.7277560960516981e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -5.0848214527834757e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>4 + 5.0448471307754517e-01 + 9.2855751514434814e-01 + <_> + 1 + 84350 + -1.0398941556026050e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 702 + 1.3032575620501816e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 1.1457501614130303e-13 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>4 + 5.0515556335449219e-01 + 1.5001350641250610e-01 + <_> + 1 + 73655 + 2.2778889851791131e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 11397 + -4.8814155956114441e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -4.8017145815040324e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0434845685958862e-01 + 1.0927449911832809e-01 + <_> + 1 + 38 + 2.9257485805403145e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 85014 + -8.7472424605780971e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 9.9920072216263095e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0396436452865601e-01 + 1.1111010313034058e+00 + <_> + 1 + 24025 + -1.1425222651510533e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 61027 + 6.9811502406169512e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 3.1752378504278467e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0685292482376099e-01 + 1.6534850001335144e-01 + <_> + 1 + 56789 + -1.0639676270038445e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 28263 + 1.3003218037837008e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 1.1768364061026520e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>4 + 5.0667446851730347e-01 + 2.5204999838024378e-03 + <_> + 1 + 68803 + -4.4902369408092585e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 16249 + 3.0676249251706372e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 1.0436096431476363e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0544035434722900e-01 + 1.6999830007553101e+00 + <_> + 1 + 58001 + -6.3192712659493902e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 27051 + 1.7415191131728372e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -7.1553873937096463e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0740957260131836e-01 + 9.0433999896049500e-02 + <_> + 1 + 14655 + -3.5563455686562018e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 70397 + 4.3438834127815081e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 5.3290705182004674e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0522023439407349e-01 + 7.6169013977050781e+00 + <_> + 1 + 84964 + -1.0982105673326964e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 88 + 1.8392352279970514e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 5.9952043329758090e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0350898504257202e-01 + 1.5000000000000000e+00 + <_> + 1 + 83116 + -1.3544875378839269e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 1936 + 5.7382380004662314e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 1.1324274851176469e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0382590293884277e-01 + 1.9760949909687042e-01 + <_> + 1 + 66636 + -5.8693205183840469e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 18416 + 1.3126738509498842e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -3.9412917374193215e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0635123252868652e-01 + 1.1999764442443848e+00 + <_> + 1 + 32171 + -1.2031088209549005e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 52881 + 1.0648972918122487e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -3.8247183198338107e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0506365299224854e-01 + 1.5712898969650269e-01 + <_> + 1 + 54755 + -1.0068970021652925e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 30297 + 1.0126393532049692e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 4.0412118096354064e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>6 + 5.0421619415283203e-01 + 1.5500000000000000e+01 + <_> + 1 + 83015 + 3.4846015981025179e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 2037 + -2.4699253563606235e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -5.0681681074140965e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0354343652725220e-01 + 1.7777650356292725e+00 + <_> + 1 + 61156 + -4.6966726001940580e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 23896 + 1.5216614445371685e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -4.2188474935756130e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>4 + 5.0353568792343140e-01 + 6.1677896976470947e-01 + <_> + 1 + 82886 + -1.0550569860998281e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 2166 + 8.1121927736733479e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -1.4155343563970946e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0356847047805786e-01 + 7.9045504331588745e-02 + <_> + 1 + 6487 + -3.5699349596991936e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 78565 + 2.0836955059488720e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 5.9729998724829850e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0237894058227539e-01 + 1.0025000572204590e+00 + <_> + 1 + 38800 + 7.2461344985504356e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 46252 + -6.5870382159515656e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 1.1990408665951547e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0478190183639526e-01 + 1.1423504352569580e+00 + <_> + 1 + 49633 + -8.5161166573258451e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 35419 + 1.1305297421197989e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 1.4876988529976877e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0333338975906372e-01 + 1.0025000572204590e+00 + <_> + 1 + 38800 + 8.5161166573246114e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 46252 + -7.8635547273571457e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 2.5979218776227988e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0263774394989014e-01 + 1.1107280254364014e+00 + <_> + 1 + 47606 + -6.6027160206561755e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 37446 + 8.0186860022252365e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -3.7692071686025484e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0207757949829102e-01 + 2.3332970142364502e+00 + <_> + 1 + 77151 + -2.0113928185465708e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 7901 + 2.0962879229306902e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 4.7295500849029435e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0277924537658691e-01 + 1.8632251024246216e-01 + <_> + 1 + 62257 + -5.6181028479834562e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 22795 + 9.9369395636073957e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 5.3068660577079668e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0377154350280762e-01 + 1.0908994674682617e+00 + <_> + 1 + 21657 + -1.2235976924685764e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 63395 + 6.2033199693086141e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -4.2243986086988992e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>4 + 5.0277858972549438e-01 + 1.6349999932572246e-03 + <_> + 1 + 68726 + -2.9097883587926674e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 16326 + 1.9341358661672844e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 6.9055872131679966e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0421267747879028e-01 + 1.2819899618625641e-01 + <_> + 1 + 46067 + -1.2594108243625032e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 38985 + 6.7353720972212330e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -1.9317880628478096e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0289511680603027e-01 + 1.4286199212074280e-01 + <_> + 1 + 51280 + 8.6671779352972975e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 33772 + -6.7074073857332259e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -2.3592239273285132e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0369596481323242e-01 + 1.7319199442863464e-01 + <_> + 1 + 58763 + -7.3006421478824995e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 26289 + 1.0177967483556853e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -1.3100631690577019e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0306421518325806e-01 + 1.2499785423278809e+00 + <_> + 1 + 35374 + -7.9979696078564338e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 49678 + 7.6940071933976520e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -7.9936057773011918e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0323289632797241e-01 + 1.0000740289688110e+00 + <_> + 1 + 9695 + 2.5098996930572409e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 75357 + -2.6306141460250100e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -3.9412917374193215e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0252068042755127e-01 + 2.2588250041007996e-01 + <_> + 1 + 82565 + 1.5733416991173494e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 2487 + -3.3215282405704583e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -1.1990408665951834e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0204354524612427e-01 + 2.1103200316429138e-01 + <_> + 1 + 160 + 6.4126003896868689e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 84892 + -7.2243147271573143e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 4.0190073491429051e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0215661525726318e-01 + 1.9760949909687042e-01 + <_> + 1 + 66636 + -4.2589838763189808e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 18416 + 1.0168498794066831e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -6.2172489379009153e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>6 + 5.0249111652374268e-01 + 5.0000000000000000e-01 + <_> + 1 + 11135 + -1.6441321811536030e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 73917 + 3.0585312630211685e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -6.6058269965197248e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>4 + 5.0215303897857666e-01 + 1.0776715278625488e+00 + <_> + 1 + 84672 + -5.6388275069845758e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 380 + 1.0049291635506168e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -8.2156503822262262e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0214546918869019e-01 + 4.5000000000000000e+00 + <_> + 1 + 84762 + -4.7074724126887832e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 290 + 1.5364953776259493e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 4.3964831775154268e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0186127424240112e-01 + 8.0047404766082764e-01 + <_> + 1 + 13817 + 1.1296368310029067e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 71235 + -3.3105517731571561e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -4.0911718457438691e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0217723846435547e-01 + 9.9569547176361084e-01 + <_> + 1 + 30092 + -9.1953614829004077e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 54960 + 4.7523977482353826e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -1.4266365866433467e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0252795219421387e-01 + 1.0025000572204590e+00 + <_> + 1 + 38800 + 7.3948472735219248e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 46252 + -6.8603406682960111e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -1.6209256159527547e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0187754631042480e-01 + 1.6649659872055054e+00 + <_> + 1 + 76105 + -2.7163854236781887e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 8947 + 1.3916396934022576e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 3.9968028886504039e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0173968076705933e-01 + 9.3725448846817017e-01 + <_> + 1 + 2236 + 5.7564577324623896e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 82816 + -3.4794146453991938e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 1.1002831319136790e-05 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0150018930435181e-01 + 4.4167485237121582e+00 + <_> + 1 + 84808 + -3.0631182442574004e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 244 + 2.2056778285539491e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 6.9944050551379965e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0130033493041992e-01 + 2.4999150633811951e-01 + <_> + 1 + 84939 + -3.4716427389281618e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 113 + 9.7093231837124805e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -5.8841820305136755e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>6 + 5.0120884180068970e-01 + 4.5000000000000000e+00 + <_> + 1 + 54850 + -4.3917603750727487e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 30202 + 5.5141521118265716e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 5.7953641885429814e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0135135650634766e-01 + 7.7053502202033997e-02 + <_> + 1 + 5412 + -2.5104707620991440e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 79640 + 1.0991190965793670e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -2.6201263381154382e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>4 + 5.0119042396545410e-01 + 2.4375000502914190e-03 + <_> + 1 + 68799 + -1.8447462139746709e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 16253 + 1.2979697405626092e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -2.7311486405779596e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0275564193725586e-01 + 5.0000000000000000e-01 + <_> + 1 + 68789 + 2.5887555264941547e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 16263 + -2.1624936968950229e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 8.2156503822260906e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>4 + 5.0209683179855347e-01 + 2.3050000891089439e-03 + <_> + 1 + 68789 + -2.4185695127928449e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 16263 + 1.7520109539705506e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -1.6375789613221327e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0160211324691772e-01 + 5.0000000000000000e-01 + <_> + 1 + 68789 + 1.9668790239766646e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 16263 + -1.6439227878979559e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 3.3306690738753585e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>4 + 5.0134861469268799e-01 + 1.3124999823048711e-03 + <_> + 1 + 68658 + -1.9484094067575643e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 16394 + 1.3934403248888891e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -7.1054273576010523e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>0 + 5.0120306015014648e-01 + 9.8865385055541992e+00 + <_> + 1 + 84993 + -2.6104574450754830e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 59 + 1.6004161066548563e+00 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -2.7589042161935900e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0108444690704346e-01 + 5.0000000000000000e-01 + <_> + 1 + 68789 + 1.6151863528992876e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 16263 + -1.3510965487524393e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 3.1086244689504288e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0131279230117798e-01 + 1.5000000000000000e+00 + <_> + 1 + 83116 + -8.0778572565855487e-03 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 1936 + 3.3727111742802862e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 1.8873791418627305e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>2 + 5.0103312730789185e-01 + 2.5000000000000000e+00 + <_> + 1 + 84594 + 3.8029937513384339e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 458 + -6.0887851298498918e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -2.3758772726978915e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0099849700927734e-01 + 9.7220098972320557e-01 + <_> + 1 + 3077 + -5.4351424484613675e-01 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 81975 + 4.0289990820170799e-03 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 5.1070259132754594e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0115483999252319e-01 + 1.0344899892807007e+00 + <_> + 1 + 13889 + 1.0892680124765002e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 71163 + -2.1291274675960266e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -1.3322676295501896e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0145024061203003e-01 + 1.1111010313034058e+00 + <_> + 1 + 24025 + -6.8346686898487788e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 61027 + 4.2528805195165366e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -2.8421709430404815e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0177717208862305e-01 + 1.6315400600433350e-01 + <_> + 1 + 56302 + -5.6245799309189812e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 28750 + 6.3343675591851709e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -1.2434497875801908e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0208932161331177e-01 + 1.4286199212074280e-01 + <_> + 1 + 51280 + 7.5358139474863167e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 33772 + -5.5612512614143753e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 9.1038288019262000e-15 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0196045637130737e-01 + 1.2856450676918030e-01 + <_> + 1 + 46248 + -8.7022283814818316e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 38804 + 4.5200684874115597e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -1.6042722705833771e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0139349699020386e-01 + 1.4261949062347412e-01 + <_> + 1 + 51186 + 6.1859795823686392e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 33866 + -4.5142273813481217e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 1.9761969838327395e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0168019533157349e-01 + 1.5712898969650269e-01 + <_> + 1 + 54755 + -5.8367092253270893e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 30297 + 5.7703294804839218e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 2.6201263381153006e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0144690275192261e-01 + 1.3999834060668945e+00 + <_> + 1 + 43654 + -4.5656675409124443e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 41398 + 6.3510157848739535e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -4.1244785364826269e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>4 + 5.0109869241714478e-01 + 1.3124999823048711e-03 + <_> + 1 + 68658 + -1.7085179862837221e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 16394 + 1.2934327532462270e-01 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -2.7311486405779596e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0149405002593994e-01 + 1.8632251024246216e-01 + <_> + 1 + 62257 + -4.2766528221073324e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 22795 + 7.0027469712770588e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + 2.9531932455028293e-14 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>5 + 5.0122207403182983e-01 + 1.1999764442443848e+00 + <_> + 1 + 32171 + -5.3124706145868887e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 52881 + 4.6083691543733984e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -4.4908521346089602e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0111490488052368e-01 + 1.3103100657463074e-01 + <_> + 1 + 47305 + -6.3576995089739186e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 37747 + 3.5133390876482422e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -3.1752378504280487e-14 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0101691484451294e-01 + 1.4286199212074280e-01 + <_> + 1 + 51280 + 5.2824618715263574e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 33772 + -3.8555442653898958e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + -1 + + <_> + 0 + 85052 + -5.2735593669695212e-15 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + + <_>1 + 5.0127285718917847e-01 + 1.5590050816535950e-01 + <_> + 1 + 54453 + -5.1638816859316518e-02 + 0 + 0 + 0 + 0. + 0. + 0. + 0. + <_> + 1 + 30599 + 4.9382797139634914e-02 + 1 + 0 + 0 + 0. + 0. + 0. + 0.
+