From afac1cd575ced792ce9ad710717d176fd308b0b0 Mon Sep 17 00:00:00 2001 From: Phil Date: Mon, 23 Nov 2015 16:04:57 +0100 Subject: [PATCH] Added a Face_Tracking node. This node now includes Optical flow to track faces after they have been detected. Both Face_Tracking and Face_Detection now publish the coordinates of the faces. The example node Face_Listener shows how to read the data the other nodes. --- CMakeLists.txt | 13 +- README.md | 39 +- cfg/face_det.cfg | 89 + cfg/face_track.cfg | 111 + .../lbpCascades/lbpcascade_frontalcatface.xml | 3336 +++++++++++++++++ .../lbpCascades/lbpcascade_frontalface.xml | 1505 ++++++++ .../lbpCascades/lbpcascade_profileface.xml | 1275 +++++++ launch/face_tracking.launch | 13 + src/face_detection.cpp | 95 +- src/face_listener.cpp | 154 + src/face_tracking.cpp | 836 +++++ 11 files changed, 7445 insertions(+), 21 deletions(-) create mode 100755 cfg/face_det.cfg create mode 100755 cfg/face_track.cfg create mode 100644 include/face_detection/lbpCascades/lbpcascade_frontalcatface.xml create mode 100644 include/face_detection/lbpCascades/lbpcascade_frontalface.xml create mode 100755 include/face_detection/lbpCascades/lbpcascade_profileface.xml create mode 100644 launch/face_tracking.launch create mode 100644 src/face_listener.cpp create mode 100644 src/face_tracking.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index f930f66..2e39d82 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,7 +76,8 @@ set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -o0") # sensor_msgs# std_msgs # ) generate_dynamic_reconfigure_options( - cfg/face_detection.cfg + cfg/face_det.cfg + cfg/face_track.cfg ) ################################### @@ -116,13 +117,15 @@ include_directories( ## Declare a cpp executable # add_executable(face_detection_node src/face_detection_node.cpp) add_executable(face_detection src/face_detection.cpp) - +add_executable(face_tracking src/face_tracking.cpp) +add_executable(face_listener src/face_listener.cpp) ## Add cmake target dependencies of the executable/library ## as an example, message headers may need to be generated before nodes # add_dependencies(face_detection_node face_detection_generate_messages_cpp) add_dependencies(face_detection ${PROJECT_NAME}_gencfg) +add_dependencies(face_tracking ${PROJECT_NAME}_gencfg) @@ -133,6 +136,12 @@ add_dependencies(face_detection ${PROJECT_NAME}_gencfg) target_link_libraries(face_detection ${catkin_LIBRARIES} ) +target_link_libraries(face_tracking + ${catkin_LIBRARIES} +) +target_link_libraries(face_listener + ${catkin_LIBRARIES} +) ############# diff --git a/README.md b/README.md index b4de045..cbd79bf 100644 --- a/README.md +++ b/README.md @@ -22,14 +22,19 @@ in a timely manner. **Why use this package:** -This ROS node is designed to detect faces in images coming from a ROS image -topic. Currently this node displays or publishes an image with the resulting -detections drawn on top of the image. The settings of the detection system -can be easily adapted using ROS rqt_reconfigure. +These ROS nodes are designed to detect and track faces in images coming from a +ROS image topic. The nodes display or publish an image with the resulting +detections drawn on top of the image. The settings of the detection system can +be easily adapted using ROS rqt_reconfigure (rosrun rqt_reconfigure +rqt_reconfigure). The nodes also publish the coordinates of the faces. **How to Use this package:** To run the package, use the provided RosLaunch file as follows: - roslaunch face_detection face_detection.launch + - roslaunch face_detection face_tracking.launch + +To see the coordinates published by the nodes, launch the listener node: + - rosrun face_detection face_listener The settings of the program can be changed with the ROS rqt_reconfigure setup. - rosrun rqt_reconfigure rqt_reconfigure @@ -39,9 +44,31 @@ Once you have the rqt_reconfigure open, change the input image default different settings are annotated in the dynamic reconfigure setup (hover over the setting in the rqt_reconfigure for additional information) +**Requirements:** +This node was designed for ROS Indigo and requires a catkin workspace. The node +also makes use of OpenCV. The node has been tested under OpenCV 2.4.8 and 3.0.0. +To be able to get your images into the node, you will need to ROS Vision_OpenCV +package (http://wiki.ros.org/vision_opencv). You will also need a driver which +can read the images from your camera and which can publish these images inside +ROS, like for example ueye_cam (http://wiki.ros.org/ueye_cam) or usb_cam +(http://wiki.ros.org/usb_cam). + +**Multi-threading:** +In order to get the best performance out of the detection, you should compile +your OpenCV package with Multi-threading support. OpenCV makes use of TBB +(WITH_TBB=ON)to to enable Multi-threading, for both versions 2.4 and 3.0. Here +is a tutorial on how to install OpenCV with Multi-threading for version 3.0 +(http://rodrigoberriel.com/2014/10/installing-opencv-3-0-0-on-ubuntu-14-04/). + +WARNING: Reinstalling OpenCV might break some of you other ROS packages, so you +might want to stick to your current version. This node will also run without +Multi-threading support, but especially the Face_Tracking node will run +considerably slower. + **Future plans:** -This package is currently still under development and will shortly support -the publication of the face coordinate. +This package is currently still under development and will be updated +continuously. Please report any problems or desired features, feedback is +always welcome. diff --git a/cfg/face_det.cfg b/cfg/face_det.cfg new file mode 100755 index 0000000..fba4ad9 --- /dev/null +++ b/cfg/face_det.cfg @@ -0,0 +1,89 @@ +#!/usr/bin/env python +PACKAGE = "face_detection" + +from dynamic_reconfigure.parameter_generator_catkin import * + + +gen = ParameterGenerator() +gen.add("imageInput", str_t, 0, + "Subscribe to this image topic", + "/camera/image_raw") +gen.add("imageOutput", str_t, 0, + "Publish to this image topic", + "/facerec/image_raw") +gen.add("skipFrames", int_t, 0, + "Skip frames that are used for detection", + 1, 1, 20) + + +imgScale_enum = gen.enum([ gen.const("No_Resize", double_t, 1, ""), + gen.const("Resize_by_0_875", double_t, 0.875, ""), + gen.const("Resize_by_0_75", double_t, 0.75, ""), + gen.const("Resize_by_0_625", double_t, 0.625, ""), + gen.const("Resize_by_0_5", double_t, 0.5, ""), + gen.const("Resize_by_0_375", double_t, 0.375, ""), + gen.const("Resize_by_0_25", double_t, 0.25, ""), + gen.const("Resize_by_0_125", double_t, 0.125, "")], + "The detection image will be resized by this value. (great performance increase).") +gen.add("imgScale", double_t, 0, "Select a scaling factor for the detection image", 1, edit_method=imgScale_enum) + + +gen.add("neighborsValue", int_t, 0, + "The number of neiboring detections required for a sucessfull detection", + 2, 0, 8) +gen.add("scaleValue", double_t, 0, + "Multiplicator for each step of the detection", + 1.2, 1.01, 1.50) +gen.add("minSize", int_t, 0, + "Minimum size for the search window.", + 13, 1, 100) +gen.add("maxSize", int_t, 0, + "Maximum size for the search window.", + 250, 5, 1024) + +cascade_enum = gen.enum([ gen.const("haarcascade_frontalface_alt", int_t, 0, ""), + gen.const("haarcascade_frontalface_alt2", int_t, 1, ""), + gen.const("haarcascade_frontalface_alt_tree", int_t, 2, ""), + gen.const("haarcascade_frontalface_default", int_t, 3, "")], + "An enum to set size") +gen.add("cascadeValue", int_t, 0, "Select a Cascade", 2, edit_method=cascade_enum) + +myflag_enum = gen.enum([ gen.const("Scale", int_t, 0, "Standart type"), + gen.const("Biggest", int_t, 1, "Only returns the biggest detection"), + gen.const("Canny", int_t, 2, "Reduces Canny pruning to reduce the number of false detections"), + gen.const("Rough", int_t, 3, "Rought Detection Search")], + "An enum to set size") +gen.add("myflag", int_t, 0, "Select a type of detection", 2, edit_method=myflag_enum) + + +debug_enum = gen.enum([ gen.const("No_Debugging", int_t, 0, ""), + gen.const("Displays_Image", int_t, 1, ""), + gen.const("Displays_Detection_Image", int_t, 2, "")], + "An enum to set debugging") +gen.add("debug", int_t, 0, "Select type of debugging", 1, edit_method=debug_enum) + +pixelSwitch_enum = gen.enum([ gen.const("Detection_Boxes", int_t, 0, "Draws Detection Boxes"), + gen.const("Pixelise", int_t, 1, "Pixelises the detected Faces")], + "An enum to set pixelSwitch") +gen.add("pixelSwitch", int_t, 1, "Select a detection display type", 0, edit_method=pixelSwitch_enum) + + + +gen.add("contrastFactor", double_t, 0, + "The contrast factor applied to the image to improve detection", + 1.5, 0.2, 2.5) +gen.add("histOnOff", int_t, 0, + "Activates histogram equalisation", + 0, 0, 1) +gen.add("blurFactor", int_t, 0, + "blurs the image a little, used to reduce noise on full resolution images (imageScaleValue = 1)", + 0, 0, 10) +gen.add("brightnessFactor", int_t, 0, + "brightens up the image", + 0, 0, 5) +gen.add("inputSkipp", int_t, 0, + "start skipping frames from the input after X frames, generally use '1' for realtime feedback, or much higher values for saving image sequences to disk", + 1, 1, 10000) + + +exit(gen.generate(PACKAGE, "face_detection", "face_det")) diff --git a/cfg/face_track.cfg b/cfg/face_track.cfg new file mode 100755 index 0000000..f833f91 --- /dev/null +++ b/cfg/face_track.cfg @@ -0,0 +1,111 @@ +#!/usr/bin/env python +PACKAGE = "face_detection" + +from dynamic_reconfigure.parameter_generator_catkin import * + + +gen = ParameterGenerator() +gen.add("imageInput", str_t, 0, + "Subscribe to this image topic", + "/ardrone/image_raw") +gen.add("imageOutput", str_t, 0, + "Publish to this image topic", + "/facerec/image_raw") +gen.add("skipFrames", int_t, 0, + "Skip frames that are used for detection", + 1, 1, 20) + +imgScale_enum = gen.enum([ gen.const("No_Resize", double_t, 1, ""), + gen.const("Resize_by_0_875", double_t, 0.875, ""), + gen.const("Resize_by_0_75", double_t, 0.75, ""), + gen.const("Resize_by_0_625", double_t, 0.625, ""), + gen.const("Resize_by_0_5", double_t, 0.5, ""), + gen.const("Resize_by_0_375", double_t, 0.375, ""), + gen.const("Resize_by_0_25", double_t, 0.25, ""), + gen.const("Resize_by_0_125", double_t, 0.125, "")], + "The detection image will be resized by this value. (great performance increase).") +gen.add("imgScale", double_t, 0, "Select a scaling factor for the detection image", 0.625, edit_method=imgScale_enum) + + +gen.add("neighborsValue", int_t, 0, + "The number of neiboring detections required for a sucessfull detection", + 2, 0, 8) +gen.add("scaleValue", double_t, 0, + "Multiplicator for each step of the detection", + 1.2, 1.01, 1.50) +gen.add("minSize", int_t, 0, + "Minimum size for the search window.", + 13, 1, 100) +gen.add("maxSize", int_t, 0, + "Maximum size for the search window.", + 250, 5, 1024) + +cascade_enum = gen.enum([ gen.const("haarcascade_frontalface_alt", int_t, 0, ""), + gen.const("haarcascade_frontalface_alt2", int_t, 1, ""), + gen.const("haarcascade_frontalface_alt_tree", int_t, 2, ""), + gen.const("haarcascade_frontalface_default", int_t, 3, "")], + "An enum to set size") +gen.add("cascadeValue", int_t, 0, "Select a Cascade", 2, edit_method=cascade_enum) + +myflag_enum = gen.enum([ gen.const("Scale", int_t, 0, "Standart type"), + gen.const("Biggest", int_t, 1, "Only returns the biggest detection"), + gen.const("Canny", int_t, 2, "Reduces Canny pruning to reduce the number of false detections"), + gen.const("Rough", int_t, 3, "Rought Detection Search")], + "An enum to set size") +gen.add("myflag", int_t, 0, "Select a type of detection", 2, edit_method=myflag_enum) + + +debug_enum = gen.enum([ gen.const("No_Debugging", int_t, 0, ""), + gen.const("Displays_Image", int_t, 1, ""), + gen.const("Displays_Detection_Image", int_t, 2, ""), + gen.const("Displays_Image_noPublishing", int_t, 3, "")], + "An enum to set debugging") +gen.add("debug", int_t, 0, "Select type of debugging", 1, edit_method=debug_enum) + +pixelSwitch_enum = gen.enum([ gen.const("Detection_Boxes", int_t, 0, "Draws Detection Boxes"), + gen.const("Pixelise", int_t, 1, "Pixelises the detected Faces")], + "An enum to set pixelSwitch") +gen.add("pixelSwitch", int_t, 1, "Select a detection display type", 0, edit_method=pixelSwitch_enum) + + +gen.add("contrastFactor", double_t, 0, + "The contrast factor applied to the image to improve detection", + 1.5, 0.2, 2.5) + +histOnOff_enum = gen.enum([ gen.const("Histogram_Equalisation_OFF", int_t, 0, ""), + gen.const("Histogram_Equalisation_ON", int_t, 1, "")], + "An enum to set pixelSwitch") +gen.add("histOnOff", int_t, 1, "Select a detection display type", 0, edit_method=histOnOff_enum) + + + +gen.add("blurFactor", int_t, 0, + "blurs the image a little, used to reduce noise on full resolution images (imageScaleValue = 1)", + 0, 0, 10) +gen.add("brightnessFactor", int_t, 0, + "brightens up the image", + 0, 0, 5) +gen.add("inputSkipp", int_t, 0, + "start skipping frames from the input after X frames, generally use '1' for realtime feedback, or much higher values for saving image sequences to disk", + 1, 1, 10000) + + + +gen.add("maxNumFeatures", int_t, 0, + "Number of features used to track each face", + 15, 1, 100) + +gen.add("maxTrackingNum", int_t, 0, + "Number of times a face is tracked after being detected again", + 60, 1, 200) + +gen.add("initialDetectionNum", int_t, 0, + "Number of times a face is tracked after the first detection", + 4, 1, 10) + +gen.add("trackSearchWinSize", int_t, 0, + "Number of times a face is tracked after the first detection", + 30, 5, 200) + +# needs file name and config name +exit(gen.generate(PACKAGE, "face_tracking", "face_track")) diff --git a/include/face_detection/lbpCascades/lbpcascade_frontalcatface.xml b/include/face_detection/lbpCascades/lbpcascade_frontalcatface.xml new file mode 100644 index 0000000..4d8d829 --- /dev/null +++ b/include/face_detection/lbpCascades/lbpcascade_frontalcatface.xml @@ -0,0 +1,3336 @@ + + + + + BOOST + LBP + 24 + 24 + + GAB + 9.9900001287460327e-01 + 5.0000000000000000e-01 + 9.4999999999999996e-01 + 1 + 100 + + 256 + 1 + 15 + + + <_> + 12 + -1.7687875032424927e+00 + + <_> + + 0 -1 102 391095182 -138018897 -1311235414 -134348801 + -10637363 1363472332 -168428565 -170000676 + + -3.8902848958969116e-01 7.1630239486694336e-01 + <_> + + 0 -1 266 135269620 1065172957 761273949 1068766640 + -285409281 -1075109889 -1073808385 -1073741825 + + -5.0905084609985352e-01 4.4736129045486450e-01 + <_> + + 0 -1 248 -882714626 -11077637 -2105857 -5255203 1594642431 + -536896039 -540028929 266295295 + + -4.0175846219062805e-01 4.7943404316902161e-01 + <_> + + 0 -1 5 -617089137 -547883529 1911919584 -2239534 1530067199 + 1140914475 -1092824836 1892022980 + + -4.2830348014831543e-01 4.3316614627838135e-01 + <_> + + 0 -1 103 251265151 2145342812 1501453661 1046368729 + -1975908196 -1105592134 -1897996802 -88470342 + + -3.9837184548377991e-01 4.3966090679168701e-01 + <_> + + 0 -1 249 653255651 -1427184958 -736368649 -1052429 + 1722766161 -455896464 1155912595 -167811855 + + -3.9872139692306519e-01 3.9076396822929382e-01 + <_> + + 0 -1 98 -147601648 452990736 522407185 1599686417 1169689768 + 407507112 -1762308210 1599803223 + + -4.5285862684249878e-01 3.3382070064544678e-01 + <_> + + 0 -1 300 805836816 1351616140 -1629160611 -1696006160 + 2133143824 -1418430667 -1093085224 -91160647 + + -5.1765918731689453e-01 2.8637027740478516e-01 + <_> + + 0 -1 206 771753813 1072999924 -637907073 1072594908 + 1022435188 -1073874507 -1076936836 -1141628556 + + -4.5144259929656982e-01 3.3236411213874817e-01 + <_> + + 0 -1 188 -1493176369 712675187 -55120016 -1570308126 + 1845183255 -34048033 -1090533504 -386469418 + + -3.6836385726928711e-01 4.1354060173034668e-01 + <_> + + 0 -1 84 1876927247 -103435857 821334050 -202379046 + -607136374 354198146 1878387370 -455740474 + + -3.8681995868682861e-01 3.9221677184104919e-01 + <_> + + 0 -1 85 70388767 580795691 -83467 1051082410 -287417474 + -1076176594 -57439237 -1430597793 + + -4.1789534687995911e-01 3.5533955693244934e-01 + + <_> + 13 + -1.3504111766815186e+00 + + <_> + + 0 -1 52 -582353192 453631753 -1189740547 490856223 + -1064974120 -1927684129 1413925631 151519071 + + -2.2373910248279572e-01 6.7752838134765625e-01 + <_> + + 0 -1 213 -576729857 454575443 -1996943617 536547583 + 206047452 -1088734277 210521343 264241151 + + -3.7819463014602661e-01 5.2549731731414795e-01 + <_> + + 0 -1 275 -249562832 -1181502479 -174589519 -1112427119 + -1189167448 -1081345300 -1534158677 -1431310669 + + -3.6486798524856567e-01 4.7923672199249268e-01 + <_> + + 0 -1 125 -1405482952 -15924365 -1147527681 -10535319 + -1345282310 -1103133 698354938 -1073790989 + + -4.9668836593627930e-01 3.3489266037940979e-01 + <_> + + 0 -1 82 2135911182 -553255561 -1835761112 -744206088 + 1443360719 1427151980 -208273409 -136971281 + + -4.9673599004745483e-01 2.9186215996742249e-01 + <_> + + 0 -1 64 750650461 -1141224741 228524031 1066678329 + -392530945 -1119829 -389633282 -1909948481 + + -4.4474920630455017e-01 3.3087861537933350e-01 + <_> + + 0 -1 80 -8364 961050640 -337450 -170150085 -4518372 + 1480613384 -270925857 -203948193 + + -3.6774283647537231e-01 3.8125535845756531e-01 + <_> + + 0 -1 304 -1279559723 488853328 894958865 523048208 + -1111801861 -1113625095 -1410843652 -1615113099 + + -3.8107365369796753e-01 3.7617510557174683e-01 + <_> + + 0 -1 27 -1038891372 866262272 -1124866827 -7307515 2556056 + -1947784189 145625549 -537934001 + + -3.3774635195732117e-01 4.1467228531837463e-01 + <_> + + 0 -1 214 1313841735 674152170 -1368464720 -1597048870 + 759309825 -295860621 1709856085 -587729545 + + -4.4100293517112732e-01 3.1954705715179443e-01 + <_> + + 0 -1 310 -1432731787 -1219055176 -42533035 -1126253868 + -2038280772 -55715078 -2000923144 -1936931520 + + -4.3541839718818665e-01 3.1401738524436951e-01 + <_> + + 0 -1 180 232552309 -537305729 -3104297 -67617446 -1211085572 + -20391173 -1968567044 -1392871087 + + -3.7881413102149963e-01 3.5767501592636108e-01 + <_> + + 0 -1 46 -36984309 904630143 823414970 -188744006 1900770270 + 1399711367 -473188378 1969748707 + + -4.0620720386505127e-01 3.2759186625480652e-01 + + <_> + 19 + -1.3998974561691284e+00 + + <_> + + 0 -1 128 -236980233 16777207 -520752904 15793139 -168428203 + 1979187191 -33554947 -251920389 + + -1.7629407346248627e-01 6.5313565731048584e-01 + <_> + + 0 -1 230 -871825409 -580752385 -713042433 -540061189 + 1549092351 -587761733 1607687679 1577014783 + + -3.1553706526756287e-01 4.9262753129005432e-01 + <_> + + 0 -1 79 -545306406 -547422721 474111600 -570360321 -507816 + 1599364180 -11379845 -12845089 + + -3.5872745513916016e-01 4.0607807040214539e-01 + <_> + + 0 -1 123 -252337502 -658267397 7348400 821935103 1377280435 + 47000107 -169347101 939467707 + + -5.1070415973663330e-01 2.8583043813705444e-01 + <_> + + 0 -1 45 645859107 708031411 -168346241 -1330581136 81734679 + 783767351 -45193 -34341517 + + -4.4308465719223022e-01 2.9009637236595154e-01 + <_> + + 0 -1 241 -154214396 268437506 -680474855 864167714 684199820 + 204876327 -52122180 -262209 + + -4.1140288114547729e-01 2.9478433728218079e-01 + <_> + + 0 -1 265 -1365070662 -380938 -1139629826 -35735556 49021040 + 1020949984 219416278 -293 + + -3.9993125200271606e-01 2.9704034328460693e-01 + <_> + + 0 -1 295 217001265 -1346379851 1862205053 -1342447907 + 30277700 -1360008036 -1988349004 -287317952 + + -3.9956006407737732e-01 2.8518736362457275e-01 + <_> + + 0 -1 72 290390927 534606847 534719466 -100668033 1607942091 + 1499327373 -101712435 -187324532 + + -3.0478826165199280e-01 3.7477290630340576e-01 + <_> + + 0 -1 136 -285336459 2110655990 -2013274145 2143051605 + -1124443700 -9506961 -604210584 -1161806512 + + -4.0837058424949646e-01 2.7444043755531311e-01 + <_> + + 0 -1 55 -62093618 -581362746 -141373441 -10940834 -840543755 + -638181765 1859448799 996361303 + + -3.7610772252082825e-01 3.0961802601814270e-01 + <_> + + 0 -1 110 -404233212 134685696 -2016460609 -1379932177 + -540018825 -2163729 806790835 607646519 + + -4.3601146340370178e-01 2.5886246562004089e-01 + <_> + + 0 -1 288 -907025790 1474249959 -806494209 -10763 -283444824 + -364917254 -828244229 -1968201565 + + -2.6032009720802307e-01 4.3652611970901489e-01 + <_> + + 0 -1 229 -18370769 -757680277 788372142 -2072580242 + -273678553 745365463 -134222107 -229310606 + + -3.0938607454299927e-01 3.5719990730285645e-01 + <_> + + 0 -1 14 -1603048865 578088863 -390533121 140676846 + -495489499 -42082971 -4194586 -26017865 + + -3.1977957487106323e-01 3.4310647845268250e-01 + <_> + + 0 -1 249 1643111394 -1211240000 1172894578 -641010466 + 1181712375 -2068614428 1433624934 -671119917 + + -3.3919364213943481e-01 3.4504517912864685e-01 + <_> + + 0 -1 164 1606136599 587595301 -21521312 1079307891 62912316 + 2136471350 -285346140 -201854089 + + -3.1577944755554199e-01 3.4307131171226501e-01 + <_> + + 0 -1 152 785525471 1052180799 1060533999 2120755670 + 1316621908 -270833354 -73736274 -361439920 + + -3.4840318560600281e-01 3.2924604415893555e-01 + <_> + + 0 -1 47 1824524292 1056221828 -268623876 -1615033532 + -2092452655 144493033 502744181 -571159100 + + -4.5537719130516052e-01 2.4885603785514832e-01 + + <_> + 17 + -1.6478537321090698e+00 + + <_> + + 0 -1 99 1126020910 939511791 -137494546 -134218002 928378510 + 667815688 -131090 -21878 + + -1.9173553586006165e-01 6.1490827798843384e-01 + <_> + + 0 -1 277 1066647483 -1078215472 -1078199809 -515 -1078280194 + -1079276888 -1112801281 -1077956952 + + -2.5890102982521057e-01 6.0596489906311035e-01 + <_> + + 0 -1 280 -1347239939 -1078263848 -6291491 -1073954860 + -1883246595 -1075838997 -1346850307 -1393015372 + + -3.5419720411300659e-01 3.9201220870018005e-01 + <_> + + 0 -1 148 -16582767 990936848 -15337711 1024534289 522275741 + 530061615 1786740027 2132761183 + + -4.0790781378746033e-01 3.3604335784912109e-01 + <_> + + 0 -1 33 -1024790785 -33673381 -715534345 -5787889 -721957121 + -17850629 -654587205 -27048190 + + -3.0084383487701416e-01 4.4991242885589600e-01 + <_> + + 0 -1 173 779038223 578498431 -26263553 -1430717601 + 1426011767 1870118397 -726064396 -184550929 + + -4.3469619750976562e-01 2.9388919472694397e-01 + <_> + + 0 -1 207 11804501 -1074249744 2143289343 -1359077380 + 2074886065 -262692 -1075003396 -1431820272 + + -4.1263562440872192e-01 2.8357046842575073e-01 + <_> + + 0 -1 263 -620104768 -83232282 -548406795 -1074143767 + -828717122 -21770245 251698105 68943602 + + -3.8648277521133423e-01 3.0467325448989868e-01 + <_> + + 0 -1 161 1391411790 41936415 -228930992 1892677067 + 1987802112 1480885434 -1362 -219942962 + + -3.7596645951271057e-01 3.1412878632545471e-01 + <_> + + 0 -1 308 248452913 1071429554 -251663105 -538972499 + -1928628395 -1346437645 -1745150348 -33596064 + + -3.9380916953086853e-01 2.8952071070671082e-01 + <_> + + 0 -1 182 626985985 930297719 -286325569 -147866829 + -692197027 2138802865 -117701012 -118164992 + + -3.5818240046501160e-01 3.2363671064376831e-01 + <_> + + 0 -1 60 -1361623937 -1149491078 5825754 508056955 -88210408 + -655077264 -1174209542 -33408130 + + -3.4054177999496460e-01 3.2592311501502991e-01 + <_> + + 0 -1 184 1311738415 -1375274001 1726672390 -829228034 + 2070837764 1208920803 -67308591 -419954764 + + -3.7184986472129822e-01 2.8876912593841553e-01 + <_> + + 0 -1 1 -566173704 -81765536 -328487245 -545227007 8650948 + -1342492099 8915104 -307505157 + + -3.2362362742424011e-01 3.4028744697570801e-01 + <_> + + 0 -1 223 787644405 1052643324 -671622145 1060113936 + -1543669260 -621052931 497506684 -1094759403 + + -3.8580575585365295e-01 2.8625565767288208e-01 + <_> + + 0 -1 90 -754941560 -598092101 -1244290303 281751211 + 1463866633 1153550863 -806946917 38740739 + + -4.4092047214508057e-01 2.5595286488533020e-01 + <_> + + 0 -1 167 184294525 -9037826 -21186597 -1497857980 + -1372058532 -1233225231 -341673474 -1099675796 + + -3.7506091594696045e-01 2.9585087299346924e-01 + + <_> + 21 + -1.4008288383483887e+00 + + <_> + + 0 -1 233 -814746846 -2111111254 -553913104 -2097922 + 2004869959 1141046786 1970763104 -134744334 + + -2.1097929775714874e-01 5.7671958208084106e-01 + <_> + + 0 -1 75 -8396836 -538976473 -16384001 -10879489 -8397857 + -10498599 -45416465 1595899679 + + -3.1942996382713318e-01 4.6969848871231079e-01 + <_> + + 0 -1 4 -824512541 -524299 -344077 -72323247 206048519 + -1409589837 -84975873 -805875917 + + -3.0280569195747375e-01 4.2180880904197693e-01 + <_> + + 0 -1 290 -1086615304 956872912 223108216 496889077 + -1097860099 956429808 1601034749 -538976769 + + -3.5371550917625427e-01 3.6481952667236328e-01 + <_> + + 0 -1 146 -85985781 1914665473 1351604943 269482959 + -118967717 -264571342 -71633409 -1574764609 + + -3.5075160861015320e-01 3.4602758288383484e-01 + <_> + + 0 -1 81 -579450864 489695248 -568994533 -671905287 + 1484394168 -21040594 -1132978498 -4358 + + -3.6514815688133240e-01 3.3418157696723938e-01 + <_> + + 0 -1 300 -1071640576 -1794071852 -589571267 -622299971 + -128680624 -107152175 -1128604712 -93782371 + + -4.3749809265136719e-01 2.3641848564147949e-01 + <_> + + 0 -1 43 1347789474 278788859 1078009887 1450704633 755482275 + -890279806 1601682923 1145430595 + + -4.5889991521835327e-01 2.1458856761455536e-01 + <_> + + 0 -1 58 -67811136 507778012 2090770170 940627838 -547680164 + -564395008 -1507362 -15533189 + + -3.4613710641860962e-01 2.9729354381561279e-01 + <_> + + 0 -1 40 708451453 915939127 2086399799 -1364049961 + -111247856 -278977 -562528515 -1432293672 + + -4.1620507836341858e-01 2.4089127779006958e-01 + <_> + + 0 -1 279 -1423966541 177905074 -199210 -1914114123 + 1966529760 -2068908586 -574294864 -841165576 + + -3.1373840570449829e-01 3.2040333747863770e-01 + <_> + + 0 -1 198 1848585743 -1940984369 1618804030 -285289836 + 1994084869 67912305 -4262128 -303498266 + + -3.6098247766494751e-01 2.7308923006057739e-01 + <_> + + 0 -1 83 -34593 -42134437 83156217 534796439 -206958426 + -542489456 -301270341 -1910021 + + -2.1900075674057007e-01 4.6534782648086548e-01 + <_> + + 0 -1 255 -732498730 808132612 -1694705650 637674514 + -856846932 790002977 -1523128100 -5768257 + + -3.0635869503021240e-01 3.2308223843574524e-01 + <_> + + 0 -1 142 -272658653 -2039881873 -1093759223 -295772198 + 316478038 1219928242 1542411604 -523960875 + + -4.1005435585975647e-01 2.4376337230205536e-01 + <_> + + 0 -1 314 -1886651248 233035768 -579887888 -644481803 + -1924527808 72215888 -813972012 -838860849 + + -3.2710522413253784e-01 3.0177840590476990e-01 + <_> + + 0 -1 109 -626385315 -541893255 -289637249 -2982538 + -285318128 -335644678 -934750724 -1937614 + + -3.0264344811439514e-01 3.4333297610282898e-01 + <_> + + 0 -1 127 -675308008 858262544 -546392130 -86565344 889738476 + 1024209296 -539034113 -17892421 + + -3.0164864659309387e-01 3.2610884308815002e-01 + <_> + + 0 -1 76 289874895 1574889454 356325874 -1257339986 + 2013148111 1523362314 -209587256 -51584276 + + -3.0728715658187866e-01 3.2666257023811340e-01 + <_> + + 0 -1 191 207364212 -1629723097 -69798913 180098791 445713016 + -1342538933 -112443395 -1436022512 + + -4.8653569817543030e-01 2.1469378471374512e-01 + <_> + + 0 -1 316 -1891992271 534502897 -709725931 -1133905467 + -1625325679 -1098169635 -1377993223 -1175556795 + + -3.6775574088096619e-01 2.6944977045059204e-01 + + <_> + 20 + -1.6370692253112793e+00 + + <_> + + 0 -1 246 -544546902 -40378434 1166794751 -553126475 + 1124863438 -6684681 252464271 252663279 + + -1.7677198350429535e-01 5.9283459186553955e-01 + <_> + + 0 -1 105 -1688231254 -136322578 542408738 -167781650 + -284181590 88186882 -74646534 -254480182 + + -4.8250266909599304e-01 3.2293373346328735e-01 + <_> + + 0 -1 291 -1087113223 -1153788752 923893117 -40019499 + -1444151361 -1145394000 520297981 -7610887 + + -2.7269113063812256e-01 4.6762999892234802e-01 + <_> + + 0 -1 163 1431698391 477399807 5291197 215258107 2097218267 + 1070271552 1347764095 1497759739 + + -3.6439743638038635e-01 3.3937779068946838e-01 + <_> + + 0 -1 49 -494878000 -1408572168 -1216184843 -570753839 + -1385631492 -1572929 -37698091 -140075 + + -3.4019106626510620e-01 3.2104432582855225e-01 + <_> + + 0 -1 101 -15196934 2140689563 1546672602 1591347871 + 1544035576 488135152 2142261182 -4259841 + + -3.7342280149459839e-01 2.8317087888717651e-01 + <_> + + 0 -1 195 -357586129 70201151 -292424585 -1468006937 + 1163158101 45494091 -492310284 -184618257 + + -4.2928436398506165e-01 2.4182404577732086e-01 + <_> + + 0 -1 219 -346034385 -1509510400 -590396300 -56691898 + -2013314811 -11148442 -790137804 -17301901 + + -3.2902050018310547e-01 3.1380781531333923e-01 + <_> + + 0 -1 276 51573280 869252567 856020959 2136817673 -1825854798 + 1786292453 1863958011 51070032 + + -4.4989612698554993e-01 2.3105476796627045e-01 + <_> + + 0 -1 239 221945781 -1351824656 -369627303 -1616906768 + 180205816 -1398111810 986511580 -2002860624 + + -3.3374428749084473e-01 3.0387389659881592e-01 + <_> + + 0 -1 88 -12577 1384049145 -1464090918 -265274512 1423314444 + -330608884 -134684970 -95228557 + + -2.9424193501472473e-01 3.4667330980300903e-01 + <_> + + 0 -1 215 -349179217 304152230 -725813534 -44849422 206658671 + 1343674791 1143817582 1414000887 + + -3.5459104180335999e-01 2.8464645147323608e-01 + <_> + + 0 -1 44 2135942447 398828943 961557154 -85264382 -9441329 + 191609019 -135559186 1155988198 + + -3.9276805520057678e-01 2.5532895326614380e-01 + <_> + + 0 -1 322 792354069 -1442292348 -725922817 -1075650752 + -1345299339 -270808291 1585978709 -1363456899 + + -4.0223011374473572e-01 2.3934543132781982e-01 + <_> + + 0 -1 51 -963985190 526195161 -632047017 -13433768 -170216210 + -584509261 -1147462405 2122007633 + + -3.5836115479469299e-01 2.7841308712959290e-01 + <_> + + 0 -1 69 1282640527 -221028405 -1115770991 -1312815327 + 518459295 -5010698 -8421409 -52340448 + + -3.0360385775566101e-01 3.3305782079696655e-01 + <_> + + 0 -1 63 240090463 1543015448 1657994909 1376934782 + 2121953054 -3393448 774963198 -364875945 + + -3.1514179706573486e-01 3.1063860654830933e-01 + <_> + + 0 -1 149 -117441008 272437552 -2011728848 808844177 + -115035003 901066096 -392587048 829815772 + + -4.1897901892662048e-01 2.3548045754432678e-01 + <_> + + 0 -1 41 -285250029 -1342531469 -1337688454 76061301 + 2140621344 -26490526 -230505742 -498673325 + + -3.7328067421913147e-01 2.7277800440788269e-01 + <_> + + 0 -1 186 197109511 113539807 -1663738276 652405614 + 2079664708 -1381909716 -83887277 -340414799 + + -3.5890376567840576e-01 2.7977034449577332e-01 + + <_> + 24 + -1.3530069589614868e+00 + + <_> + + 0 -1 231 -607125512 -203956738 -146407939 -549587593 + 2106032085 -7015967 1296916047 1465901007 + + -1.2551400065422058e-01 6.0037857294082642e-01 + <_> + + 0 -1 126 -12041 289127191 -1961178373 858913587 -452995643 + -573056619 -184946437 811859443 + + -3.1659016013145447e-01 4.0386086702346802e-01 + <_> + + 0 -1 305 -4456453 -1079345488 1601271281 1566430416 + -1145044997 -1363497544 -807547663 -846209539 + + -2.4047850072383881e-01 4.9467754364013672e-01 + <_> + + 0 -1 205 -422843738 730826189 -93007646 -1561338070 + 1156254860 82792447 -359691576 -318767125 + + -4.0942522883415222e-01 2.8118029236793518e-01 + <_> + + 0 -1 130 286242991 1430640951 -1315388758 -5384739 + 1897658847 1435892732 -241122312 -190447622 + + -3.6675310134887695e-01 2.7747273445129395e-01 + <_> + + 0 -1 155 -360711817 1044065557 -202645505 -1078462473 + -554253058 -123796300 -991681292 -117447077 + + -2.2938863933086395e-01 4.3152013421058655e-01 + <_> + + 0 -1 33 -486546689 -38568697 -114385161 -1078244605 + -1398768130 -16859405 -387455605 -95221245 + + -2.5292310118675232e-01 4.0669292211532593e-01 + <_> + + 0 -1 197 -347108861 707787566 -271712714 -286066182 + 1660625669 23327763 -118368650 -16781581 + + -3.2693040370941162e-01 2.9912397265434265e-01 + <_> + + 0 -1 48 44773155 -1400496480 -2013315201 -2130179 1928269391 + 2146108387 1871512017 -2109991 + + -3.1153312325477600e-01 3.0730357766151428e-01 + <_> + + 0 -1 277 817397681 -4651712 -1074593921 -4489223 -1464975366 + -1080350544 1068207931 -1414856608 + + -2.7505692839622498e-01 3.4677764773368835e-01 + <_> + + 0 -1 158 -805311870 -1362548369 -186736224 -220270666 + 1742698308 1147947264 -251792176 -789512618 + + -3.9942753314971924e-01 2.4047489464282990e-01 + <_> + + 0 -1 65 -700036014 -675626240 648044818 -69944464 -389395237 + -215288017 -1719763715 -12588054 + + -3.1749448180198669e-01 3.0149078369140625e-01 + <_> + + 0 -1 319 765664309 -1401170476 -22282241 -1880818860 + -1688316571 -52824373 -1730200112 -889291499 + + -3.5558241605758667e-01 2.6557549834251404e-01 + <_> + + 0 -1 272 -1164201800 -1716289100 -378039852 -1409579788 + -1121338919 -1880520559 932112367 -1869871980 + + -3.6485251784324646e-01 2.5734969973564148e-01 + <_> + + 0 -1 22 -21049601 -25866473 325725 1043995470 1592678894 + -269259937 -971837858 -8913089 + + -2.2092992067337036e-01 4.2716163396835327e-01 + <_> + + 0 -1 138 763233167 2004741991 -277961986 -35997914 897543679 + 1741158903 -50331667 -1578882304 + + -3.0084916949272156e-01 3.0936580896377563e-01 + <_> + + 0 -1 92 66036611 -2133412515 2136683646 -184645734 + 1604280073 202711897 -1379383 -186590399 + + -3.7059250473976135e-01 2.4178710579872131e-01 + <_> + + 0 -1 196 -326382376 361846096 -2045590179 1068964371 + 705563792 -1156488704 1208497115 994048507 + + -3.2299432158470154e-01 2.8366291522979736e-01 + <_> + + 0 -1 70 -412097022 -1568018524 -1342448718 -1253932 + -1260185663 1258275150 -2067820288 -138937659 + + -3.5679051280021667e-01 2.6213440299034119e-01 + <_> + + 0 -1 193 -714615533 270672129 -306258157 -1758339253 + 47808742 -1902768889 -1941903362 -893526249 + + -2.5351437926292419e-01 3.6361116170883179e-01 + <_> + + 0 -1 165 -318796273 1227399022 -1369769360 -675875878 + -344383672 1582766693 -86017024 -344793116 + + -3.1456202268600464e-01 3.0873265862464905e-01 + <_> + + 0 -1 93 -1045815078 -235892117 -571835429 -3460789 + -108525848 -1332172392 -1503517894 -1300229375 + + -3.5038644075393677e-01 2.6677846908569336e-01 + <_> + + 0 -1 15 -1976677263 3726998 -392242219 214976380 -1048834204 + -44384235 -81855380 -1434428367 + + -4.1762107610702515e-01 2.1475161612033844e-01 + <_> + + 0 -1 166 209059956 2146573530 1933758719 -1670893344 + -1206231472 -538281424 -605128624 -88975308 + + -4.3403875827789307e-01 2.1460674703121185e-01 + + <_> + 26 + -1.3850060701370239e+00 + + <_> + + 0 -1 250 1118499839 -796332098 -134253196 -6424581 259721215 + -1671186434 100533499 1170700287 + + -1.3170924782752991e-01 5.9910702705383301e-01 + <_> + + 0 -1 94 1570566140 2106702270 -577478657 -9625925 -36328709 + -75449636 -394325 1071454459 + + -3.8424813747406006e-01 3.6834198236465454e-01 + <_> + + 0 -1 278 -136315975 -1187792752 1568109937 -571788877 + -86048838 -1433673030 -1190563400 -1984968261 + + -2.4970491230487823e-01 4.7245621681213379e-01 + <_> + + 0 -1 155 -25692619 573911103 -1090519553 -1074266633 + -1124204292 -1199619017 -387151619 -1363171157 + + -2.7256563305854797e-01 4.0413850545883179e-01 + <_> + + 0 -1 299 270536720 -82027755 -542052353 -744834006 + -172433515 -36839897 -2048335877 -1356137589 + + -3.7769773602485657e-01 2.3510186374187469e-01 + <_> + + 0 -1 102 133774 1573843455 290464424 -173151905 771865036 + 1430562872 -109382744 -246039832 + + -4.7037139534950256e-01 2.0533446967601776e-01 + <_> + + 0 -1 127 -618460144 -1256386552 -1618575940 1972721552 + 469800920 504635776 -846791686 -69254485 + + -3.5127875208854675e-01 2.5741419196128845e-01 + <_> + + 0 -1 85 150343455 40910711 -1248068641 -1430372421 + -1895949361 -21272033 -331755522 -1431642114 + + -3.7984871864318848e-01 2.3182238638401031e-01 + <_> + + 0 -1 286 -13916067 -237157163 1069283741 -7496371 + -1771992641 -17192227 -1383805025 -2004252467 + + -2.1929037570953369e-01 3.8296228647232056e-01 + <_> + + 0 -1 206 9705301 508957948 -71469059 431911901 2041834229 + -1141023756 -38047748 -1432742364 + + -3.4404903650283813e-01 2.3727993667125702e-01 + <_> + + 0 -1 162 -28187574 1457201967 -1799949806 542855772 + -22592508 347566595 -86051214 -254279713 + + -3.3773353695869446e-01 2.3899486660957336e-01 + <_> + + 0 -1 78 1353317010 -353449217 14955059 233737419 1113314227 + 1272002592 2140215167 200230499 + + -3.5864931344985962e-01 2.1981315314769745e-01 + <_> + + 0 -1 50 -592281584 1487966200 -1782854276 -34165307 + -911392552 -588393496 -86945955 -302569115 + + -2.9026558995246887e-01 2.8104048967361450e-01 + <_> + + 0 -1 301 -14053072 -2064062200 -928567823 -983051523 + 201916593 150423153 -1859132687 -1929383993 + + -3.2115238904953003e-01 2.5486564636230469e-01 + <_> + + 0 -1 79 -607531822 2133030428 1045592120 922799991 + -1958080364 -631876516 -551887109 -116138161 + + -2.5716596841812134e-01 3.1999784708023071e-01 + <_> + + 0 -1 7 -1897370238 2088280021 -27542220 955523029 143789824 + -1732421377 -270311431 -319465097 + + -3.7310892343521118e-01 2.2297158837318420e-01 + <_> + + 0 -1 151 2117994623 -596493511 -42869249 2123389533 + -102873516 -1194255940 -1077870956 -1369933454 + + -3.2065725326538086e-01 2.5838941335678101e-01 + <_> + + 0 -1 141 -402659162 81777018 894353956 -1095917410 + 1470100164 1429538625 -675679616 22405077 + + -3.9470222592353821e-01 2.1365866065025330e-01 + <_> + + 0 -1 306 371408657 -1390197839 -610304075 -1084394735 + 740911518 -1442850385 1025329500 -1085287308 + + -3.5310438275337219e-01 2.2878694534301758e-01 + <_> + + 0 -1 96 1411399848 1607023650 2118667161 2115963630 + 825267416 -1300086616 866705067 1593838595 + + -3.7212049961090088e-01 2.1682462096214294e-01 + <_> + + 0 -1 236 -1023751505 1654647882 654289424 -221611870 + 1142643327 2865238 1353434162 -218116589 + + -3.0895259976387024e-01 2.7360698580741882e-01 + <_> + + 0 -1 25 263714691 -1500250442 -572970029 1029922655 + 461194497 -1384691616 902512981 -831890189 + + -2.8019675612449646e-01 2.8230005502700806e-01 + <_> + + 0 -1 157 -1009275158 703439343 1881063906 1407643120 + 1357622212 1698779727 -175905592 -799737222 + + -3.0597987771034241e-01 2.6828068494796753e-01 + <_> + + 0 -1 24 -655102849 1007864659 -1544094705 -1540313220 + -574699 -47065227 -1091975362 -278732953 + + -2.5672450661659241e-01 3.1667667627334595e-01 + <_> + + 0 -1 103 347621596 1037305260 358617181 753140063 -61713220 + -610393186 -1106322953 -1350956022 + + -3.4445220232009888e-01 2.3471401631832123e-01 + <_> + + 0 -1 36 -923349290 256096042 219291806 -1155987134 + 2086406828 1508909094 -2007541485 1887403703 + + -3.4530115127563477e-01 2.3805907368659973e-01 + + <_> + 25 + -1.2224140167236328e+00 + + <_> + + 0 -1 252 -22088450 -5325374 -33282 -258 12993776 67429556 + 1976988926 2005923583 + + -1.9573126733303070e-01 5.5536717176437378e-01 + <_> + + 0 -1 216 -941896961 288549683 -965260547 1902502507 + 1287981311 723742655 1157582079 1173354239 + + -3.0669313669204712e-01 3.6197665333747864e-01 + <_> + + 0 -1 62 -571494657 -2099490 -25243649 -1082480054 2115633354 + -130996 -329130274 -67419570 + + -2.4500623345375061e-01 4.3682980537414551e-01 + <_> + + 0 -1 19 -704647185 2113917365 -428522838 -141168226 + 2123362255 2006664827 -254348594 1459088068 + + -3.4159252047538757e-01 2.9353541135787964e-01 + <_> + + 0 -1 285 -138414285 -168045645 -550635909 -240708569 + -36728913 -33554641 -890270582 -2069142366 + + -2.8817924857139587e-01 3.4106674790382385e-01 + <_> + + 0 -1 77 -220544510 -184926009 2147213135 -209757985 + -1177821558 -139002180 845151099 -8701317 + + -2.2831186652183533e-01 3.8085940480232239e-01 + <_> + + 0 -1 256 12976195 569051735 -1044464777 -2131832853 + -1863693873 -889525281 -1060633090 -1024468017 + + -3.4035223722457886e-01 2.4870637059211731e-01 + <_> + + 0 -1 225 243431285 -1342397538 -1074439183 -198404 + -1147339787 -1950366979 -1176535299 -1346857836 + + -2.9916274547576904e-01 2.7878564596176147e-01 + <_> + + 0 -1 188 -389107962 -1496674445 -1433293856 1650520822 + -808004780 -340166498 -270808076 -327882656 + + -3.6523097753524780e-01 2.3002453148365021e-01 + <_> + + 0 -1 249 -1561660693 -1964116758 -433068176 -674252332 + 76465114 -86789644 1441781719 -167788045 + + -2.6452550292015076e-01 3.1857562065124512e-01 + <_> + + 0 -1 30 83758542 1352905533 -25477260 888412977 1174342621 + -581240613 -1877419 954559493 + + -3.9430552721023560e-01 2.1380217373371124e-01 + <_> + + 0 -1 291 1060338993 -1618339632 1411411797 -1111518927 + 1038801631 -1171216200 431569585 -1627714192 + + -3.1174781918525696e-01 2.5848281383514404e-01 + <_> + + 0 -1 174 1272433155 241160959 -187054076 -1428167714 + 1656705620 178680903 -188744156 -92279086 + + -3.5104271769523621e-01 2.4124261736869812e-01 + <_> + + 0 -1 100 276007552 1448970891 1624277552 1433388541 + -144262781 203467264 -747113541 1187367471 + + -4.3640381097793579e-01 2.0373314619064331e-01 + <_> + + 0 -1 265 514492090 -1084506382 802327294 -574652997 + -1951495942 -1115800400 -1734105369 -745080833 + + -2.6869311928749084e-01 3.1262946128845215e-01 + <_> + + 0 -1 238 975568369 -1078429260 -1073778819 -1246039248 + -566763547 -574710393 -1879731715 -1363518280 + + -2.5506082177162170e-01 3.2470330595970154e-01 + <_> + + 0 -1 116 -197130578 -69435407 25570034 -1282381057 + -736477475 1078203406 1072176808 -224107914 + + -3.3984503149986267e-01 2.3857665061950684e-01 + <_> + + 0 -1 170 2006936207 2046780255 -906124674 -571018634 + 465548283 1995414095 -469838166 -53152636 + + -2.3337669670581818e-01 3.4638467431068420e-01 + <_> + + 0 -1 261 -1993607757 -1984171376 -1964620068 -1377319864 + -878651982 2100351409 -540935193 -846344047 + + -2.5745591521263123e-01 3.1530505418777466e-01 + <_> + + 0 -1 129 -585119904 520350737 -1602237728 387020659 + -316697172 -809628610 -341521253 1937239575 + + -3.0576938390731812e-01 2.6786401867866516e-01 + <_> + + 0 -1 303 -48760835 -1382112048 1192391029 185356020 + 783760374 -1402171184 959454513 -1431708544 + + -2.8466665744781494e-01 3.0237734317779541e-01 + <_> + + 0 -1 321 700150833 -1366030659 -590225483 -1393138060 + -1364311531 -1142207587 2140558729 -1370849424 + + -3.7198981642723083e-01 2.3002536594867706e-01 + <_> + + 0 -1 228 -1054166 -201341212 1923367016 1916986952 + 1992519431 1213361995 1174402160 -1068174746 + + -3.4979847073554993e-01 2.4561876058578491e-01 + <_> + + 0 -1 106 -1907696549 -268565315 -1342514689 336742770 + -1439790339 -1301623122 -1342275841 -1440064298 + + -2.6577013731002808e-01 3.1544610857963562e-01 + <_> + + 0 -1 210 -257776636 1915752044 -1649103180 -1095126373 + 1422147805 210473965 2022068463 1660109363 + + -3.7758591771125793e-01 2.2004681825637817e-01 + + <_> + 28 + -1.3550500869750977e+00 + + <_> + + 0 -1 273 1595195384 1608363967 1595766713 -572674083 + 1226391547 -44180227 2111155631 531574527 + + -1.6430117189884186e-01 5.4418802261352539e-01 + <_> + + 0 -1 39 -5377 -57601 538639103 -347397 -17301286 -4259105 + -79502593 -77380901 + + -1.8002209067344666e-01 5.2194720506668091e-01 + <_> + + 0 -1 177 1566441471 2103287797 492075325 500554077 + 1998422011 -155652 192249721 1565917179 + + -2.7448469400405884e-01 3.6767318844795227e-01 + <_> + + 0 -1 3 -524550921 -1669383407 -574620225 -33590459 143458441 + 256708119 -805314577 -6324385 + + -2.3465685546398163e-01 4.0192386507987976e-01 + <_> + + 0 -1 71 -846691120 1439476212 -690689 -2237091 -67570179 + -36374787 -2105923 -143907 + + -2.7146762609481812e-01 3.2002952694892883e-01 + <_> + + 0 -1 294 263139089 -581452515 2010774399 -2106799 477955253 + -72357417 267875276 -1097712 + + -3.5161617398262024e-01 2.3248630762100220e-01 + <_> + + 0 -1 302 -15214854 -1884686344 167600312 -581052707 37857013 + 202028220 1305828853 -840957953 + + -2.6214873790740967e-01 3.0466583371162415e-01 + <_> + + 0 -1 169 613396271 2003697295 1738141229 -35000540 + 2147446463 2131993840 -10096690 1690603136 + + -3.2117179036140442e-01 2.4732810258865356e-01 + <_> + + 0 -1 281 -1355025965 -1961980240 -671219723 -283264688 + -1936837383 -1952736320 -908474131 -875701004 + + -2.4713008105754852e-01 3.1776627898216248e-01 + <_> + + 0 -1 232 -894441054 -1880167002 -853281294 -338827028 + 1348301603 877440640 1936192066 -135400158 + + -3.2655048370361328e-01 2.4388861656188965e-01 + <_> + + 0 -1 288 -553260894 -155221559 -13927175 -570440513 + -23332102 -93644167 -1079190789 -1431330575 + + -2.4785453081130981e-01 3.1448525190353394e-01 + <_> + + 0 -1 190 672423253 -570534469 -174826505 -1074210146 + -1158800264 -67208458 802954712 -1079507880 + + -3.1213754415512085e-01 2.4356111884117126e-01 + <_> + + 0 -1 120 -656932646 -651487779 -956164148 2064599515 + -136440708 -588512112 -1232981444 -1979159765 + + -3.0449146032333374e-01 2.5301957130432129e-01 + <_> + + 0 -1 243 1649084931 672964650 -1105808049 713205535 + 2036285460 -666148121 -55162040 -18875393 + + -3.4271252155303955e-01 2.1502359211444855e-01 + <_> + + 0 -1 11 -152656190 868356183 -501591426 -201146046 + -546953661 1982915527 -759837225 -751304729 + + -3.6129125952720642e-01 2.0629832148551941e-01 + <_> + + 0 -1 107 -537765384 1060665394 2014012895 -1179616664 + -22202433 -1074072677 -147975202 -1147076845 + + -2.9889339208602905e-01 2.5862032175064087e-01 + <_> + + 0 -1 199 -328257785 -858932225 -530764942 -826874930 + -82742922 -1671853892 -218380796 -169018736 + + -3.1055119633674622e-01 2.3958165943622589e-01 + <_> + + 0 -1 154 494120195 870143859 -1647046746 -36192340 + 2139319279 803383587 -332148852 -175859072 + + -2.8900969028472900e-01 2.5575104355812073e-01 + <_> + + 0 -1 282 -811560420 827561735 -12914945 -80101505 + -1361111928 -1185616587 -1407676420 -16973965 + + -2.4221476912498474e-01 3.2213848829269409e-01 + <_> + + 0 -1 28 -1807515438 -1923894982 -1525713421 -149168351 + 240714426 -1418935881 419048443 426584671 + + -3.4787160158157349e-01 2.1293328702449799e-01 + <_> + + 0 -1 147 -67165120 453708801 -1303483468 895300097 + 1246742261 -70442158 -982536969 1920335427 + + -3.4275433421134949e-01 2.1697193384170532e-01 + <_> + + 0 -1 84 1234906919 2103279727 -1846517728 -34739694 + 2067706763 1171293376 -104744214 -776609560 + + -3.1936296820640564e-01 2.2989478707313538e-01 + <_> + + 0 -1 203 -148968905 1008481713 788164595 781877169 240125438 + -1348980802 1087673598 -1963666822 + + -2.6340115070343018e-01 2.8225165605545044e-01 + <_> + + 0 -1 292 1837891345 -1365117008 931935797 254075285 + 1304075707 781882527 284906609 -1998401051 + + -3.0138608813285828e-01 2.5070127844810486e-01 + <_> + + 0 -1 31 -2141011328 549559667 -576755279 -1989065165 + -1471060704 -1108160073 -825160949 47662087 + + -4.3011611700057983e-01 1.7580580711364746e-01 + <_> + + 0 -1 244 -747375089 -747702293 -219779522 1890186598 + -335684346 1718484847 1643894306 -206110753 + + -2.3109740018844604e-01 3.2786485552787781e-01 + <_> + + 0 -1 26 -1784488175 -36553927 -1031147589 -369559501 + 125374437 -1648822347 8863969 -1498451769 + + -2.3490820825099945e-01 3.1162357330322266e-01 + <_> + + 0 -1 259 -1071476830 -1095595629 -1920078129 -1444498449 + 810365109 -21630982 -290653569 -392299569 + + -2.5611433386802673e-01 2.9074308276176453e-01 + + <_> + 30 + -1.3058989048004150e+00 + + <_> + + 0 -1 262 -270610434 -134359075 -811399758 -681603633 + -286489698 -45513244 -1344862513 227476639 + + -1.0025274008512497e-01 5.5719470977783203e-01 + <_> + + 0 -1 104 -2097187 353744664 -1074283233 962461525 -17042946 + 2132074456 -185611768 173014862 + + -2.9774430394172668e-01 3.4969726204872131e-01 + <_> + + 0 -1 192 -201591309 322053939 -66051 -1150042305 -1967374172 + 720309079 -1929450275 -9437249 + + -2.2600507736206055e-01 3.8218078017234802e-01 + <_> + + 0 -1 290 -1690568520 1023449340 21823732 -1646306859 + -661660161 529059241 -845261571 -536871425 + + -2.8739321231842041e-01 2.8658962249755859e-01 + <_> + + 0 -1 253 -894497022 101363498 -1468636304 174491490 + 1306476909 100485583 -17240860 -50397265 + + -4.0346711874008179e-01 1.7318421602249146e-01 + <_> + + 0 -1 83 -318927617 2139044223 -1908122241 779509119 + -1159705360 -13892400 239132095 -1357193897 + + -2.4370998144149780e-01 3.1787887215614319e-01 + <_> + + 0 -1 240 -1372487695 -1464797736 -608961161 -539484303 + -1347732485 -1107560232 -1770177028 -1397928683 + + -2.9030051827430725e-01 2.7010890841484070e-01 + <_> + + 0 -1 162 -77617562 1723582851 -388105926 10740970 2075870464 + 2001443802 -264144166 1912602619 + + -3.6183983087539673e-01 2.2234350442886353e-01 + <_> + + 0 -1 209 1737993987 575323583 570599958 -1593901402 + -537396969 800103342 -218367233 -210440396 + + -3.0187138915061951e-01 2.5218242406845093e-01 + <_> + + 0 -1 115 -3692022 -33948459 -1481085416 -169476374 + -243802706 1464294676 -138677344 -135135404 + + -2.6393750309944153e-01 2.8237256407737732e-01 + <_> + + 0 -1 38 652099711 -1564843973 104523854 704662580 2126923816 + -548581264 -351211922 -63803885 + + -3.4199714660644531e-01 2.2430206835269928e-01 + <_> + + 0 -1 42 -1969279581 -1481414863 -1376914049 -1163909120 + 207957301 -1456248013 -347640417 -358126493 + + -3.2226172089576721e-01 2.3534862697124481e-01 + <_> + + 0 -1 97 -721363152 486579872 1882454289 1434257045 + 1611566751 1289487287 996045691 1005540351 + + -3.4691241383552551e-01 2.1465319395065308e-01 + <_> + + 0 -1 146 -613203450 1931612930 -221388928 2357067 -95798262 + -1633004965 -1206355046 -1305281858 + + -3.5142555832862854e-01 2.2679552435874939e-01 + <_> + + 0 -1 53 726466699 -783429313 -1320406822 -3624870 1498638047 + 293610405 -545215571 -171145013 + + -2.8053104877471924e-01 2.5749957561492920e-01 + <_> + + 0 -1 258 -96033630 1940556686 -497037664 -252647058 + 703265613 1079474790 -142103350 1089273046 + + -3.5805869102478027e-01 1.9770637154579163e-01 + <_> + + 0 -1 29 801058311 -1581801242 219502516 -808469412 264711475 + -2031926289 805127380 -840973936 + + -3.1421071290969849e-01 2.3023897409439087e-01 + <_> + + 0 -1 172 -431184122 -2146638145 -899408814 -320144615 + -413827291 -936008940 -1376277757 -856306909 + + -3.3034646511077881e-01 2.2980070114135742e-01 + <_> + + 0 -1 296 -1934886608 -1103642657 -1616127841 2141970916 + 12401112 -606080117 -28750412 -975218195 + + -3.0468633770942688e-01 2.4846823513507843e-01 + <_> + + 0 -1 137 1828669055 -890173322 1056472031 1383623540 + -356497848 -275776488 -319784148 -45023438 + + -2.7311590313911438e-01 2.6826277375221252e-01 + <_> + + 0 -1 9 1255206898 -1667881507 -10989766 54528930 1868912080 + 1497103356 -1096470729 195839511 + + -3.6629125475883484e-01 2.0582148432731628e-01 + <_> + + 0 -1 221 -374953039 110804926 -627248196 1059075576 + -271092824 -1449292838 -306539616 -1950680360 + + -2.7446079254150391e-01 2.6614543795585632e-01 + <_> + + 0 -1 77 1079656456 1450316376 -44560086 -86675865 821811859 + -203750610 1644870683 862142514 + + -4.1938367486000061e-01 1.8087086081504822e-01 + <_> + + 0 -1 0 -290783281 -303164749 -1470447878 -1487432078 + 916915428 -88877852 1774133328 -992512778 + + -2.6362594962120056e-01 2.8109744191169739e-01 + <_> + + 0 -1 234 -756036050 839304974 -287378334 -278205702 + 1541888379 252445922 1089229910 1534066638 + + -3.4634828567504883e-01 2.1581955254077911e-01 + <_> + + 0 -1 276 855880616 863230344 1428139679 995299387 + -1190999286 -2031656420 -1089224709 393285777 + + -3.6159241199493408e-01 2.0310276746749878e-01 + <_> + + 0 -1 311 -1512047005 -894771811 -1683823949 -598542090 + 1995129382 -1899059137 1498537061 -838863787 + + -2.8326958417892456e-01 2.6241222023963928e-01 + <_> + + 0 -1 315 -1885077515 -1147345968 765009497 190991824 + -1880224543 -1444116296 170661041 -1880099595 + + -2.7807191014289856e-01 2.6050725579261780e-01 + <_> + + 0 -1 135 -678450904 253998378 1239066322 -181932174 + 1262701314 1057893524 -413531308 -638649353 + + -3.3198201656341553e-01 2.2709015011787415e-01 + <_> + + 0 -1 34 -581179905 -1848462196 1945061311 -5371768 + -323621137 -1263209313 1589634526 -1983639545 + + -2.1172577142715454e-01 3.3727011084556580e-01 + + <_> + 28 + -1.5291974544525146e+00 + + <_> + + 0 -1 118 1460139419 453084545 822327865 822292283 352929169 + 417272919 135004047 924844031 + + -8.1135094165802002e-02 5.6568491458892822e-01 + <_> + + 0 -1 80 -715128994 1934810962 -672407682 -201597282 + -35692578 809635668 -268435489 2147483551 + + -3.0913391709327698e-01 3.3743736147880554e-01 + <_> + + 0 -1 247 1122941951 1555757531 -694977567 -540019318 + 137302463 470541003 1136607934 1306525407 + + -3.1006491184234619e-01 3.1824222207069397e-01 + <_> + + 0 -1 260 -720124792 -536901237 1570357663 -1650861895 + -552270619 -68301133 1302024703 79667599 + + -3.3839857578277588e-01 2.5523734092712402e-01 + <_> + + 0 -1 17 -8193062 -6097966 -1548746898 -379066394 143198346 + -645407521 12583050 -472923985 + + -2.4971115589141846e-01 3.2822373509407043e-01 + <_> + + 0 -1 237 -825768185 724487963 -390073602 -330379374 + 1107247415 83879931 -993921692 -452988933 + + -3.0709245800971985e-01 2.5717419385910034e-01 + <_> + + 0 -1 58 -824653104 303085300 -1502438950 676395390 + 1255626832 486565974 -815202689 -79167553 + + -3.6309060454368591e-01 2.1628698706626892e-01 + <_> + + 0 -1 67 1465723394 105884335 67529631 1199566589 -1622165645 + 1811892772 1549268950 1652352758 + + -4.2343840003013611e-01 1.6860494017601013e-01 + <_> + + 0 -1 185 148088327 717657079 -1158484046 -2098532510 + 1870465024 1417516115 -834205 -218760204 + + -3.6911985278129578e-01 2.0653814077377319e-01 + <_> + + 0 -1 300 -461242368 1477725653 -1215242820 -90145126 + 1009057732 -704735 -1141055496 -1162708353 + + -3.3464974164962769e-01 2.3336097598075867e-01 + <_> + + 0 -1 293 -1423237359 -1789315824 -574109707 -1107438219 + -1363603597 -872691976 -1657075536 -1933638287 + + -3.1273457407951355e-01 2.2250117361545563e-01 + <_> + + 0 -1 194 -144708057 1699343849 -1838157252 -177211402 + -159396385 625472608 -135793676 -521076854 + + -2.3151670396327972e-01 3.2311838865280151e-01 + <_> + + 0 -1 168 -1931608011 913325143 -171254849 266627963 + -2035524252 -69309961 -81258276 -98535933 + + -2.9178491234779358e-01 2.4896363914012909e-01 + <_> + + 0 -1 91 1087671428 82841500 -823391220 -1623396996 + -102804027 1314177621 -1141613796 -1074263479 + + -3.8546600937843323e-01 1.7542295157909393e-01 + <_> + + 0 -1 159 -933240178 -1878596882 1715175556 -1194366298 + 411894039 268454833 -470873276 719547915 + + -3.2228979468345642e-01 2.1430800855159760e-01 + <_> + + 0 -1 220 -939528673 -1404420134 -369182724 1002367802 + 15711733 -1410089155 1960793528 -2001995142 + + -2.3454265296459198e-01 3.0028054118156433e-01 + <_> + + 0 -1 113 536155908 470828324 -1369532674 -1364256937 + 965751798 -35376543 78916068 750088039 + + -4.0617641806602478e-01 1.7761451005935669e-01 + <_> + + 0 -1 35 -2071666137 -5603018 -1985288769 -1434200 1335921899 + -1427144213 -1685518963 -1157538765 + + -2.4697369337081909e-01 2.9498186707496643e-01 + <_> + + 0 -1 229 -288895194 586300718 -1428684760 -123278042 + -121959099 946274053 -1125681616 1348531058 + + -4.4196075201034546e-01 1.6939437389373779e-01 + <_> + + 0 -1 21 -1431908781 2021291639 -1130434561 980837616 + 575372375 -335353565 -1127443082 -8913481 + + -2.6150795817375183e-01 2.7675113081932068e-01 + <_> + + 0 -1 68 -1163937995 319737271 1308060341 -1120611591 + 215961812 -849912353 -825672464 -121636649 + + -2.0028464496135712e-01 3.5346552729606628e-01 + <_> + + 0 -1 112 -1550874873 68414247 420172119 -1144260794 + -508579405 -134226281 -772565676 -204480722 + + -2.3316873610019684e-01 3.1222426891326904e-01 + <_> + + 0 -1 218 -541341454 531709016 -1735251873 1326185481 + -1933801064 801776562 1154066423 1474264822 + + -2.6953682303428650e-01 2.8109839558601379e-01 + <_> + + 0 -1 181 1280835701 -19635873 -1961789445 -282569314 + 2036092788 -1093054601 -151512323 -1347805666 + + -2.9192847013473511e-01 2.4838224053382874e-01 + <_> + + 0 -1 95 -311496552 764872328 -498934241 504728371 + -1669213988 -1084285404 -22094113 977657810 + + -3.2798394560813904e-01 2.1226845681667328e-01 + <_> + + 0 -1 309 -830243037 -455709770 -1109557600 -394303915 + 1283690960 229296318 285572161 -1936864027 + + -2.9578369855880737e-01 2.4679656326770782e-01 + <_> + + 0 -1 202 -353374409 -1910657629 -153750156 -291312600 + -824232155 -1323582188 -1830135484 -1029119357 + + -3.0753603577613831e-01 2.2499974071979523e-01 + <_> + + 0 -1 150 1861152279 336385887 -1598237261 1532541780 + 717032533 845016530 -1129812228 -567126192 + + -2.7896767854690552e-01 2.5912684202194214e-01 + + <_> + 32 + -1.3275781869888306e+00 + + <_> + + 0 -1 235 -9764865 -604078086 -173773889 -2987398 1279545343 + -557388648 1149200335 1195863143 + + -2.8027681633830070e-02 5.9074550867080688e-01 + <_> + + 0 -1 55 -715992866 -553046580 -170277985 -572962233 + -202911505 -562080269 -271361 2136426523 + + -2.9094350337982178e-01 3.2474684715270996e-01 + <_> + + 0 -1 2 -285213773 -97321424 -537973381 -1342251019 249102355 + 186786323 -1879110913 -269489669 + + -2.4952219426631927e-01 3.3645749092102051e-01 + <_> + + 0 -1 274 -5251811 -46589657 -577170147 -1649982203 -147523 + -67650657 -307360312 -1945170545 + + -2.2803187370300293e-01 3.6403229832649231e-01 + <_> + + 0 -1 132 1587350780 -6418628 -1073864867 -604037841 + -21053701 -1195406672 784076557 -1342501334 + + -2.9213908314704895e-01 2.7659067511558533e-01 + <_> + + 0 -1 176 -826544217 -1431112397 -488065488 540212786 + -722778748 1157429871 -270294508 -520884270 + + -3.5402128100395203e-01 2.1517892181873322e-01 + <_> + + 0 -1 87 712975879 79833691 -1361412946 686460060 -691335585 + -125978095 -285512546 -1430258133 + + -3.1391125917434692e-01 2.2734560072422028e-01 + <_> + + 0 -1 200 -976172866 286760680 6735455 198928110 1074026973 + 990905122 10809743 255401983 + + -3.5261881351470947e-01 2.0989060401916504e-01 + <_> + + 0 -1 224 774125429 -1154154632 -439675595 -1111523364 + 1012643517 -1454645 798207228 -1128575640 + + -2.6199585199356079e-01 2.7558091282844543e-01 + <_> + + 0 -1 251 -487657822 48661756 -659241758 -135899942 + 1153834238 10993310 1170301815 1424455655 + + -4.2886912822723389e-01 1.5836857259273529e-01 + <_> + + 0 -1 61 721311231 -1653716997 -1990311447 531501487 + -1965404323 -67478251 171464059 184576600 + + -3.8873490691184998e-01 1.7470200359821320e-01 + <_> + + 0 -1 57 327418278 390873324 -1341550100 -1277569843 + 890828715 1352696428 762946218 871965384 + + -4.1405329108238220e-01 1.7622730135917664e-01 + <_> + + 0 -1 313 1356549140 -1631210850 -1129431843 -1204505275 + -93539215 -1074227267 -386080853 -84902083 + + -2.7681437134742737e-01 2.4316167831420898e-01 + <_> + + 0 -1 157 -488643058 180875078 -329274718 -236520514 + -1068514035 1145270019 1940253924 1625680036 + + -3.7754905223846436e-01 1.7737720906734467e-01 + <_> + + 0 -1 318 1568653099 -1486684233 -270730127 -320215680 + -1480112719 -1448552587 444420880 -859837569 + + -2.4140998721122742e-01 2.7932175993919373e-01 + <_> + + 0 -1 189 -17905025 1950769147 -402672769 2131932059 + 251095909 -1377736845 -268624424 1935896624 + + -2.4894605576992035e-01 2.6565098762512207e-01 + <_> + + 0 -1 56 -229980658 1379962893 -378530289 -1286386082 + 541532620 -136587009 1094085135 657713951 + + -2.9520252346992493e-01 2.2449728846549988e-01 + <_> + + 0 -1 271 -383212128 -6160449 -283244184 -1365334076 + 762609077 1768025015 -304497187 -1344499269 + + -2.8447866439819336e-01 2.4520753324031830e-01 + <_> + + 0 -1 212 -823677149 33812366 63268002 -1196492664 759909893 + 73716507 -306223978 -151718043 + + -3.2939437031745911e-01 2.0377136766910553e-01 + <_> + + 0 -1 312 -1374019853 713820810 -669067463 -2043769806 + -847767619 -1963069954 1575449037 -450464140 + + -3.0366918444633484e-01 2.2024095058441162e-01 + <_> + + 0 -1 114 -470316922 717621094 -923928028 -172110089 + -175398463 2009855399 -194461440 -243275802 + + -2.6190644502639771e-01 2.6647549867630005e-01 + <_> + + 0 -1 140 1951769299 1434447053 -1336849665 -721425681 + -78677193 -2902011 2045245095 -24300714 + + -2.2465880215167999e-01 3.1657159328460693e-01 + <_> + + 0 -1 267 -861210968 688568240 -1004941864 -35890713 + -662335344 8503434 1128813796 1162868189 + + -4.0748140215873718e-01 1.7012281715869904e-01 + <_> + + 0 -1 8 1909956778 -958730002 73759065 117326543 -170462666 + -1638796928 -144999309 1180628626 + + -3.5050147771835327e-01 1.8371912837028503e-01 + <_> + + 0 -1 156 -1007695481 -1609761269 -218186094 -1297941718 + 1501545350 1348355905 -785383567 -535441850 + + -2.8428241610527039e-01 2.3429898917675018e-01 + <_> + + 0 -1 277 -1088815371 1060734832 -4223497 1069000375 + -1138325508 -23580996 -1751106129 -1447097814 + + -2.0420564711093903e-01 3.2137596607208252e-01 + <_> + + 0 -1 10 1861672606 -668397946 1208024407 1141008467 + 793079834 440603748 -705639574 -48042237 + + -2.7496239542961121e-01 2.4548499286174774e-01 + <_> + + 0 -1 283 -992769979 767790999 -48337487 2140880143 215229748 + 418870965 -320966916 1188940671 + + -2.7034837007522583e-01 2.4777430295944214e-01 + <_> + + 0 -1 254 -1532809423 -1493812843 -1351098395 -172312296 + -515160205 -1498547284 268291320 -1426238432 + + -2.8834709525108337e-01 2.2686660289764404e-01 + <_> + + 0 -1 298 -3221657 908227842 -305164460 942829106 -357061387 + -1565722789 -9463718 -360710886 + + -2.2364138066768646e-01 3.1509658694267273e-01 + <_> + + 0 -1 93 -735960950 -170126554 1909113855 -23709394 + -1542321238 -737632549 -361625941 867181313 + + -3.6416807770729065e-01 1.8943277001380920e-01 + <_> + + 0 -1 297 -1427114189 -1498618581 -224896028 -1392720912 + -1096677881 -972078302 -136092556 -1000345005 + + -3.1630918383598328e-01 2.1302369236946106e-01 + + <_> + 36 + -1.3241410255432129e+00 + + <_> + + 0 -1 264 -1886982258 -671648799 -570864297 -606221228 + -1899852152 -3292975 236208719 1600077909 + + -7.9810082912445068e-02 5.2391374111175537e-01 + <_> + + 0 -1 226 -85990657 570624531 -67109121 992976191 -386251554 + -1965159927 -83923475 -1048581 + + -1.8287384510040283e-01 4.4005623459815979e-01 + <_> + + 0 -1 278 -37758029 -1146357328 -206212751 -572669447 + -3147333 -1147409733 -67110471 -1714697285 + + -2.0388080179691315e-01 4.2895537614822388e-01 + <_> + + 0 -1 145 -183247173 1023475216 1027163441 1527839249 + 1017224859 1738217629 1060840379 1065315199 + + -3.3740916848182678e-01 2.1529236435890198e-01 + <_> + + 0 -1 103 481318143 -134278060 -1749526563 -1078064995 + -1372435270 -1162474278 -358945793 -1431173974 + + -2.8765675425529480e-01 2.5110965967178345e-01 + <_> + + 0 -1 268 -805831759 -302189077 -591401807 -305135631 + 144606625 -1936723969 -992408563 -855769927 + + -2.2018201649188995e-01 3.1721305847167969e-01 + <_> + + 0 -1 20 -534756686 1380106992 -2462279 -33757488 28591869 + -456875269 -1610624779 -1051657 + + -2.6303508877754211e-01 2.5412750244140625e-01 + <_> + + 0 -1 175 1342137858 36560521 -895533800 683603905 1263879488 + 1146407324 -1450126 -537788681 + + -3.6383235454559326e-01 1.9057570397853851e-01 + <_> + + 0 -1 66 1340125183 -134742145 -692979981 -1214109056 + 1289101223 -4839633 -21061633 -369409502 + + -2.0452670753002167e-01 3.3919993042945862e-01 + <_> + + 0 -1 269 193720319 100840569 -303833102 763156184 978053077 + 531299573 -839056136 -1929622308 + + -2.7057421207427979e-01 2.3806059360504150e-01 + <_> + + 0 -1 73 1437966890 -129122561 1958795834 1556596447 + 1598142386 1074702522 -272384141 1205144459 + + -3.8338547945022583e-01 1.6122914850711823e-01 + <_> + + 0 -1 171 1115680527 115249619 895027446 -92284851 1599078213 + 1735769988 -537445018 1689910980 + + -3.6433032155036926e-01 1.7980493605136871e-01 + <_> + + 0 -1 144 1900011604 2069139451 1149891166 -1061030506 + 1967646922 -937402003 -1292100642 838974267 + + -3.2297107577323914e-01 1.9990013539791107e-01 + <_> + + 0 -1 86 1216302162 1437731410 -1922152432 -586510344 + -937599750 1065827099 -621007040 -86024589 + + -2.9406809806823730e-01 2.1769714355468750e-01 + <_> + + 0 -1 288 34597026 -688274366 1187213567 -671108889 + -1508901182 -1308638469 -559091031 247438496 + + -3.2822206616401672e-01 1.8776336312294006e-01 + <_> + + 0 -1 207 103046517 133606652 1733190463 -1346628911 + -1148684048 -22091807 901613945 -1460139888 + + -3.3780130743980408e-01 1.9073766469955444e-01 + <_> + + 0 -1 111 -746085629 -676994367 1095924655 -1122388257 + -212397823 -202506293 -205057719 -208672818 + + -1.8210665881633759e-01 3.4192490577697754e-01 + <_> + + 0 -1 74 -425549783 -371579759 -351371857 -575060349 + -1214609473 -88295489 419684031 -1624088569 + + -2.2647747397422791e-01 2.7878209948539734e-01 + <_> + + 0 -1 208 -894491986 -219288836 1075036258 -1764754717 + -573582558 -1807733298 1383817634 -196806592 + + -2.9377350211143494e-01 2.1309736371040344e-01 + <_> + + 0 -1 201 -2106874097 -931096794 1687396770 -828052004 + 2015982962 -126682795 -294764796 -323961156 + + -3.2405611872673035e-01 1.9604462385177612e-01 + <_> + + 0 -1 222 -2042653379 1051606960 500611353 1069291288 + -1453967943 -1919900749 -547038872 -1414655812 + + -2.6115354895591736e-01 2.3542492091655731e-01 + <_> + + 0 -1 314 -588537600 -844176924 1464154596 -637687780 + 487338116 68063409 -1978163723 -840968737 + + -2.7114504575729370e-01 2.3290830850601196e-01 + <_> + + 0 -1 317 120290097 -1288032431 1651243885 -76200631 + -2068365766 -1346655489 246316733 -1108265899 + + -3.0526432394981384e-01 2.0446150004863739e-01 + <_> + + 0 -1 16 -822121865 -768454985 -352395443 -367512593 + -1091080379 -202815919 -279024202 -28119438 + + -2.4680423736572266e-01 2.5303974747657776e-01 + <_> + + 0 -1 39 -624497410 423430210 168884479 707847256 -901496725 + 2133000198 -1135412149 1936933458 + + -3.1653416156768799e-01 2.0023956894874573e-01 + <_> + + 0 -1 242 1650942474 1345050478 886355088 1168828219 + 1112207884 1231876612 1550108076 1951460330 + + -3.2898175716400146e-01 1.8093948066234589e-01 + <_> + + 0 -1 124 369300756 891056133 -1916674564 -1374783349 + 996154237 -1145226207 -5607004 744775764 + + -3.2225444912910461e-01 1.9573701918125153e-01 + <_> + + 0 -1 211 205577554 1071184148 -1263948549 1998946051 + 1260935961 -304903199 -606843718 1677159567 + + -3.0931469798088074e-01 2.0338173210620880e-01 + <_> + + 0 -1 143 -591418226 177508317 -1342069760 -4867939 + 1927953629 272683209 -1222155904 1886512754 + + -3.4405741095542908e-01 1.8495233356952667e-01 + <_> + + 0 -1 265 -21049686 -28131359 1073478397 -34340880 + -2075882246 -1093124168 -64807690 -1243108611 + + -2.2883313894271851e-01 2.9109308123588562e-01 + <_> + + 0 -1 307 781346419 639805680 -546181353 -1174989674 + -1555551183 -893031525 -2006836811 -1392561707 + + -3.0891278386116028e-01 2.1537151932716370e-01 + <_> + + 0 -1 134 -26563529 576995058 1442217478 -1427177744 + -68769859 -1241776649 -424779152 -285805586 + + -2.3855516314506531e-01 2.6137462258338928e-01 + <_> + + 0 -1 178 -491860352 1783772447 -1761018371 989361018 + 2037451840 -988741302 2128769468 1865931536 + + -3.3605426549911499e-01 1.9781108200550079e-01 + <_> + + 0 -1 59 -1359078146 -21349537 1081098827 794979703 147593312 + -343136234 308281456 -1121813221 + + -3.4179690480232239e-01 1.8693566322326660e-01 + <_> + + 0 -1 131 -467418588 607934740 -510185553 -839002645 + 2000942967 1793376114 710533396 209909344 + + -3.9927759766578674e-01 1.5319514274597168e-01 + <_> + + 0 -1 6 -251463749 -1087866735 954640701 -1345720208 + 257393053 -1721918337 71237772 -522239782 + + -2.0329028367996216e-01 3.1257370114326477e-01 + + <_> + 36 + -1.3515049219131470e+00 + + <_> + + 0 -1 121 -583157832 -41345124 -1667477754 -47472728 + -1631649861 -192782657 -1106464817 1060048799 + + -6.6292375326156616e-02 5.3096652030944824e-01 + <_> + + 0 -1 250 -961874181 -589629441 -202714187 -33687726 + 246352127 -1125919869 1090470655 1441756927 + + -2.9468271136283875e-01 2.9257065057754517e-01 + <_> + + 0 -1 284 -219161456 1561959797 -1157910723 -644253203 + -37769852 -1175163461 -358812998 -1146105857 + + -2.2191908955574036e-01 3.5355353355407715e-01 + <_> + + 0 -1 133 -1395773932 -19337 -872592385 -1082417169 + -268501000 -203988001 -1360523750 -1430265925 + + -2.6642906665802002e-01 2.7330449223518372e-01 + <_> + + 0 -1 89 937245647 533051903 22876957 837784063 -113164289 + 1593942211 1207413693 1942338443 + + -3.1208184361457825e-01 2.1690289676189423e-01 + <_> + + 0 -1 245 -135270614 1911454511 -694266878 1894711038 + 1380414469 1078062543 -200939772 1616172018 + + -3.7340530753135681e-01 2.0424529910087585e-01 + <_> + + 0 -1 79 -673199910 2132653981 -1105191310 -1622098985 + -279161640 1874615084 2066898922 -82575381 + + -2.7581161260604858e-01 2.3679631948471069e-01 + <_> + + 0 -1 108 -88609193 -764250339 -21964208 1785903000 + -705804525 -281542881 -17301633 -29425689 + + -2.1142585575580597e-01 3.1125506758689880e-01 + <_> + + 0 -1 287 2117156824 2142892795 -1715733421 -1118208017 + 1981329130 -1132205343 -531030662 218086646 + + -3.1311789155006409e-01 2.2028388082981110e-01 + <_> + + 0 -1 217 657173799 1208409516 -304231172 -319884740 + 829234695 822389124 -1816709292 -725510 + + -3.4273931384086609e-01 1.9222305715084076e-01 + <_> + + 0 -1 270 -102301694 -135807070 -1880672401 -253298777 + -354657254 -100668629 2011055773 -155453461 + + -2.4226696789264679e-01 2.7088710665702820e-01 + <_> + + 0 -1 191 215240020 -1148310119 -707214049 -1112003969 + 1860719544 -6638593 -4317491 -1414921888 + + -3.1184914708137512e-01 2.1366736292839050e-01 + <_> + + 0 -1 18 -873476105 -30229647 -168296643 -1682912767 + 161284371 -1972125919 -12305 -268965957 + + -2.1284404397010803e-01 3.0867013335227966e-01 + <_> + + 0 -1 289 -449986302 74968807 2145360303 20911369 1088274818 + 1642837031 -1026366551 53429507 + + -3.2960832118988037e-01 1.9843052327632904e-01 + <_> + + 0 -1 187 -294473945 1289282231 -69736418 -366809570 + 585961254 -894112782 -352349116 -857431116 + + -3.4131202101707458e-01 1.7822383344173431e-01 + <_> + + 0 -1 117 -260075316 810653599 -307212416 -1090154618 + 1085218542 2014454434 -889360754 840974879 + + -2.8617727756500244e-01 2.1801990270614624e-01 + <_> + + 0 -1 32 683352887 144804986 883838777 -470815534 749351701 + -1376201987 -1007927147 -269498899 + + -2.7213591337203979e-01 2.3029308021068573e-01 + <_> + + 0 -1 160 -221779237 2055449126 1356126973 1739434813 + -69756111 -78052576 -724205593 927834891 + + -2.1148133277893066e-01 2.9901567101478577e-01 + <_> + + 0 -1 139 -327161337 -541288917 -1074706625 2069214763 + 1422886542 -570618263 1425911455 1965665867 + + -1.9790525734424591e-01 3.1719624996185303e-01 + <_> + + 0 -1 12 -286652406 -1499051796 -2055991469 557910223 + 226286607 -307013288 537285247 1340571263 + + -3.5588899254798889e-01 1.8802331387996674e-01 + <_> + + 0 -1 204 -440754172 -1969605175 -11230786 -1369112738 + -164163787 -439228643 -440438364 -855854880 + + -3.3756810426712036e-01 1.8606249988079071e-01 + <_> + + 0 -1 54 -2103276886 1587028506 -1920974049 -382890163 + -50953603 -625169247 -75998374 847320848 + + -3.3854812383651733e-01 1.8501213192939758e-01 + <_> + + 0 -1 149 -912264192 1437763456 -117442116 1477965101 + -109596288 -782313675 -520249859 -174065925 + + -2.3874689638614655e-01 2.6692461967468262e-01 + <_> + + 0 -1 179 -74761 -1193108610 -1627717634 -1141359812 + -1350594860 -1212204947 -1900803076 -68466436 + + -1.8434369564056396e-01 3.4898519515991211e-01 + <_> + + 0 -1 320 -806388957 -1603323478 -319904391 -1889144109 + -1427144299 -1074553867 -1577597820 -822218338 + + -1.9554206728935242e-01 3.1441712379455566e-01 + <_> + + 0 -1 13 -495530405 -1200567737 -562818530 1426283955 + -646798267 -42047966 -283939201 -15210669 + + -2.0684894919395447e-01 3.0842429399490356e-01 + <_> + + 0 -1 227 -204473205 -111677525 1659697788 -168822810 + 164468462 95878471 1418323918 -705698930 + + -1.5447042882442474e-01 4.0702703595161438e-01 + <_> + + 0 -1 122 332207055 1368372207 1371537916 1541155303 + 1377022927 1195687084 -845629564 -191055413 + + -2.6908680796623230e-01 2.3349469900131226e-01 + <_> + + 0 -1 183 2095555624 -1858958714 880848550 -1086881165 + 1278302507 2017585116 -2100032289 83174071 + + -3.3865603804588318e-01 1.8762224912643433e-01 + <_> + + 0 -1 257 -1599264894 1347540775 548331985 566406079 + -490018643 2125284619 -542620802 -507647254 + + -2.4964332580566406e-01 2.5305619835853577e-01 + <_> + + 0 -1 153 -928904029 -73474081 -431055591 -1365072480 + 1082731439 -1163105435 -401696790 -331068832 + + -2.4641251564025879e-01 2.5806349515914917e-01 + <_> + + 0 -1 261 -1551324256 227211248 -139191220 -1912739520 + 1712117749 1864425601 1605297047 232734801 + + -3.6956688761711121e-01 1.7259617149829865e-01 + <_> + + 0 -1 37 2062683840 -1171226870 -634334626 -42988729 + -177907627 1819501884 -1554858149 -81568901 + + -2.8280401229858398e-01 2.3210345208644867e-01 + <_> + + 0 -1 101 -52896752 2073648803 -104703392 -1877326687 + 1482183868 486564792 -1181155586 -1078764545 + + -2.6182973384857178e-01 2.4921841919422150e-01 + <_> + + 0 -1 119 931876834 -1689820513 -175925869 295803187 + 1288847768 -1394638455 -527053926 -1609099725 + + -2.8890526294708252e-01 2.2244787216186523e-01 + <_> + + 0 -1 23 674383927 640705886 -1980567045 775069703 941246324 + -1074502869 821615185 -1439559299 + + -3.7707689404487610e-01 1.7476500570774078e-01 + + <_> + + 0 0 2 2 + <_> + + 0 0 3 4 + <_> + + 0 0 5 3 + <_> + + 0 0 5 4 + <_> + + 0 0 6 3 + <_> + + 0 0 8 1 + <_> + + 0 1 2 3 + <_> + + 0 1 6 4 + <_> + + 0 2 8 5 + <_> + + 0 7 6 2 + <_> + + 0 9 2 2 + <_> + + 0 9 3 1 + <_> + + 0 9 5 3 + <_> + + 0 14 3 3 + <_> + + 0 15 2 2 + <_> + + 0 16 1 2 + <_> + + 0 17 2 2 + <_> + + 1 0 2 4 + <_> + + 1 0 5 3 + <_> + + 1 0 7 1 + <_> + + 1 6 2 1 + <_> + + 1 9 1 1 + <_> + + 1 9 2 2 + <_> + + 1 15 1 2 + <_> + + 1 16 2 2 + <_> + + 2 0 2 2 + <_> + + 2 0 2 3 + <_> + + 2 0 3 4 + <_> + + 2 1 3 7 + <_> + + 2 4 1 1 + <_> + + 2 4 5 2 + <_> + + 2 4 5 4 + <_> + + 2 5 1 1 + <_> + + 2 6 2 2 + <_> + + 2 7 1 1 + <_> + + 2 7 2 1 + <_> + + 2 8 3 3 + <_> + + 2 9 1 1 + <_> + + 2 10 1 1 + <_> + + 2 10 2 1 + <_> + + 2 15 1 2 + <_> + + 2 19 2 1 + <_> + + 3 0 4 3 + <_> + + 3 0 6 6 + <_> + + 3 0 7 1 + <_> + + 3 2 4 2 + <_> + + 3 2 6 1 + <_> + + 3 4 2 2 + <_> + + 3 5 1 1 + <_> + + 3 6 1 1 + <_> + + 3 6 2 1 + <_> + + 3 6 2 3 + <_> + + 3 6 3 3 + <_> + + 3 6 6 1 + <_> + + 3 7 2 1 + <_> + + 3 7 2 2 + <_> + + 3 8 1 1 + <_> + + 3 8 6 1 + <_> + + 3 9 1 1 + <_> + + 3 9 1 2 + <_> + + 3 10 1 1 + <_> + + 3 10 1 2 + <_> + + 3 10 2 1 + <_> + + 3 11 1 1 + <_> + + 3 11 1 3 + <_> + + 3 13 3 3 + <_> + + 4 0 4 2 + <_> + + 4 0 6 7 + <_> + + 4 1 1 1 + <_> + + 4 1 4 3 + <_> + + 4 4 2 1 + <_> + + 4 6 1 1 + <_> + + 4 6 5 1 + <_> + + 4 6 5 4 + <_> + + 4 7 1 1 + <_> + + 4 7 2 2 + <_> + + 4 7 5 1 + <_> + + 4 8 1 1 + <_> + + 4 8 5 4 + <_> + + 4 9 1 1 + <_> + + 4 9 2 1 + <_> + + 4 9 3 5 + <_> + + 4 9 5 1 + <_> + + 4 10 1 1 + <_> + + 4 10 5 1 + <_> + + 4 12 1 2 + <_> + + 4 14 3 3 + <_> + + 4 15 1 1 + <_> + + 4 18 2 1 + <_> + + 5 2 5 3 + <_> + + 5 3 4 4 + <_> + + 5 6 1 1 + <_> + + 5 6 4 1 + <_> + + 5 7 1 1 + <_> + + 5 7 1 2 + <_> + + 5 7 2 2 + <_> + + 5 8 1 1 + <_> + + 5 8 3 4 + <_> + + 5 8 3 5 + <_> + + 5 8 5 1 + <_> + + 5 8 5 3 + <_> + + 5 9 1 1 + <_> + + 5 9 5 1 + <_> + + 5 10 1 1 + <_> + + 5 10 2 1 + <_> + + 5 10 5 1 + <_> + + 5 11 1 1 + <_> + + 5 13 1 3 + <_> + + 5 16 1 1 + <_> + + 5 18 1 2 + <_> + + 6 0 6 5 + <_> + + 6 1 1 2 + <_> + + 6 3 1 1 + <_> + + 6 3 6 3 + <_> + + 6 4 1 1 + <_> + + 6 5 1 1 + <_> + + 6 5 1 2 + <_> + + 6 6 2 2 + <_> + + 6 6 2 4 + <_> + + 6 6 3 3 + <_> + + 6 7 1 1 + <_> + + 6 7 1 2 + <_> + + 6 7 4 1 + <_> + + 6 7 4 4 + <_> + + 6 7 6 1 + <_> + + 6 8 1 4 + <_> + + 6 8 2 2 + <_> + + 6 9 1 1 + <_> + + 6 9 2 1 + <_> + + 6 9 2 2 + <_> + + 6 9 5 1 + <_> + + 6 9 6 2 + <_> + + 6 10 1 1 + <_> + + 6 11 1 1 + <_> + + 6 13 1 1 + <_> + + 6 13 2 1 + <_> + + 6 18 1 2 + <_> + + 6 20 1 1 + <_> + + 7 0 3 1 + <_> + + 7 2 1 3 + <_> + + 7 3 4 5 + <_> + + 7 5 1 1 + <_> + + 7 5 2 1 + <_> + + 7 6 1 1 + <_> + + 7 7 1 2 + <_> + + 7 7 2 4 + <_> + + 7 8 1 1 + <_> + + 7 8 1 2 + <_> + + 7 8 2 4 + <_> + + 7 9 1 1 + <_> + + 7 16 1 1 + <_> + + 7 21 1 1 + <_> + + 7 21 2 1 + <_> + + 8 0 2 1 + <_> + + 8 0 3 1 + <_> + + 8 0 5 3 + <_> + + 8 3 1 1 + <_> + + 8 4 1 1 + <_> + + 8 5 1 1 + <_> + + 8 5 1 2 + <_> + + 8 7 3 4 + <_> + + 8 8 1 1 + <_> + + 8 9 1 1 + <_> + + 8 9 3 5 + <_> + + 8 11 1 1 + <_> + + 8 14 1 1 + <_> + + 8 19 1 1 + <_> + + 8 20 1 1 + <_> + + 8 21 1 1 + <_> + + 9 0 2 3 + <_> + + 9 1 2 1 + <_> + + 9 5 2 1 + <_> + + 9 5 2 3 + <_> + + 9 5 4 1 + <_> + + 9 7 1 1 + <_> + + 9 9 1 1 + <_> + + 9 11 1 1 + <_> + + 9 12 2 4 + <_> + + 9 15 1 1 + <_> + + 9 17 1 1 + <_> + + 9 18 1 2 + <_> + + 9 20 1 1 + <_> + + 10 0 2 2 + <_> + + 10 6 3 3 + <_> + + 10 7 1 1 + <_> + + 10 8 1 1 + <_> + + 10 9 1 1 + <_> + + 10 11 1 1 + <_> + + 10 12 1 1 + <_> + + 10 15 1 1 + <_> + + 10 20 1 1 + <_> + + 10 21 1 1 + <_> + + 11 0 4 4 + <_> + + 11 1 4 4 + <_> + + 11 3 1 1 + <_> + + 11 4 3 1 + <_> + + 11 6 3 6 + <_> + + 11 7 1 1 + <_> + + 11 8 1 1 + <_> + + 11 9 1 1 + <_> + + 11 9 2 3 + <_> + + 11 10 1 1 + <_> + + 11 11 1 1 + <_> + + 11 12 2 3 + <_> + + 11 13 1 1 + <_> + + 11 15 3 1 + <_> + + 11 20 1 1 + <_> + + 11 21 1 1 + <_> + + 12 3 1 1 + <_> + + 12 5 1 1 + <_> + + 12 5 2 3 + <_> + + 12 5 3 3 + <_> + + 12 6 1 1 + <_> + + 12 7 2 4 + <_> + + 12 8 1 1 + <_> + + 12 8 2 2 + <_> + + 12 8 2 3 + <_> + + 12 9 1 1 + <_> + + 12 10 2 3 + <_> + + 12 11 1 1 + <_> + + 12 16 1 1 + <_> + + 12 17 1 1 + <_> + + 12 18 1 1 + <_> + + 12 18 1 2 + <_> + + 12 20 1 1 + <_> + + 12 21 1 1 + <_> + + 13 0 3 3 + <_> + + 13 3 1 1 + <_> + + 13 4 1 1 + <_> + + 13 5 1 1 + <_> + + 13 6 2 3 + <_> + + 13 7 3 2 + <_> + + 13 8 1 1 + <_> + + 13 9 1 1 + <_> + + 13 10 1 1 + <_> + + 13 10 2 1 + <_> + + 13 11 1 1 + <_> + + 13 13 1 1 + <_> + + 13 19 1 1 + <_> + + 13 20 1 1 + <_> + + 13 21 1 1 + <_> + + 14 0 3 4 + <_> + + 14 3 1 2 + <_> + + 14 3 2 1 + <_> + + 14 4 1 1 + <_> + + 14 5 1 1 + <_> + + 14 6 2 3 + <_> + + 14 7 1 3 + <_> + + 14 7 2 2 + <_> + + 14 8 1 1 + <_> + + 14 8 1 2 + <_> + + 14 9 1 1 + <_> + + 14 9 2 1 + <_> + + 14 13 1 1 + <_> + + 14 21 1 1 + <_> + + 15 0 3 4 + <_> + + 15 1 1 2 + <_> + + 15 2 1 2 + <_> + + 15 5 1 1 + <_> + + 15 6 2 1 + <_> + + 15 6 2 2 + <_> + + 15 7 1 1 + <_> + + 15 7 1 2 + <_> + + 15 7 2 2 + <_> + + 15 8 1 1 + <_> + + 15 9 1 1 + <_> + + 15 9 1 5 + <_> + + 15 9 2 1 + <_> + + 15 15 3 3 + <_> + + 15 17 1 1 + <_> + + 16 4 1 1 + <_> + + 16 6 1 1 + <_> + + 16 7 1 1 + <_> + + 16 7 1 2 + <_> + + 16 7 2 1 + <_> + + 16 7 2 2 + <_> + + 16 8 1 1 + <_> + + 16 10 1 1 + <_> + + 16 10 2 1 + <_> + + 16 17 1 1 + <_> + + 16 17 1 2 + <_> + + 16 18 1 1 + <_> + + 17 4 2 2 + <_> + + 17 5 1 1 + <_> + + 17 6 2 1 + <_> + + 17 6 2 2 + <_> + + 17 7 1 1 + <_> + + 17 7 1 2 + <_> + + 17 8 1 1 + <_> + + 17 8 2 1 + <_> + + 17 9 1 1 + <_> + + 17 10 1 1 + <_> + + 17 10 2 2 + <_> + + 17 11 1 1 + <_> + + 17 12 1 2 + <_> + + 17 13 1 2 + <_> + + 17 13 1 3 + <_> + + 17 21 2 1 + <_> + + 18 0 2 2 + <_> + + 18 4 1 2 + <_> + + 18 6 1 1 + <_> + + 18 8 2 2 + <_> + + 18 9 1 1 + <_> + + 18 9 1 2 + <_> + + 18 9 1 3 + <_> + + 18 10 1 1 + <_> + + 18 11 1 2 + <_> + + 18 12 1 1 + <_> + + 18 13 1 2 + <_> + + 18 17 2 2 + <_> + + 18 18 1 2 + <_> + + 18 19 2 1 + <_> + + 19 0 1 1 + <_> + + 19 6 1 1 + <_> + + 19 9 1 1 + <_> + + 19 9 1 2 + <_> + + 19 10 1 4 + <_> + + 19 12 1 2 + <_> + + 20 10 1 1 + <_> + + 20 15 1 2 + <_> + + 21 10 1 1 + <_> + + 21 14 1 2 + <_> + + 21 15 1 3 + diff --git a/include/face_detection/lbpCascades/lbpcascade_frontalface.xml b/include/face_detection/lbpCascades/lbpcascade_frontalface.xml new file mode 100644 index 0000000..59850cb --- /dev/null +++ b/include/face_detection/lbpCascades/lbpcascade_frontalface.xml @@ -0,0 +1,1505 @@ + + + + + BOOST + LBP + 24 + 24 + + GAB + 0.9950000047683716 + 0.5000000000000000 + 0.9500000000000000 + 1 + 100 + + 256 + 20 + + + <_> + 3 + -0.7520892024040222 + + + <_> + + 0 -1 46 -67130709 -21569 -1426120013 -1275125205 -21585 + -16385 587145899 -24005 + + -0.6543210148811340 0.8888888955116272 + + <_> + + 0 -1 13 -163512766 -769593758 -10027009 -262145 -514457854 + -193593353 -524289 -1 + + -0.7739216089248657 0.7278633713722229 + + <_> + + 0 -1 2 -363936790 -893203669 -1337948010 -136907894 + 1088782736 -134217726 -741544961 -1590337 + + -0.7068563103675842 0.6761534214019775 + + <_> + 4 + -0.4872078299522400 + + + <_> + + 0 -1 84 2147483647 1946124287 -536870913 2147450879 + 738132490 1061101567 243204619 2147446655 + + -0.8083735704421997 0.7685696482658386 + + <_> + + 0 -1 21 2147483647 263176079 1879048191 254749487 1879048191 + -134252545 -268435457 801111999 + + -0.7698410153388977 0.6592915654182434 + + <_> + + 0 -1 106 -98110272 1610939566 -285484400 -850010381 + -189334372 -1671954433 -571026695 -262145 + + -0.7506558895111084 0.5444605946540833 + + <_> + + 0 -1 48 -798690576 -131075 1095771153 -237144073 -65569 -1 + -216727745 -69206049 + + -0.7775990366935730 0.5465461611747742 + + <_> + 4 + -1.1592328548431396 + + + <_> + + 0 -1 47 -21585 -20549 -100818262 -738254174 -20561 -36865 + -151016790 -134238549 + + -0.5601882934570313 0.7743113040924072 + + <_> + + 0 -1 12 -286003217 183435247 -268994614 -421330945 + -402686081 1090387966 -286785545 -402653185 + + -0.6124526262283325 0.6978127956390381 + + <_> + + 0 -1 26 -50347012 970882927 -50463492 -1253377 -134218251 + -50364513 -33619992 -172490753 + + -0.6114496588706970 0.6537628173828125 + + <_> + + 0 -1 8 -273 -135266321 1877977738 -2088243418 -134217987 + 2146926575 -18910642 1095231247 + + -0.6854077577590942 0.5403239130973816 + + <_> + 5 + -0.7562355995178223 + + + <_> + + 0 -1 96 -1273 1870659519 -20971602 -67633153 -134250731 + 2004875127 -250 -150995969 + + -0.4051094949245453 0.7584033608436585 + + <_> + + 0 -1 33 -868162224 -76810262 -4262145 -257 1465211989 + -268959873 -2656269 -524289 + + -0.7388162612915039 0.5340843200683594 + + <_> + + 0 -1 57 -12817 -49 -541103378 -152950 -38993 -20481 -1153876 + -72478976 + + -0.6582943797111511 0.5339496731758118 + + <_> + + 0 -1 125 -269484161 -452984961 -319816180 -1594032130 -2111 + -990117891 -488975296 -520947741 + + -0.5981323719024658 0.5323504805564880 + + <_> + + 0 -1 53 557787431 670265215 -1342193665 -1075892225 + 1998528318 1056964607 -33570977 -1 + + -0.6498787999153137 0.4913350641727448 + + <_> + 5 + -0.8085358142852783 + + + <_> + + 0 -1 60 -536873708 880195381 -16842788 -20971521 -176687276 + -168427659 -16777260 -33554626 + + -0.5278195738792419 0.6946372389793396 + + <_> + + 0 -1 7 -1 -62981529 -1090591130 805330978 -8388827 -41945787 + -39577 -531118985 + + -0.5206505060195923 0.6329920291900635 + + <_> + + 0 -1 98 -725287348 1347747543 -852489 -16809993 1489881036 + -167903241 -1 -1 + + -0.7516061067581177 0.4232024252414703 + + <_> + + 0 -1 44 -32777 1006582562 -65 935312171 -8388609 -1078198273 + -1 733886267 + + -0.7639313936233521 0.4123568832874298 + + <_> + + 0 -1 24 -85474705 2138828511 -1036436754 817625855 + 1123369029 -58796809 -1013468481 -194513409 + + -0.5123769044876099 0.5791834592819214 + + <_> + 5 + -0.5549971461296082 + + + <_> + + 0 -1 42 -17409 -20481 -268457797 -134239493 -17473 -1 -21829 + -21846 + + -0.3763174116611481 0.7298233509063721 + + <_> + + 0 -1 6 -805310737 -2098262358 -269504725 682502698 + 2147483519 1740574719 -1090519233 -268472385 + + -0.5352765917778015 0.5659480094909668 + + <_> + + 0 -1 61 -67109678 -6145 -8 -87884584 -20481 -1073762305 + -50856216 -16849696 + + -0.5678374171257019 0.4961479902267456 + + <_> + + 0 -1 123 -138428633 1002418167 -1359008245 -1908670465 + -1346685918 910098423 -1359010520 -1346371657 + + -0.5706262588500977 0.4572288393974304 + + <_> + + 0 -1 9 -89138513 -4196353 1256531674 -1330665426 1216308261 + -36190633 33498198 -151796633 + + -0.5344601869583130 0.4672054052352905 + + <_> + 5 + -0.8776460289955139 + + + <_> + + 0 -1 105 1073769576 206601725 -34013449 -33554433 -789514004 + -101384321 -690225153 -264193 + + -0.7700348496437073 0.5943940877914429 + + <_> + + 0 -1 30 -1432340997 -823623681 -49153 -34291724 -269484035 + -1342767105 -1078198273 -1277955 + + -0.5043668746948242 0.6151274442672730 + + <_> + + 0 -1 35 -1067385040 -195758209 -436748425 -134217731 + -50855988 -129 -1 -1 + + -0.6808040738105774 0.4667325913906097 + + <_> + + 0 -1 119 832534325 -34111555 -26050561 -423659521 -268468364 + 2105014143 -2114244 -17367185 + + -0.4927591383457184 0.5401885509490967 + + <_> + + 0 -1 82 -1089439888 -1080524865 2143059967 -1114121 + -1140949004 -3 -2361356 -739516 + + -0.6445107460021973 0.4227822124958038 + + <_> + 6 + -1.1139287948608398 + + + <_> + + 0 -1 52 -1074071553 -1074003969 -1 -1280135430 -5324817 -1 + -335548482 582134442 + + -0.5307556986808777 0.6258179545402527 + + <_> + + 0 -1 99 -706937396 -705364068 -540016724 -570495027 + -570630659 -587857963 -33628164 -35848193 + + -0.5227634310722351 0.5049746036529541 + + <_> + + 0 -1 18 -2035630093 42119158 -268503053 -1671444 261017599 + 1325432815 1954394111 -805306449 + + -0.4983572661876679 0.5106441378593445 + + <_> + + 0 -1 111 -282529488 -1558073088 1426018736 -170526448 + -546832487 -5113037 -34243375 -570427929 + + -0.4990860521793366 0.5060507059097290 + + <_> + + 0 -1 92 1016332500 -606301707 915094269 -1080086049 + -1837027144 -1361600280 2147318747 1067975613 + + -0.5695009231567383 0.4460467398166657 + + <_> + + 0 -1 51 -656420166 -15413034 -141599534 -603435836 + 1505950458 -787556946 -79823438 -1326199134 + + -0.6590405106544495 0.3616424500942230 + + <_> + 7 + -0.8243625760078430 + + + <_> + + 0 -1 28 -901591776 -201916417 -262 -67371009 -143312112 + -524289 -41943178 -1 + + -0.4972776770591736 0.6027074456214905 + + <_> + + 0 -1 112 -4507851 -411340929 -268437513 -67502145 -17350859 + -32901 -71344315 -29377 + + -0.4383158981800079 0.5966237187385559 + + <_> + + 0 -1 69 -75894785 -117379438 -239063587 -12538500 1485072126 + 2076233213 2123118847 801906927 + + -0.6386105418205261 0.3977999985218048 + + <_> + + 0 -1 19 -823480413 786628589 -16876049 -1364262914 242165211 + 1315930109 -696268833 -455082829 + + -0.5512794256210327 0.4282079637050629 + + <_> + + 0 -1 73 -521411968 6746762 -1396236286 -2038436114 + -185612509 57669627 -143132877 -1041235973 + + -0.6418755054473877 0.3549866080284119 + + <_> + + 0 -1 126 -478153869 1076028979 -1645895615 1365298272 + -557859073 -339771473 1442574528 -1058802061 + + -0.4841901361942291 0.4668019413948059 + + <_> + + 0 -1 45 -246350404 -1650402048 -1610612745 -788400696 + 1467604861 -2787397 1476263935 -4481349 + + -0.5855734348297119 0.3879135847091675 + + <_> + 7 + -1.2237116098403931 + + + <_> + + 0 -1 114 -24819 1572863935 -16809993 -67108865 2146778388 + 1433927541 -268608444 -34865205 + + -0.2518476545810700 0.7088654041290283 + + <_> + + 0 -1 97 -1841359 -134271049 -32769 -5767369 -1116675 -2185 + -8231 -33603327 + + -0.4303432404994965 0.5283288359642029 + + <_> + + 0 -1 25 -1359507589 -1360593090 -1073778729 -269553812 + -809512977 1744707583 -41959433 -134758978 + + -0.4259553551673889 0.5440809130668640 + + <_> + + 0 -1 34 729753407 -134270989 -1140907329 -235200777 + 658456383 2147467263 -1140900929 -16385 + + -0.5605589151382446 0.4220733344554901 + + <_> + + 0 -1 134 -310380553 -420675595 -193005472 -353568129 + 1205338070 -990380036 887604324 -420544526 + + -0.5192656517028809 0.4399855434894562 + + <_> + + 0 -1 16 -1427119361 1978920959 -287119734 -487068946 + 114759245 -540578051 -707510259 -671660453 + + -0.5013077259063721 0.4570254683494568 + + <_> + + 0 -1 74 -738463762 -889949281 -328301948 -121832450 + -1142658284 -1863576559 2146417353 -263185 + + -0.4631414115428925 0.4790246188640595 + + <_> + 7 + -0.5544230937957764 + + + <_> + + 0 -1 113 -76228780 -65538 -1 -67174401 -148007 -33 -221796 + -272842924 + + -0.3949716091156006 0.6082032322883606 + + <_> + + 0 -1 110 369147696 -1625232112 2138570036 -1189900 790708019 + -1212613127 799948719 -4456483 + + -0.4855885505676270 0.4785369932651520 + + <_> + + 0 -1 37 784215839 -290015241 536832799 -402984963 + -1342414991 -838864897 -176769 -268456129 + + -0.4620285332202911 0.4989669024944305 + + <_> + + 0 -1 41 -486418688 -171915327 -340294900 -21938 -519766032 + -772751172 -73096060 -585322623 + + -0.6420643329620361 0.3624351918697357 + + <_> + + 0 -1 117 -33554953 -475332625 -1423463824 -2077230421 + -4849669 -2080505925 -219032928 -1071915349 + + -0.4820112884044647 0.4632140696048737 + + <_> + + 0 -1 65 -834130468 -134217476 -1349314083 -1073803559 + -619913764 -1449131844 -1386890321 -1979118423 + + -0.4465552568435669 0.5061788558959961 + + <_> + + 0 -1 56 -285249779 1912569855 -16530 -1731022870 -1161904146 + -1342177297 -268439634 -1464078708 + + -0.5190586447715759 0.4441480338573456 + + <_> + 7 + -0.7161560654640198 + + + <_> + + 0 -1 20 1246232575 1078001186 -10027057 60102 -277348353 + -43646987 -1210581153 1195769615 + + -0.4323809444904327 0.5663768053054810 + + <_> + + 0 -1 15 -778583572 -612921106 -578775890 -4036478 + -1946580497 -1164766570 -1986687009 -12103599 + + -0.4588732719421387 0.4547033011913300 + + <_> + + 0 -1 129 -1073759445 2013231743 -1363169553 -1082459201 + -1414286549 868185983 -1356133589 -1077936257 + + -0.5218553543090820 0.4111092388629913 + + <_> + + 0 -1 102 -84148365 -2093417722 -1204850272 564290299 + -67121221 -1342177350 -1309195902 -776734797 + + -0.4920000731945038 0.4326725304126740 + + <_> + + 0 -1 88 -25694458 67104495 -290216278 -168563037 2083877442 + 1702788383 -144191964 -234882162 + + -0.4494568109512329 0.4448510706424713 + + <_> + + 0 -1 59 -857980836 904682741 -1612267521 232279415 + 1550862252 -574825221 -357380888 -4579409 + + -0.5180826783180237 0.3888972699642181 + + <_> + + 0 -1 27 -98549440 -137838400 494928389 -246013630 939541351 + -1196072350 -620603549 2137216273 + + -0.6081240773200989 0.3333222270011902 + + <_> + 8 + -0.6743940711021423 + + + <_> + + 0 -1 29 -150995201 2071191945 -1302151626 536934335 + -1059008937 914128709 1147328110 -268369925 + + -0.1790193915367127 0.6605972051620483 + + <_> + + 0 -1 128 -134509479 1610575703 -1342177289 1861484541 + -1107833788 1577058173 -333558568 -136319041 + + -0.3681024610996246 0.5139749646186829 + + <_> + + 0 -1 70 -1 1060154476 -1090984524 -630918524 -539492875 + 779616255 -839568424 -321 + + -0.3217232525348663 0.6171553134918213 + + <_> + + 0 -1 4 -269562385 -285029906 -791084350 -17923776 235286671 + 1275504943 1344390399 -966276889 + + -0.4373284578323364 0.4358185231685638 + + <_> + + 0 -1 76 17825984 -747628419 595427229 1474759671 575672208 + -1684005538 872217086 -1155858277 + + -0.4404836893081665 0.4601220190525055 + + <_> + + 0 -1 124 -336593039 1873735591 -822231622 -355795238 + -470820869 -1997537409 -1057132384 -1015285005 + + -0.4294152259826660 0.4452161788940430 + + <_> + + 0 -1 54 -834212130 -593694721 -322142257 -364892500 + -951029539 -302125121 -1615106053 -79249765 + + -0.3973052501678467 0.4854526817798615 + + <_> + + 0 -1 95 1342144479 2147431935 -33554561 -47873 -855685912 -1 + 1988052447 536827383 + + -0.7054683566093445 0.2697997391223908 + + <_> + 9 + -1.2042298316955566 + + + <_> + + 0 -1 39 1431368960 -183437936 -537002499 -137497097 + 1560590321 -84611081 -2097193 -513 + + -0.5905947685241699 0.5101932883262634 + + <_> + + 0 -1 120 -1645259691 2105491231 2130706431 1458995007 + -8567536 -42483883 -33780003 -21004417 + + -0.4449204802513123 0.4490709304809570 + + <_> + + 0 -1 89 -612381022 -505806938 -362027516 -452985106 + 275854917 1920431639 -12600561 -134221825 + + -0.4693818688392639 0.4061094820499420 + + <_> + + 0 -1 14 -805573153 -161 -554172679 -530519488 -16779441 + 2000682871 -33604275 -150997129 + + -0.3600351214408875 0.5056326985359192 + + <_> + + 0 -1 67 6192 435166195 1467449341 2046691505 -1608493775 + -4755729 -1083162625 -71365637 + + -0.4459891915321350 0.4132415652275085 + + <_> + + 0 -1 86 -41689215 -3281034 1853357967 -420712635 -415924289 + -270209208 -1088293113 -825311232 + + -0.4466069042682648 0.4135067760944367 + + <_> + + 0 -1 80 -117391116 -42203396 2080374461 -188709 -542008165 + -356831940 -1091125345 -1073796897 + + -0.3394956290721893 0.5658645033836365 + + <_> + + 0 -1 75 -276830049 1378714472 -1342181951 757272098 + 1073740607 -282199241 -415761549 170896931 + + -0.5346512198448181 0.3584479391574860 + + <_> + + 0 -1 55 -796075825 -123166849 2113667055 -217530421 + -1107432194 -16385 -806359809 -391188771 + + -0.4379335641860962 0.4123645126819611 + + <_> + 10 + -0.8402050137519836 + + + <_> + + 0 -1 71 -890246622 15525883 -487690486 47116238 -1212319899 + -1291847681 -68159890 -469829921 + + -0.2670986354351044 0.6014143228530884 + + <_> + + 0 -1 31 -1361180685 -1898008841 -1090588811 -285410071 + -1074016265 -840443905 2147221487 -262145 + + -0.4149844348430634 0.4670888185501099 + + <_> + + 0 -1 40 1426190596 1899364271 2142731795 -142607505 + -508232452 -21563393 -41960001 -65 + + -0.4985891580581665 0.3719584941864014 + + <_> + + 0 -1 109 -201337965 10543906 -236498096 -746195597 + 1974565825 -15204415 921907633 -190058309 + + -0.4568729996681213 0.3965812027454376 + + <_> + + 0 -1 130 -595026732 -656401928 -268649235 -571490699 + -440600392 -133131 -358810952 -2004088646 + + -0.4770836830139160 0.3862601518630981 + + <_> + + 0 -1 66 941674740 -1107882114 1332789109 -67691015 + -1360463693 -1556612430 -609108546 733546933 + + -0.4877715110778809 0.3778986334800720 + + <_> + + 0 -1 49 -17114945 -240061474 1552871558 -82775604 -932393844 + -1308544889 -532635478 -99042357 + + -0.3721654713153839 0.4994400143623352 + + <_> + + 0 -1 133 -655906006 1405502603 -939205164 1884929228 + -498859222 559417357 -1928559445 -286264385 + + -0.3934195041656494 0.4769641458988190 + + <_> + + 0 -1 0 -335837777 1860677295 -90 -1946186226 931096183 + 251612987 2013265917 -671232197 + + -0.4323300719261169 0.4342164099216461 + + <_> + + 0 -1 103 37769424 -137772680 374692301 2002666345 -536176194 + -1644484728 807009019 1069089930 + + -0.4993278682231903 0.3665378093719482 + + <_> + 9 + -1.1974394321441650 + + + <_> + + 0 -1 43 -5505 2147462911 2143265466 -4511070 -16450 -257 + -201348440 -71333206 + + -0.3310225307941437 0.5624626278877258 + + <_> + + 0 -1 90 -136842268 -499330741 2015250980 -87107126 + -641665744 -788524639 -1147864792 -134892563 + + -0.5266560912132263 0.3704403042793274 + + <_> + + 0 -1 104 -146800880 -1780368555 2111170033 -140904684 + -16777551 -1946681885 -1646463595 -839131947 + + -0.4171888828277588 0.4540435671806335 + + <_> + + 0 -1 85 -832054034 -981663763 -301990281 -578814081 + -932319000 -1997406723 -33555201 -69206017 + + -0.4556705355644226 0.3704262077808380 + + <_> + + 0 -1 24 -118492417 -1209026825 1119023838 -1334313353 + 1112948738 -297319313 1378887291 -139469193 + + -0.4182529747486115 0.4267231225967407 + + <_> + + 0 -1 78 -1714382628 -2353704 -112094959 -549613092 + -1567058760 -1718550464 -342315012 -1074972227 + + -0.3625369668006897 0.4684656262397766 + + <_> + + 0 -1 5 -85219702 316836394 -33279 1904970288 2117267315 + -260901769 -621461759 -88607770 + + -0.4742925167083740 0.3689507246017456 + + <_> + + 0 -1 11 -294654041 -353603585 -1641159686 -50331921 + -2080899877 1145569279 -143132713 -152044037 + + -0.3666271567344666 0.4580127298831940 + + <_> + + 0 -1 32 1887453658 -638545712 -1877976819 -34320972 + -1071067983 -661345416 -583338277 1060190561 + + -0.4567637443542481 0.3894708156585693 + + <_> + 9 + -0.5733128190040588 + + + <_> + + 0 -1 122 -994063296 1088745462 -318837116 -319881377 + 1102566613 1165490103 -121679694 -134744129 + + -0.4055117964744568 0.5487945079803467 + + <_> + + 0 -1 68 -285233233 -538992907 1811935199 -369234005 -529 + -20593 -20505 -1561401854 + + -0.3787897229194641 0.4532003402709961 + + <_> + + 0 -1 58 -1335245632 1968917183 1940861695 536816369 + -1226071367 -570908176 457026619 1000020667 + + -0.4258328974246979 0.4202791750431061 + + <_> + + 0 -1 94 -1360318719 -1979797897 -50435249 -18646473 + -608879292 -805306691 -269304244 -17840167 + + -0.4561023116111755 0.4002747833728790 + + <_> + + 0 -1 87 2062765935 -16449 -1275080721 -16406 45764335 + -1090552065 -772846337 -570464322 + + -0.4314672648906708 0.4086346626281738 + + <_> + + 0 -1 127 -536896021 1080817663 -738234288 -965478709 + -2082767969 1290855887 1993822934 -990381609 + + -0.4174543321132660 0.4249868988990784 + + <_> + + 0 -1 3 -818943025 168730891 -293610428 -79249354 669224671 + 621166734 1086506807 1473768907 + + -0.4321364760398865 0.4090838730335236 + + <_> + + 0 -1 79 -68895696 -67107736 -1414315879 -841676168 + -619843344 -1180610531 -1081990469 1043203389 + + -0.5018386244773865 0.3702533841133118 + + <_> + + 0 -1 116 -54002134 -543485719 -2124882422 -1437445858 + -115617074 -1195787391 -1096024366 -2140472445 + + -0.5037505626678467 0.3564981222152710 + + <_> + 9 + -0.4892596900463104 + + + <_> + + 0 -1 132 -67113211 2003808111 1862135111 846461923 -2752 + 2002237273 -273154752 1937223539 + + -0.2448196411132813 0.5689709186553955 + + <_> + + 0 -1 62 1179423888 -78064940 -611839555 -539167899 + -1289358360 -1650810108 -892540499 -1432827684 + + -0.4633283913135529 0.3587929606437683 + + <_> + + 0 -1 23 -285212705 -78450761 -656212031 -264050110 -27787425 + -1334349961 -547662981 -135796924 + + -0.3731099069118500 0.4290455579757690 + + <_> + + 0 -1 77 341863476 403702016 -550588417 1600194541 + -1080690735 951127993 -1388580949 -1153717473 + + -0.3658909499645233 0.4556473195552826 + + <_> + + 0 -1 22 -586880702 -204831512 -100644596 -39319550 + -1191150794 705692513 457203315 -75806957 + + -0.5214384198188782 0.3221037387847900 + + <_> + + 0 -1 72 -416546870 545911370 -673716192 -775559454 + -264113598 139424 -183369982 -204474641 + + -0.4289036989212036 0.4004956185817719 + + <_> + + 0 -1 50 -1026505020 -589692154 -1740499937 -1563770497 + 1348491006 -60710713 -1109853489 -633909413 + + -0.4621542394161224 0.3832748532295227 + + <_> + + 0 -1 108 -1448872304 -477895040 -1778390608 -772418127 + -1789923416 -1612057181 -805306693 -1415842113 + + -0.3711548447608948 0.4612701535224915 + + <_> + + 0 -1 92 407905424 -582449988 52654751 -1294472 -285103725 + -74633006 1871559083 1057955850 + + -0.5180652141571045 0.3205870389938355 + + <_> + 10 + -0.5911940932273865 + + + <_> + + 0 -1 81 4112 -1259563825 -846671428 -100902460 1838164148 + -74153752 -90653988 -1074263896 + + -0.2592592537403107 0.5873016119003296 + + <_> + + 0 -1 1 -285216785 -823206977 -1085589 -1081346 1207959293 + 1157103471 2097133565 -2097169 + + -0.3801195919513702 0.4718827307224274 + + <_> + + 0 -1 121 -12465 -536875169 2147478367 2130706303 -37765492 + -866124467 -318782328 -1392509185 + + -0.3509117066860199 0.5094807147979736 + + <_> + + 0 -1 38 2147449663 -20741 -16794757 1945873146 -16710 -1 + -8406341 -67663041 + + -0.4068757295608521 0.4130136370658875 + + <_> + + 0 -1 17 -155191713 866117231 1651407483 548272812 -479201468 + -447742449 1354229504 -261884429 + + -0.4557141065597534 0.3539792001247406 + + <_> + + 0 -1 100 -225319378 -251682065 -492783986 -792341777 + -1287261695 1393643841 -11274182 -213909521 + + -0.4117803275585175 0.4118592441082001 + + <_> + + 0 -1 63 -382220122 -2002072729 -51404800 -371201558 + -923011069 -2135301457 -2066104743 -1042557441 + + -0.4008397758007050 0.4034757018089294 + + <_> + + 0 -1 101 -627353764 -48295149 1581203952 -436258614 + -105268268 -1435893445 -638126888 -1061107126 + + -0.5694189667701721 0.2964762747287750 + + <_> + + 0 -1 118 -8399181 1058107691 -621022752 -251003468 -12582915 + -574619739 -994397789 -1648362021 + + -0.3195341229438782 0.5294018983840942 + + <_> + + 0 -1 92 -348343812 -1078389516 1717960437 364735981 + -1783841602 -4883137 -457572354 -1076950384 + + -0.3365339040756226 0.5067458748817444 + + <_> + 10 + -0.7612916231155396 + + + <_> + + 0 -1 10 -1976661318 -287957604 -1659497122 -782068 43591089 + -453637880 1435470000 -1077438561 + + -0.4204545319080353 0.5165745615959168 + + <_> + + 0 -1 131 -67110925 14874979 -142633168 -1338923040 + 2046713291 -2067933195 1473503712 -789579837 + + -0.3762553930282593 0.4075302779674530 + + <_> + + 0 -1 83 -272814301 -1577073 -1118685 -305156120 -1052289 + -1073813756 -538971154 -355523038 + + -0.4253497421741486 0.3728055357933044 + + <_> + + 0 -1 135 -2233 -214486242 -538514758 573747007 -159390971 + 1994225489 -973738098 -203424005 + + -0.3601998090744019 0.4563256204128265 + + <_> + + 0 -1 115 -261031688 -1330369299 -641860609 1029570301 + -1306461192 -1196149518 -1529767778 683139823 + + -0.4034293889999390 0.4160816967487335 + + <_> + + 0 -1 64 -572993608 -34042628 -417865 -111109 -1433365268 + -19869715 -1920939864 -1279457063 + + -0.3620899617671967 0.4594142735004425 + + <_> + + 0 -1 36 -626275097 -615256993 1651946018 805366393 + 2016559730 -430780849 -799868165 -16580645 + + -0.3903816640377045 0.4381459355354309 + + <_> + + 0 -1 93 1354797300 -1090957603 1976418270 -1342502178 + -1851873892 -1194637077 -1153521668 -1108399474 + + -0.3591445386409760 0.4624078869819641 + + <_> + + 0 -1 91 68157712 1211368313 -304759523 1063017136 798797750 + -275513546 648167355 -1145357350 + + -0.4297670423984528 0.4023293554782867 + + <_> + + 0 -1 107 -546318240 -1628569602 -163577944 -537002306 + -545456389 -1325465645 -380446736 -1058473386 + + -0.5727006793022156 0.2995934784412384 + + <_> + + 0 0 3 5 + <_> + + 0 0 4 2 + <_> + + 0 0 6 3 + <_> + + 0 1 2 3 + <_> + + 0 1 3 3 + <_> + + 0 1 3 7 + <_> + + 0 4 3 3 + <_> + + 0 11 3 4 + <_> + + 0 12 8 4 + <_> + + 0 14 4 3 + <_> + + 1 0 5 3 + <_> + + 1 1 2 2 + <_> + + 1 3 3 1 + <_> + + 1 7 4 4 + <_> + + 1 12 2 2 + <_> + + 1 13 4 1 + <_> + + 1 14 4 3 + <_> + + 1 17 3 2 + <_> + + 2 0 2 3 + <_> + + 2 1 2 2 + <_> + + 2 2 4 6 + <_> + + 2 3 4 4 + <_> + + 2 7 2 1 + <_> + + 2 11 2 3 + <_> + + 2 17 3 2 + <_> + + 3 0 2 2 + <_> + + 3 1 7 3 + <_> + + 3 7 2 1 + <_> + + 3 7 2 4 + <_> + + 3 18 2 2 + <_> + + 4 0 2 3 + <_> + + 4 3 2 1 + <_> + + 4 6 2 1 + <_> + + 4 6 2 5 + <_> + + 4 7 5 2 + <_> + + 4 8 4 3 + <_> + + 4 18 2 2 + <_> + + 5 0 2 2 + <_> + + 5 3 4 4 + <_> + + 5 6 2 5 + <_> + + 5 9 2 2 + <_> + + 5 10 2 2 + <_> + + 6 3 4 4 + <_> + + 6 4 4 3 + <_> + + 6 5 2 3 + <_> + + 6 5 2 5 + <_> + + 6 5 4 3 + <_> + + 6 6 4 2 + <_> + + 6 6 4 4 + <_> + + 6 18 1 2 + <_> + + 6 21 2 1 + <_> + + 7 0 3 7 + <_> + + 7 4 2 3 + <_> + + 7 9 5 1 + <_> + + 7 21 2 1 + <_> + + 8 0 1 4 + <_> + + 8 5 2 2 + <_> + + 8 5 3 2 + <_> + + 8 17 3 1 + <_> + + 8 18 1 2 + <_> + + 9 0 5 3 + <_> + + 9 2 2 6 + <_> + + 9 5 1 1 + <_> + + 9 11 1 1 + <_> + + 9 16 1 1 + <_> + + 9 16 2 1 + <_> + + 9 17 1 1 + <_> + + 9 18 1 1 + <_> + + 10 5 1 2 + <_> + + 10 5 3 3 + <_> + + 10 7 1 5 + <_> + + 10 8 1 1 + <_> + + 10 9 1 1 + <_> + + 10 10 1 1 + <_> + + 10 10 1 2 + <_> + + 10 14 3 3 + <_> + + 10 15 1 1 + <_> + + 10 15 2 1 + <_> + + 10 16 1 1 + <_> + + 10 16 2 1 + <_> + + 10 17 1 1 + <_> + + 10 21 1 1 + <_> + + 11 3 2 2 + <_> + + 11 5 1 2 + <_> + + 11 5 3 3 + <_> + + 11 5 4 6 + <_> + + 11 6 1 1 + <_> + + 11 7 2 2 + <_> + + 11 8 1 2 + <_> + + 11 10 1 1 + <_> + + 11 10 1 2 + <_> + + 11 15 1 1 + <_> + + 11 17 1 1 + <_> + + 11 18 1 1 + <_> + + 12 0 2 2 + <_> + + 12 1 2 5 + <_> + + 12 2 4 1 + <_> + + 12 3 1 3 + <_> + + 12 7 3 4 + <_> + + 12 10 3 2 + <_> + + 12 11 1 1 + <_> + + 12 12 3 2 + <_> + + 12 14 4 3 + <_> + + 12 17 1 1 + <_> + + 12 21 2 1 + <_> + + 13 6 2 5 + <_> + + 13 7 3 5 + <_> + + 13 11 3 2 + <_> + + 13 17 2 2 + <_> + + 13 17 3 2 + <_> + + 13 18 1 2 + <_> + + 13 18 2 2 + <_> + + 14 0 2 2 + <_> + + 14 1 1 3 + <_> + + 14 2 3 2 + <_> + + 14 7 2 1 + <_> + + 14 13 2 1 + <_> + + 14 13 3 3 + <_> + + 14 17 2 2 + <_> + + 15 0 2 2 + <_> + + 15 0 2 3 + <_> + + 15 4 3 2 + <_> + + 15 4 3 6 + <_> + + 15 6 3 2 + <_> + + 15 11 3 4 + <_> + + 15 13 3 2 + <_> + + 15 17 2 2 + <_> + + 15 17 3 2 + <_> + + 16 1 2 3 + <_> + + 16 3 2 4 + <_> + + 16 6 1 1 + <_> + + 16 16 2 2 + <_> + + 17 1 2 2 + <_> + + 17 1 2 5 + <_> + + 17 12 2 2 + <_> + + 18 0 2 2 + diff --git a/include/face_detection/lbpCascades/lbpcascade_profileface.xml b/include/face_detection/lbpCascades/lbpcascade_profileface.xml new file mode 100755 index 0000000..e7e97d7 --- /dev/null +++ b/include/face_detection/lbpCascades/lbpcascade_profileface.xml @@ -0,0 +1,1275 @@ + + + + + BOOST + LBP + 34 + 20 + + GAB + 9.9500000476837158e-001 + 3.0000001192092896e-001 + 9.4999999999999996e-001 + 1 + 100 + + 256 + 1 + 16 + + + <_> + 4 + -5.9480339288711548e-001 + + <_> + + 0 -1 114 -2360321 -82228595 -771518211 -713436773 + -1060447799 -810385271 -2004135683 -2566104 + + -8.0942183732986450e-001 5.9530025720596313e-001 + <_> + + 0 -1 54 -649134608 -1060077114 1375916272 -719981432 + 1073801352 33024 281198795 -5246465 + + -7.7979278564453125e-001 5.4052764177322388e-001 + <_> + + 0 -1 12 -960266913 -495857599 -1068498864 -867970987 + 457398579 -1174173695 1749041235 1849162079 + + -8.0028575658798218e-001 5.0435048341751099e-001 + <_> + + 0 -1 120 -1228145793 -807247727 18059735 -138644520 + 998980043 -41250583 673112549 -1930366540 + + -7.7902388572692871e-001 4.9006074666976929e-001 + + <_> + 6 + -5.4879629611968994e-001 + + <_> + + 0 -1 6 -254346881 -746143606 -1039596583 1963430479 + -263790449 -1073545213 698505999 -1349357 + + -6.6315788030624390e-001 6.0000002384185791e-001 + <_> + + 0 -1 112 -134225985 -684228389 -988213089 -684716007 + -1966960899 -896630615 152815840 -864497420 + + -7.0195454359054565e-001 5.8843690156936646e-001 + <_> + + 0 -1 53 -35923461 520818827 -1862167847 856916291 68141197 + 2072530978 304306417 526079163 + + -6.4593964815139771e-001 5.7274609804153442e-001 + <_> + + 0 -1 101 -2097665 -1781432163 588321018 -1677405808 + -1968469982 -1450147831 -1467632684 -593693808 + + -7.2959578037261963e-001 4.9470889568328857e-001 + <_> + + 0 -1 79 -205847273 -1088716541 285266431 1393693056 + 293931101 -1634205688 -452263692 -111136684 + + -7.0331865549087524e-001 5.2564400434494019e-001 + <_> + + 0 -1 126 579801457 -670613495 -1065269989 -117095565 + -1295163359 -779534335 -1744220101 -1355860 + + -7.5121974945068359e-001 4.5217981934547424e-001 + + <_> + 4 + -4.3886357545852661e-001 + + <_> + + 0 -1 20 -346563793 1217040543 -1324639677 206303367 + -260894653 1165249072 1359168335 1652518863 + + -8.3054625988006592e-001 5.5417186021804810e-001 + <_> + + 0 -1 69 -925898078 -917290147 -2147368790 -1995968378 + 1203961890 1765910571 789128481 -4201473 + + -7.5220447778701782e-001 6.1290657520294189e-001 + <_> + + 0 -1 7 -425790473 -368916470 -1065172848 -1877712894 + -1067360254 -847191997 1342400518 -680037517 + + -7.8469508886337280e-001 5.9731280803680420e-001 + <_> + + 0 -1 5 -260315918 -1567751150 -805289977 1721229843 + 1644296976 1954742530 824530213 -8392601 + + -7.3686408996582031e-001 5.6347119808197021e-001 + + <_> + 6 + -4.6629825234413147e-001 + + <_> + + 0 -1 111 -67634177 -72175593 -246181185 -144772036 + -1465917455 -1426934837 -345249307 -539041852 + + -7.1692305803298950e-001 5.5034482479095459e-001 + <_> + + 0 -1 47 -1048705 -96415158 -1996126927 67301684 -659873481 + 1800863745 -402143413 1647570815 + + -7.6134461164474487e-001 4.7370144724845886e-001 + <_> + + 0 -1 119 1905247351 -1111526689 1426654203 -116427277 + 1731664419 -81052249 1051905317 -1628448513 + + -5.9460461139678955e-001 6.1952447891235352e-001 + <_> + + 0 -1 2 578486263 -2115313530 -788268733 -1122507629 + -343408719 2127242147 -85406399 -37295 + + -6.0801470279693604e-001 5.8719038963317871e-001 + <_> + + 0 -1 127 -1147176065 52139167 21156225 -540503783 -771529299 + -33325024 -671045243 -1913073360 + + -7.4383884668350220e-001 5.1643568277359009e-001 + <_> + + 0 -1 93 -319091633 -58633529 1166906391 1854443149 + 1267403009 -1198817246 1208634960 -35661669 + + -6.8595260381698608e-001 5.5931246280670166e-001 + + <_> + 8 + -6.0948312282562256e-001 + + <_> + + 0 -1 102 -747899393 -543522675 545333467 -34230241 + -1572626245 -17790840 -1182162691 -1078427420 + + -6.0826772451400757e-001 4.6491229534149170e-001 + <_> + + 0 -1 38 -103812609 503024467 -2121908081 722834075 + 1375757518 2022089353 197321677 2077719203 + + -6.2948691844940186e-001 4.8044654726982117e-001 + <_> + + 0 -1 19 -774429826 -607461158 1158791644 -971587409 + -1732167611 2015560010 -1278549257 -159911361 + + -5.9694272279739380e-001 4.7999730706214905e-001 + <_> + + 0 -1 122 735837495 -875325281 152208339 -741020481 + -1471817477 -1165246433 -1450830159 -1696546384 + + -6.4947181940078735e-001 4.2661586403846741e-001 + <_> + + 0 -1 104 -629063145 -49708711 50692231 1973945160 157637120 + 2056259593 1771350547 -78911181 + + -6.2496536970138550e-001 4.4524449110031128e-001 + <_> + + 0 -1 67 -74189973 -803307502 688005268 1600057378 -131870050 + -1600503318 571446250 -386668002 + + -5.5046343803405762e-001 5.6090569496154785e-001 + <_> + + 0 -1 81 586347861 -2071051852 -250078020 -1455374076 + 546287843 1216708619 -1853707673 -35130912 + + -6.3877129554748535e-001 4.7911971807479858e-001 + <_> + + 0 -1 22 -1436568057 1555188001 164315 2084672259 1809869105 + 1132626050 1223430266 -596124761 + + -6.4428490400314331e-001 4.7921949625015259e-001 + + <_> + 8 + -5.4387503862380981e-001 + + <_> + + 0 -1 44 -783680003 -771883143 -302055943 -5898247 -253370375 + -1996628131 1625947386 -2004157446 + + -5.2870607376098633e-001 5.9474670886993408e-001 + <_> + + 0 -1 49 -586034977 -41205679 352424062 -163145456 151126042 + -1171652503 1208036058 -9019322 + + -5.6763833761215210e-001 4.8789894580841064e-001 + <_> + + 0 -1 39 1402589836 1363509256 103583 823365787 -1861443377 + 412131360 539718283 1002160350 + + -5.9899079799652100e-001 4.9562713503837585e-001 + <_> + + 0 -1 113 -783429121 -1559215981 286355953 -794820602 + 461510679 -611662910 -2136237584 -96429424 + + -6.3842493295669556e-001 4.3330931663513184e-001 + <_> + + 0 -1 99 -1365839532 -1291265163 1091604493 965968977 + 147472779 -1466925055 -2013090821 -1410703205 + + -5.8633142709732056e-001 5.0152444839477539e-001 + <_> + + 0 -1 26 1846469631 -788479850 268796195 -754872317 + 1630603451 -896532480 1208092751 -72652777 + + -5.9243172407150269e-001 4.7917708754539490e-001 + <_> + + 0 -1 85 -715395062 -113037167 1342198133 -552594287 + 411123713 11059209 -2012512153 -877809205 + + -6.9079184532165527e-001 4.2610234022140503e-001 + <_> + + 0 -1 100 -526391817 -921022135 -1593630697 671093393 + -2004270453 -1962835840 -1870413655 -1597095644 + + -6.5030521154403687e-001 4.4748127460479736e-001 + + <_> + 8 + -6.3195121288299561e-001 + + <_> + + 0 -1 109 -674761315 -581726065 352407899 -83717423 + -660870145 -1165915966 -326837763 -927182608 + + -7.3185729980468750e-001 3.3258172869682312e-001 + <_> + + 0 -1 97 860755579 -707063662 1361264863 1065505299 + -1022866435 -1776123776 -1865661700 -1615196136 + + -6.1147916316986084e-001 3.7205791473388672e-001 + <_> + + 0 -1 15 -678435969 -106962866 268652561 -826396597 + -802066313 1931092070 1208025439 1211582847 + + -6.8679082393646240e-001 3.6285603046417236e-001 + <_> + + 0 -1 86 -1573074550 -2080337595 299991 110482176 268552379 + -310373944 596185787 -1428952165 + + -6.4654982089996338e-001 4.1456297039985657e-001 + <_> + + 0 -1 30 -72637790 -1258143612 1342937104 -544352374 + -1046875163 -121076606 -786059128 -71702400 + + -5.2772462368011475e-001 4.9787566065788269e-001 + <_> + + 0 -1 89 -683288417 -218031996 33734999 -16115386 -2013259561 + -2008907509 -1978533232 -352342880 + + -5.2718847990036011e-001 5.2839303016662598e-001 + <_> + + 0 -1 10 -268764033 -1078984772 -65537 -281182212 -524291 -1 + -8489090 -4227265 + + -5.0513482093811035e-001 5.8522778749465942e-001 + <_> + + 0 -1 82 -570445845 784662143 -268435661 -1292701712 + -436263043 -1367507075 -671091243 -751108132 + + -5.2438414096832275e-001 5.4709094762802124e-001 + + <_> + 8 + -5.9874147176742554e-001 + + <_> + + 0 -1 27 -721421649 -1001940437 2300046 -720004829 -792686333 + 1908900882 -160055232 -134763633 + + -5.7692307233810425e-001 3.7921348214149475e-001 + <_> + + 0 -1 78 -1764279809 -1755824061 1937871313 -42069793 + -1241158993 -1196293937 -1576828673 -70371296 + + -4.7039109468460083e-001 4.8607903718948364e-001 + <_> + + 0 -1 29 -795875130 432079111 285457049 -620658641 -780072971 + 1158283432 -226254016 1839935243 + + -6.2938809394836426e-001 4.1353255510330200e-001 + <_> + + 0 -1 33 -37236389 1654493543 202129823 1788182787 + -1186162321 1912913933 -122942838 1968176815 + + -5.9031385183334351e-001 4.1488575935363770e-001 + <_> + + 0 -1 88 1903888863 -286828472 -2125248034 -623115882 + -268301806 -894826357 -2046633148 -696873056 + + -6.3875061273574829e-001 4.0209171175956726e-001 + <_> + + 0 -1 123 -87223501 -1873424249 -1878929092 -586710990 + -643825151 -1039040192 -285122488 -264093 + + -5.4196298122406006e-001 4.5856228470802307e-001 + <_> + + 0 -1 52 -780030833 1363755203 -385150929 25502018 1214818435 + -1020786271 -1870036478 1200354241 + + -5.2826374769210815e-001 5.3351372480392456e-001 + <_> + + 0 -1 84 -1724706499 -184429355 620844509 -179010317 + -1610327896 -341801844 -1190328066 1755915264 + + -5.7672232389450073e-001 4.4138705730438232e-001 + + <_> + 9 + -5.4533123970031738e-001 + + <_> + + 0 -1 48 -254347649 -565919658 1079050328 1090502875 + 1895985446 2013437961 -916419445 -53481573 + + -5.8105266094207764e-001 3.3599999547004700e-001 + <_> + + 0 -1 65 2030928895 1438877010 1124143121 258207763 + 1361199276 1527410834 2072519624 1004267991 + + -5.9629368782043457e-001 3.6112698912620544e-001 + <_> + + 0 -1 45 -247204964 -242712316 54544644 892459288 1888023456 + -2138044280 -802615208 13199500 + + -6.5467655658721924e-001 3.0486112833023071e-001 + <_> + + 0 -1 3 -430509345 -1865653973 554091143 -1069121312 + 1091180718 50577994 -1031731181 -211321225 + + -5.8759629726409912e-001 3.9526104927062988e-001 + <_> + + 0 -1 106 -741412064 -255623164 1090945848 -1687760764 + 42428760 -1064762741 -1861683196 -81029101 + + -6.5875691175460815e-001 3.4154877066612244e-001 + <_> + + 0 -1 128 -464010241 762112 285299147 -589082223 1373135017 + -2138955645 1057005712 -526876236 + + -6.5968728065490723e-001 3.3614772558212280e-001 + <_> + + 0 -1 80 -666744719 -635780797 33637339 -887860848 + -1073532217 -108904320 440608996 -1100753973 + + -5.0520354509353638e-001 4.4810971617698669e-001 + <_> + + 0 -1 28 -1580738774 -1506653838 302055688 -721223615 + 1427604224 -1566332144 1078565791 -558431977 + + -5.5560898780822754e-001 4.3426483869552612e-001 + <_> + + 0 -1 103 957796629 538644536 352997725 80838797 453085387 + -1165492198 285346042 1487077737 + + -5.5915868282318115e-001 4.0778505802154541e-001 + + <_> + 9 + -6.7299038171768188e-001 + + <_> + + 0 -1 0 -882973185 -620584737 279035921 -673986422 + -1568464349 -2105466877 1468391879 -38825 + + -5.7544225454330444e-001 3.4235453605651855e-001 + <_> + + 0 -1 90 -1820101795 -1336770299 285245717 -57216724 + -502134548 -1425341984 -1475618680 -1195896480 + + -6.6810834407806396e-001 2.7653357386589050e-001 + <_> + + 0 -1 9 -100197449 -457893579 200991 1964749325 -754875920 + 1897044675 1669843618 -70792821 + + -4.9064287543296814e-001 4.3120625615119934e-001 + <_> + + 0 -1 117 -792114173 -544111547 537001999 2034569362 + -1065213888 1630052634 -1450583484 -532405661 + + -6.4218991994857788e-001 3.6113587021827698e-001 + <_> + + 0 -1 107 -1564241697 -1429683702 -2062974587 -1900539448 + -1040078205 -394262006 -188628336 -390485984 + + -5.9181970357894897e-001 3.5756480693817139e-001 + <_> + + 0 -1 4 1893434787 -1945108258 82458 -318734161 -939347837 + 684196040 1078496869 2133023515 + + -6.1955446004867554e-001 3.4674292802810669e-001 + <_> + + 0 -1 31 -196247204 1964277780 -1810886012 21827851 + -364280891 -1062338560 -536741128 -362562814 + + -5.2849757671356201e-001 4.1380330920219421e-001 + <_> + + 0 -1 61 -1929140897 353472529 -721412674 -1228123782 + -392951233 -1442693096 672800826 -232914898 + + -5.7934975624084473e-001 3.9208874106407166e-001 + <_> + + 0 -1 72 -1004361296 -1069243858 268710018 1393598601 + 213956864 417530145 -912735606 1327495627 + + -7.5585323572158813e-001 2.6728668808937073e-001 + + <_> + 9 + -7.1303337812423706e-001 + + <_> + + 0 -1 23 -557797393 1524138462 277074064 -737259367 + -1878818960 -81600384 -1740109301 -59267505 + + -6.7397260665893555e-001 1.9793814420700073e-001 + <_> + + 0 -1 42 -1222377543 960610456 -2013138684 -989277927 + -1010064731 -802979830 -645806439 -885143219 + + -4.5935314893722534e-001 4.1904711723327637e-001 + <_> + + 0 -1 124 -783292542 -728791016 1342570700 1481418249 + 1258825942 -1580563964 -1178136688 -272306640 + + -6.3012123107910156e-001 2.9463621973991394e-001 + <_> + + 0 -1 46 1369396573 -188563225 22085642 -1005861886 + 2023260232 -1123842045 -2146991925 1245170171 + + -5.2092707157135010e-001 3.9743596315383911e-001 + <_> + + 0 -1 64 1540188400 1976259599 -805025279 864127692 544944 + 1484935304 -2147056504 1002584738 + + -6.5315401554107666e-001 3.1758561730384827e-001 + <_> + + 0 -1 77 -188606981 -1873391210 16842830 -117157654 + -1576842600 -1454767992 -518835576 -1625272280 + + -5.8580338954925537e-001 3.4936144948005676e-001 + <_> + + 0 -1 18 -473497030 -477572088 16842905 -12164860 184698994 + 1350566019 -2143169323 1405313030 + + -6.0962837934494019e-001 3.0044576525688171e-001 + <_> + + 0 -1 92 -528022006 -611028904 1075937757 -577660920 + 1073809492 -1341620207 -1475846395 -162412743 + + -6.6547930240631104e-001 3.1993752717971802e-001 + <_> + + 0 -1 116 -2062347245 35311783 406966429 -640155632 + -1904205761 -2012610494 399245455 -937752211 + + -4.8515367507934570e-001 4.3642494082450867e-001 + + <_> + 10 + -1.1831332445144653e+000 + + <_> + + 0 -1 115 -912525479 -2146793066 247327 -554139184 320582141 + -1442774971 1552517769 -1464330096 + + -7.2892564535140991e-001 1.2876711785793304e-001 + <_> + + 0 -1 41 -182757566 -683667118 268566545 -540408959 + 1547915506 2014497074 1817806103 -549486525 + + -5.6024330854415894e-001 2.8734233975410461e-001 + <_> + + 0 -1 13 -1396013057 -175218480 536903951 -35946104 -92067077 + 956498056 -200474487 1331907188 + + -5.5237007141113281e-001 3.2844060659408569e-001 + <_> + + 0 -1 17 2110443855 1547702666 -1874853670 1083212172 + -2004008413 -498614008 572624451 1179093527 + + -7.2481799125671387e-001 2.6627025008201599e-001 + <_> + + 0 -1 43 -1751428966 -1626324992 -1073540847 -783806124 + -2146909454 -913440767 -2138941303 -558233160 + + -4.4304186105728149e-001 4.1505634784698486e-001 + <_> + + 0 -1 37 -576405461 -1625709950 1627439763 1116373274 + 1622902452 1107834529 975868423 2074176171 + + -5.6509882211685181e-001 3.5433205962181091e-001 + <_> + + 0 -1 118 1171205664 1426522307 49281 563122240 -791985520 + -930869245 -364148081 -590624140 + + -5.6250953674316406e-001 3.3341854810714722e-001 + <_> + + 0 -1 76 1162033968 1180991656 16859165 230787289 -2104786299 + -1819967351 1118240928 -343561865 + + -4.7331553697586060e-001 4.1576251387596130e-001 + <_> + + 0 -1 110 -2147085315 -1228897088 -2146839339 -1751314339 + -531605907 -393183232 1804153563 -1399324416 + + -5.8979070186614990e-001 3.7525305151939392e-001 + <_> + + 0 -1 55 1581887865 999817729 151311688 331546624 -991625824 + -938834941 1837335184 852075394 + + -5.4071021080017090e-001 4.0077716112136841e-001 + + <_> + 10 + -6.4480733871459961e-001 + + <_> + + 0 -1 16 -510660401 -884555766 272896026 -12189566 + -1685363509 -662568805 1073840823 -545105785 + + -5.3361344337463379e-001 2.7807486057281494e-001 + <_> + + 0 -1 48 -557408354 2115155922 -2130669353 1616707591 + 693193240 -1569554175 -1743918878 1983596555 + + -5.3364741802215576e-001 3.1411096453666687e-001 + <_> + + 0 -1 108 -413278733 83935516 536961502 1452278484 + -2004277212 -391683967 -1426466672 -85395040 + + -7.4530494213104248e-001 2.3025059700012207e-001 + <_> + + 0 -1 32 -938623022 1469386887 822151432 421593370 + -1433793568 -1602191360 -527916919 680112651 + + -4.6078306436538696e-001 4.0021440386772156e-001 + <_> + + 0 -1 50 1619785226 -1004367410 1417725137 126732357 + 148062614 -625983352 -712398335 -412918226 + + -4.9818846583366394e-001 3.6678382754325867e-001 + <_> + + 0 -1 24 -1064322531 1351938204 196691 -561840073 -1978859471 + -649944954 -2003664885 -1172094197 + + -4.7309580445289612e-001 4.2868506908416748e-001 + <_> + + 0 -1 96 -1878961904 1360035888 -1073721317 -1051487863 + -431841087 1628112896 -2112640640 -1829440828 + + -6.9250243902206421e-001 2.8783574700355530e-001 + <_> + + 0 -1 62 67496095 391741589 -2146154237 96245592 -893992548 + 982687872 571488264 278906307 + + -6.4613574743270874e-001 3.0145862698554993e-001 + <_> + + 0 -1 73 -415771792 1208487966 339825796 1792117580 + 1128517807 144965669 -536376816 732856538 + + -6.9449120759963989e-001 3.0338683724403381e-001 + <_> + + 0 -1 40 -1991530440 324215457 -2080275930 -1857940798 + 1342685625 721420800 1250592988 1493903457 + + -7.0043331384658813e-001 2.5916099548339844e-001 + + <_> + 10 + -6.0248321294784546e-001 + + <_> + + 0 -1 21 -16537745 2114438797 1409323561 1691064397 + -207434939 822260754 -384857461 2031088579 + + -6.1256545782089233e-001 1.7948718369007111e-001 + <_> + + 0 -1 1 -95427858 67117166 -1308426467 -1962693439 601886855 + 924320187 1661215701 2078945158 + + -6.8756872415542603e-001 2.2317354381084442e-001 + <_> + + 0 -1 121 -1853361185 -619857007 16793601 -184516476 + -1422775873 -488996831 1476610285 -926297672 + + -5.2260422706604004e-001 3.2479336857795715e-001 + <_> + + 0 -1 105 -267171326 1436635177 1937772829 -2092859315 + -769638067 -2122268534 1502103583 -18894227 + + -5.2588832378387451e-001 3.4061828255653381e-001 + <_> + + 0 -1 83 1880187281 -1862250368 303299 960921986 -2002701917 + -1593343958 -334888263 1058018448 + + -6.9037044048309326e-001 2.7262538671493530e-001 + <_> + + 0 -1 34 -2125487365 1347551377 -1861970752 1368654274 + -1064675233 436275211 327448684 2068015115 + + -5.3338903188705444e-001 3.2425448298454285e-001 + <_> + + 0 -1 36 1192659162 235536712 1078002258 428089414 + -2138651204 -1937242101 507742421 1932739127 + + -6.4654779434204102e-001 3.0722403526306152e-001 + <_> + + 0 -1 14 -805047416 -1962622822 -2013265442 2030239751 + 1082134810 1744963592 -1836871485 -249326965 + + -5.7250964641571045e-001 3.1499111652374268e-001 + <_> + + 0 -1 75 -650653297 170234379 -2063527695 448823424 + -2139088862 319586315 -2067685344 -1347692410 + + -5.4618871212005615e-001 3.8171616196632385e-001 + <_> + + 0 -1 56 -168821125 -1107300354 -536871052 -1125515426 + -1795721360 -1672085508 1845358040 -2114327569 + + -4.2669427394866943e-001 5.0532561540603638e-001 + + <_> + 11 + -1.1912760734558105e+000 + + <_> + + 0 -1 11 -1043414305 -1735900650 268517385 -1137929054 + -1048411462 -2011152253 -1957405841 -497557425 + + -5.7042253017425537e-001 2.1933962404727936e-001 + <_> + + 0 -1 71 -233469310 1360073157 376971 626087057 -1180588024 + -1191067261 -1474310132 830601690 + + -5.3927713632583618e-001 2.9026004672050476e-001 + <_> + + 0 -1 35 -1599643389 42074270 -1811918838 -949960625 + 1564707361 289538187 1204527649 -112006873 + + -6.0980087518692017e-001 2.8851604461669922e-001 + <_> + + 0 -1 59 585529126 -1100070936 -1342177537 833961983 + 1306961797 1986559992 -810088568 -1082149201 + + -3.2345715165138245e-001 5.5635309219360352e-001 + <_> + + 0 -1 95 1107806555 2030223765 17039707 -1224163308 + -1073053535 -1291837432 822618633 -121972608 + + -6.5054124593734741e-001 3.1912675499916077e-001 + <_> + + 0 -1 51 -171583461 -1660890605 268504396 453157697 + -1065215606 -1740602879 1824636801 1940062923 + + -4.7275745868682861e-001 4.2362514138221741e-001 + <_> + + 0 -1 87 -799546379 -2097769968 293605405 -21571376 285294733 + 136347650 -930405536 -69420863 + + -5.5549502372741699e-001 3.3842340111732483e-001 + <_> + + 0 -1 60 -594509036 -267114166 35413 -1052598126 545325639 + -1207959408 -1073643381 682827807 + + -5.4805672168731689e-001 3.7224516272544861e-001 + <_> + + 0 -1 63 1513710022 194882313 1109000450 28010496 -601835264 + -645791614 -1041880446 1561822180 + + -5.3384119272232056e-001 3.7635508179664612e-001 + <_> + + 0 -1 125 -754581391 -246595569 -2113336948 -1855323709 + 1090531337 -931133310 950984 -3971805 + + -5.2334308624267578e-001 4.0167775750160217e-001 + <_> + + 0 -1 58 -361268680 662383988 2147483638 -209756289 + -1375932428 -1895890954 -1744855042 -1142215109 + + -3.4343415498733521e-001 6.1590969562530518e-001 + + <_> + 10 + -7.7425497770309448e-001 + + <_> + + 0 -1 66 -716447302 -602037376 1090519043 -150261760 + 342934202 -2034138749 1141152394 -351301493 + + -4.8867926001548767e-001 3.4062498807907104e-001 + <_> + + 0 -1 98 -2071985592 -700120831 1078417460 672719121 + 1082264136 -209075063 -1438988203 -1465205245 + + -7.1539443731307983e-001 2.4058867990970612e-001 + <_> + + 0 -1 74 872558624 331821072 1610649929 -1181384552 + -2130081587 -92209146 -612134248 -1199562344 + + -4.4142067432403564e-001 3.7935256958007813e-001 + <_> + + 0 -1 68 -791554721 -737771072 2425605 740044819 1208549387 + 973897998 1124108962 802102203 + + -4.6558478474617004e-001 4.2193859815597534e-001 + <_> + + 0 -1 8 1893114270 -1013792636 360523 -586362838 -1073151001 + -2146917824 -2104934391 -875596965 + + -5.0676107406616211e-001 3.5864940285682678e-001 + <_> + + 0 -1 91 574816266 -2011773950 1476495634 580227538 + -2146781128 -2147448830 1901535891 -692616573 + + -6.1020326614379883e-001 3.0061775445938110e-001 + <_> + + 0 -1 70 2125429880 2080309246 -285282561 2142961407 + -1259516274 1073741823 754945025 867497448 + + -4.3854746222496033e-001 4.7815895080566406e-001 + <_> + + 0 -1 94 -1727736509 -1979678624 285229334 1115689064 + 537927788 -1207402368 1098914016 -91503488 + + -6.8697202205657959e-001 3.5183742642402649e-001 + <_> + + 0 -1 57 -528465144 -707035113 -1048575869 1372127361 8651416 + -526909310 -1845360374 -1451016182 + + -4.5901125669479370e-001 4.5875525474548340e-001 + <_> + + 0 -1 25 -2076984798 -533130869 -1060954112 1639977472 + 828440586 1792508680 -1693988801 -13285232 + + -4.8493441939353943e-001 4.3403539061546326e-001 + + <_> + + 0 1 1 9 + <_> + + 0 1 4 7 + <_> + + 0 2 2 6 + <_> + + 0 2 2 10 + <_> + + 0 2 3 4 + <_> + + 0 3 3 8 + <_> + + 0 4 1 8 + <_> + + 0 5 2 9 + <_> + + 0 7 1 8 + <_> + + 0 7 5 7 + <_> + + 0 9 1 5 + <_> + + 0 9 2 6 + <_> + + 0 10 3 7 + <_> + + 0 11 1 3 + <_> + + 0 12 2 1 + <_> + + 0 13 3 7 + <_> + + 0 14 1 1 + <_> + + 0 14 3 4 + <_> + + 0 16 1 1 + <_> + + 0 19 3 5 + <_> + + 0 20 3 4 + <_> + + 0 21 3 4 + <_> + + 0 22 2 4 + <_> + + 0 25 3 3 + <_> + + 0 25 4 3 + <_> + + 1 0 5 10 + <_> + + 1 2 1 9 + <_> + + 1 4 4 8 + <_> + + 1 4 5 9 + <_> + + 1 6 3 5 + <_> + + 1 9 2 3 + <_> + + 1 11 2 4 + <_> + + 1 15 3 2 + <_> + + 1 20 3 3 + <_> + + 1 28 2 2 + <_> + + 2 0 2 3 + <_> + + 2 0 3 5 + <_> + + 2 0 4 8 + <_> + + 2 3 4 5 + <_> + + 2 4 5 5 + <_> + + 2 5 2 5 + <_> + + 2 7 5 9 + <_> + + 2 8 1 3 + <_> + + 2 12 1 2 + <_> + + 2 13 3 3 + <_> + + 2 14 2 2 + <_> + + 2 16 3 5 + <_> + + 2 18 3 5 + <_> + + 2 22 2 4 + <_> + + 2 31 3 1 + <_> + + 3 0 2 3 + <_> + + 3 1 3 5 + <_> + + 3 1 3 8 + <_> + + 3 2 3 6 + <_> + + 3 8 4 6 + <_> + + 3 10 2 4 + <_> + + 3 14 2 2 + <_> + + 3 16 1 1 + <_> + + 3 18 1 1 + <_> + + 3 19 1 1 + <_> + + 3 19 1 2 + <_> + + 3 31 2 1 + <_> + + 4 4 4 4 + <_> + + 4 5 2 7 + <_> + + 4 6 2 4 + <_> + + 4 6 3 4 + <_> + + 4 7 2 8 + <_> + + 4 12 3 5 + <_> + + 4 19 2 3 + <_> + + 5 0 5 7 + <_> + + 5 3 4 4 + <_> + + 5 3 5 4 + <_> + + 5 5 2 8 + <_> + + 5 12 4 4 + <_> + + 5 22 1 1 + <_> + + 6 21 3 3 + <_> + + 6 26 2 2 + <_> + + 6 30 1 1 + <_> + + 6 31 1 1 + <_> + + 6 31 2 1 + <_> + + 7 0 2 3 + <_> + + 7 9 3 7 + <_> + + 7 17 1 1 + <_> + + 7 31 1 1 + <_> + + 7 31 2 1 + <_> + + 8 0 4 1 + <_> + + 8 5 2 4 + <_> + + 8 10 3 6 + <_> + + 8 16 2 1 + <_> + + 8 25 3 2 + <_> + + 8 30 1 1 + <_> + + 9 0 1 1 + <_> + + 9 0 3 2 + <_> + + 9 0 3 4 + <_> + + 9 15 2 1 + <_> + + 9 24 3 3 + <_> + + 9 29 1 1 + <_> + + 9 31 1 1 + <_> + + 10 4 2 2 + <_> + + 10 8 1 3 + <_> + + 10 15 1 3 + <_> + + 10 26 2 1 + <_> + + 10 30 1 1 + <_> + + 10 31 3 1 + <_> + + 11 0 3 2 + <_> + + 11 1 3 4 + <_> + + 11 5 3 8 + <_> + + 11 14 1 1 + <_> + + 11 23 2 2 + <_> + + 11 27 2 2 + <_> + + 11 31 1 1 + <_> + + 12 22 2 3 + <_> + + 12 29 1 1 + <_> + + 13 23 2 1 + <_> + + 13 24 1 3 + <_> + + 13 29 1 1 + <_> + + 13 31 2 1 + <_> + + 14 1 2 2 + <_> + + 14 1 2 6 + <_> + + 14 2 2 1 + <_> + + 14 24 2 2 + <_> + + 14 26 2 2 + <_> + + 14 28 1 1 + <_> + + 15 4 1 1 + <_> + + 15 24 1 1 + <_> + + 17 0 1 3 + <_> + + 17 3 1 4 + <_> + + 17 23 1 2 + <_> + + 17 27 1 1 + diff --git a/launch/face_tracking.launch b/launch/face_tracking.launch new file mode 100644 index 0000000..08ef795 --- /dev/null +++ b/launch/face_tracking.launch @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/src/face_detection.cpp b/src/face_detection.cpp index de0454f..1709ee2 100644 --- a/src/face_detection.cpp +++ b/src/face_detection.cpp @@ -48,6 +48,10 @@ #include #include +#include "std_msgs/MultiArrayLayout.h" +#include "std_msgs/MultiArrayDimension.h" +#include "std_msgs/Int32MultiArray.h" + #include #include #include @@ -73,9 +77,11 @@ static const std::string OPENCV_WINDOW = "Image window"; class FaceDetector { ros::NodeHandle nh_; + ros::NodeHandle n; image_transport::ImageTransport it_; image_transport::Subscriber image_sub_; image_transport::Publisher image_pub_; + ros::Publisher faceCoord_pub; // required for the dynamic reconfigure server dynamic_reconfigure::Server srv; @@ -86,7 +92,6 @@ class FaceDetector float scaleValue; int minSize; int cascadeValue; - int imgScaleValue; float imgScale; int histOnOff; int blurFactor; @@ -100,6 +105,7 @@ class FaceDetector int maxSize; float totalTime; int windowOnOff; + int pixelSwitch; string imageInput = "/camera/image_raw"; string imageOutput = "/face_det/image_raw"; @@ -165,7 +171,7 @@ class FaceDetector //#################################################################### //######################## image preprocessing ####################### //#################################################################### - imgScale = 1.0/imgScaleValue; + //imgScale = 1.0/imgScaleValue; gCounter += 1; // change contrast: 0.5 = half ; 2.0 = double @@ -213,7 +219,21 @@ class FaceDetector //print faces on top of image - cv_ptr = drawFaces(cv_ptr); + if(pixelSwitch == 0){ + cv_ptr->image = drawFaces(cv_ptr->image); + } else { + + //blur faces + Mat blurMyFace; + for (i = faces.begin(); i != faces.end(); ++i) { + Rect cropROI((i->x)/imgScale,(i->y)/imgScale,(i->width)/imgScale, (i->height)/imgScale); + blurMyFace = cv_ptr->image(cropROI); + blurMyFace = pixelate(blurMyFace,16); + blurMyFace.copyTo(cv_ptr->image(cropROI)); + } + } + + //Display Section, images will only displayed if option is selected if(debug != 0){ @@ -236,6 +256,30 @@ class FaceDetector } + // ### publishing coordinates ### + std_msgs::Int32MultiArray myMsg; + myMsg.data.clear(); + // publish current fps rate + myMsg.data.push_back(fps); + // publish number of detected faces + myMsg.data.push_back(faces.size()); + // width of the image + myMsg.data.push_back(cv_ptr->image.cols); + // height of the image + myMsg.data.push_back(cv_ptr->image.rows); + //for (i = faces.begin(); i != faces.end(); ++i) { + for ( unsigned i = 0; i < faces.size(); i++) { + myMsg.data.push_back(1); + myMsg.data.push_back(1); + myMsg.data.push_back(faces[i].x); + myMsg.data.push_back(faces[i].y); + myMsg.data.push_back(faces[i].width); + myMsg.data.push_back(faces[i].height); + } + faceCoord_pub.publish(myMsg); + + + // Output modified video stream image_pub_.publish(cv_ptr->toImageMsg()); @@ -261,22 +305,44 @@ class FaceDetector cv::waitKey(3); } + // ######################################### + // #### used for pixelising images ######### + // ######################################### + Mat pixelate(Mat myImage, int pixelizationRate){ + + cv::Mat result = cv::Mat::zeros(myImage.size(), CV_8UC3); + for (int i = 0; i < myImage.rows; i += pixelizationRate) + { + for (int j = 0; j < myImage.cols; j += pixelizationRate) + { + cv::Rect rect = cv::Rect(j, i, pixelizationRate, pixelizationRate) & + cv::Rect(0, 0, myImage.cols, myImage.rows); + + cv::Mat sub_dst(result, rect); + sub_dst.setTo(cv::mean(myImage(rect))); + + } + } + + return result; + } + //#################################################################### //##################### drawFaces #################################### //#################################################################### //takes the detected faces and daws them on top of an image - cv_bridge::CvImagePtr drawFaces(cv_bridge::CvImagePtr myImagePtr) { + cv::Mat drawFaces(cv::Mat myImage) { for (i = faces.begin(); i != faces.end(); ++i) { cv::rectangle( - myImagePtr->image, - cv::Point((i->x)*imgScaleValue, (i->y)*imgScaleValue), - cv::Point((i->x)*imgScaleValue + (i->width)*imgScaleValue, (i->y)*imgScaleValue + (i->height)*imgScaleValue), + myImage, + cv::Point((i->x)/imgScale, (i->y)/imgScale), + cv::Point((i->x)/imgScale + (i->width)/imgScale, (i->y)/imgScale + (i->height)/imgScale), CV_RGB(50, 255 , 50), 2); } - return myImagePtr; + return myImage; } @@ -317,7 +383,7 @@ class FaceDetector printf("The missing cascade file is /include/face_detection/HaarCascades/haarcascade_frontalface_default.xml\n"); exit(0); } - + printf("OpenCV: %s \n", cv::getBuildInformation().c_str()); counter = 0; gFps = 2; @@ -327,7 +393,7 @@ class FaceDetector minSize = 13; maxSize = 250; cascadeValue = 2; - imgScaleValue = 2; + imgScale = 0.5; histOnOff = 0; blurFactor = 0; brightnessFactor = 0; @@ -342,12 +408,15 @@ class FaceDetector myflag = CV_HAAR_DO_CANNY_PRUNING; windowOnOff = 0; totalDetections = 0; + pixelSwitch = 1; + + faceCoord_pub = n.advertise("faceCoord", 1000); //setting up the dynamic reconfigure server f = boost::bind(&FaceDetector::callback, this, _1, _2); srv.setCallback(f); - + //setNumThreads(0); //generate windows if(debug != 0){ @@ -385,14 +454,14 @@ class FaceDetector minSize = config.minSize/scaleValue; maxSize = config.maxSize/scaleValue; cascadeValue = config.cascadeValue; - imgScaleValue = config.imgScaleValue; + imgScale = config.imgScale; histOnOff = config.histOnOff; blurFactor = config.blurFactor; brightnessFactor = config.brightnessFactor; contrastFactor = config.contrastFactor; debug = config.debug; inputSkipp = config.inputSkipp; - + pixelSwitch = config.pixelSwitch; //selecting the correct flag for the diff --git a/src/face_listener.cpp b/src/face_listener.cpp new file mode 100644 index 0000000..36aea88 --- /dev/null +++ b/src/face_listener.cpp @@ -0,0 +1,154 @@ +//########################################################################## +// DO NOT MODIFY +// +//This project was created within an academic research setting, and thus should +//be considered as EXPERIMENTAL code. There may be bugs and deficiencies in the +//code, so please adjust expectations accordingly. With that said, we are +//intrinsically motivated to ensure its correctness (and often its performance). +//Please use the corresponding web repository tool (e.g. github, bitbucket, etc) +//to file bugs, suggestions, pull requests; we will do our best to address them +//in a timely manner. +// +// SOFTWARE LICENSE AGREEMENT (BSD LICENSE): +// +// +//Copyright (c) 2015, Philippe Ludivig +//All rights reserved. +// +//Redistribution and use in source and binary forms, with or without +//modification, are permitted provided that the following conditions are met: +// +//* Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +//* Redistributions 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. +// +//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 COPYRIGHT HOLDER 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. +//########################################################################## +// This node is a guide on how to implement the face detection data which is +// being published by the face_detection and face_tracking nodes. The data is +// published as follows: + +// 0: Detection Speed in Frames Per Second +// 1: Number of faces detected in the Current Frame +// 2: Image Size X +// 3: Image Size Y + +// 4: First Face ID (This feature does only work with face_tracking) +// 5: First Face Detection Length (This feature does only work with face_tracking) +// 6: First Face X coordinate (top left Corner) +// 7: First Face Y coordinate (top left Corner) +// 8: First Face Width +// 9: First Face Heigth + +// 4: Second Face ID (This feature does only work with face_tracking) +// 5: Second Face Detection Length (This feature does only work with face_tracking) +// 6: Second Face X coordinate (top left Corner) +// 7: Second Face Y coordinate (top left Corner) +// 8: Second Face Width +// 9: Second Face Heigth + +// Third Face + +// Fourth Face + +// ... + +#include "ros/ros.h" + +#include +#include +#include +#include + +#include "std_msgs/MultiArrayLayout.h" +#include "std_msgs/MultiArrayDimension.h" +#include "std_msgs/Int32MultiArray.h" + + +int Arr[200]; + + +void chatterCallback(const std_msgs::Int32MultiArray::ConstPtr& myMsg) +{ + //ROS_INFO("I heard: [%d]", myMsg->data.c_str()); + + + int i = 0; + + //the data is being stored inside an array + for(std::vector::const_iterator it = myMsg->data.begin(); it != myMsg->data.end(); ++it) + { + Arr[i] = *it; + i++; + } + + int counter = 4; + printf("### Face_Data: fps[%d] numFaces[%d] ImgX[%d] ImgY[%d] ###########\n", Arr[0], Arr[1], Arr[2], Arr[3]); + for (int i = 0; i < Arr[1]; i++) { + printf("Face: %d # detected for [%d] # X[%d] Y[%d]\n", Arr[counter], Arr[counter+1], Arr[counter+2], Arr[counter+3]); + counter += 6; + } + + + //ROS_INFO("I heard: "); +} + +int main(int argc, char **argv) +{ + /** + * The ros::init() function needs to see argc and argv so that it can perform + * any ROS arguments and name remapping that were provided at the command line. + * For programmatic remappings you can use a different version of init() which takes + * remappings directly, but for most command-line programs, passing argc and argv is + * the easiest way to do it. The third argument to init() is the name of the node. + * + * You must call one of the versions of ros::init() before using any other + * part of the ROS system. + */ + ros::init(argc, argv, "listener"); + + /** + * NodeHandle is the main access point to communications with the ROS system. + * The first NodeHandle constructed will fully initialize this node, and the last + * NodeHandle destructed will close down the node. + */ + ros::NodeHandle n; + + /** + * The subscribe() call is how you tell ROS that you want to receive messages + * on a given topic. This invokes a call to the ROS + * master node, which keeps a registry of who is publishing and who + * is subscribing. Messages are passed to a callback function, here + * called chatterCallback. subscribe() returns a Subscriber object that you + * must hold on to until you want to unsubscribe. When all copies of the Subscriber + * object go out of scope, this callback will automatically be unsubscribed from + * this topic. + * + * The second parameter to the subscribe() function is the size of the message + * queue. If messages are arriving faster than they are being processed, this + * is the number of messages that will be buffered up before beginning to throw + * away the oldest ones. + */ + ros::Subscriber sub = n.subscribe("faceCoord", 1000, chatterCallback); + + /** + * ros::spin() will enter a loop, pumping callbacks. With this version, all + * callbacks will be called from within this thread (the main one). ros::spin() + * will exit when Ctrl-C is pressed, or the node is shutdown by the master. + */ + ros::spin(); + + return 0; +} diff --git a/src/face_tracking.cpp b/src/face_tracking.cpp new file mode 100644 index 0000000..a90271c --- /dev/null +++ b/src/face_tracking.cpp @@ -0,0 +1,836 @@ +//########################################################################## +// DO NOT MODIFY +// +//This project was created within an academic research setting, and thus should +//be considered as EXPERIMENTAL code. There may be bugs and deficiencies in the +//code, so please adjust expectations accordingly. With that said, we are +//intrinsically motivated to ensure its correctness (and often its performance). +//Please use the corresponding web repository tool (e.g. github, bitbucket, etc) +//to file bugs, suggestions, pull requests; we will do our best to address them +//in a timely manner. +// +// SOFTWARE LICENSE AGREEMENT (BSD LICENSE): +// +// +//Copyright (c) 2015, Philippe Ludivig +//All rights reserved. +// +//Redistribution and use in source and binary forms, with or without +//modification, are permitted provided that the following conditions are met: +// +//* Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +//* Redistributions 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. +// +//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 COPYRIGHT HOLDER 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. +//########################################################################## + + +#include +#include +#include +#include +#include +#include +#include "opencv2/objdetect/objdetect.hpp" +#include +#include +#include + +#include "std_msgs/MultiArrayLayout.h" +#include "std_msgs/MultiArrayDimension.h" +#include "std_msgs/Int32MultiArray.h" + +#include +#include +#include +#include +#include + + +using namespace std; +using namespace cv; + +// OpenCV publishing windows +static const std::string OPENCV_WINDOW = "Image window"; + + + +//#################################################################### +//# # +//#################################################################### +//###################### Face Detector Class ######################### +//#################################################################### +//# # +//#################################################################### +class FaceDetector +{ + ros::NodeHandle nh_; + ros::NodeHandle n; + + image_transport::ImageTransport it_; + image_transport::Subscriber image_sub_; + image_transport::Publisher image_pub_; + ros::Publisher faceCoord_pub; + + // required for the dynamic reconfigure server + dynamic_reconfigure::Server srv; + dynamic_reconfigure::Server::CallbackType f; + + int counter; + int neighborsValue; + float scaleValue; + int minSize; + int cascadeValue; + float imgScale; + int histOnOff; + int blurFactor; + int brightnessFactor; + float contrastFactor; + int debug; + int button1; + int flag; + int colourValue; + int inputSkipp; + int maxSize; + float totalTime; + int windowOnOff; + int maxTrackingNum; + int initialDetectionNum; + int pixelSwitch; + int maxNumFeatures; + int trackSearchWinSize; + int IDcounter; + string imageInput = "/camera/image_raw"; + string imageOutput = "/face_det/image_raw"; + + char myflag; + + cv::CascadeClassifier face_cascade; + cv::CascadeClassifier face_cascade_0; + cv::CascadeClassifier face_cascade_1; + cv::CascadeClassifier face_cascade_2; + cv::CascadeClassifier face_cascade_3; + cv::CascadeClassifier face_cascade_profile; + + std::vector faces; + std::vector lastSeen; + std::vector faceID; + std::vector detectionLength; + int gFps; + int gCounter; + Mat gray; + std::vector::const_iterator i; + + + // Mat used for tracking + + Mat previousFrame; + Mat inputImage; + // start and end times + time_t start, end, timeZero, currentTime; + ros::Time begin; + + // fps calculated using number of frames / seconds + double fps; + // frame counter + int frameCounter; + int totalFrameCounter; + // floating point seconds elapsed since start + double sec; + int totalDetections; + +private: + //#################################################################### + //############# called every time theres a new image ################# + //#################################################################### + void newImageCallBack(const sensor_msgs::ImageConstPtr& msg) + { + + // starts time calculations, one of the counters is being reset every once in a while + if (frameCounter == 0){ + time(&start); + if (totalFrameCounter == 0) { + time(&timeZero); + begin = ros::Time::now(); + + + + } + } + + + // retrieves the image from the camera driver + cv_bridge::CvImagePtr cv_ptr; + try + { + cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8); + } + catch (cv_bridge::Exception& e) + { + ROS_ERROR("cv_bridge exception: %s", e.what()); + return; + } + + if (totalFrameCounter == 0) { + + previousFrame = cv_ptr->image; + cvtColor( previousFrame, previousFrame, CV_BGR2GRAY ); + + } + + + + //#################################################################### + //######################## image preprocessing ####################### + //#################################################################### + + gCounter += 1; + + // change contrast: 0.5 = half ; 2.0 = double + cv_ptr->image.convertTo(gray, -1, contrastFactor, 0); + + // create B&W image + cvtColor( gray, gray, CV_BGR2GRAY ); + + //equalize the histogram + if(histOnOff == 1){ + equalizeHist( gray, gray ); + } + + //blur image by blurfactor + if(blurFactor > 0){ + blur( gray, gray, Size( blurFactor, blurFactor) ); + } + + + inputImage = gray.clone(); + //printf("width = %d\n", inputImage.cols); + + //scale image + resize(gray, gray, Size(), imgScale , imgScale); + + + + //#################################################################### + //####################### detection part ############################# + //#################################################################### + // depending on the gFps setting, this part is only executed every couple of frames + + std::vector newFaces; + if(gCounter > gFps -1){ + //gCounter = 0; + + //if(totalFrameCounter % 2){ + face_cascade.detectMultiScale( + gray, // input image (grayscale) + newFaces, // output variable containing face rectangle + scaleValue, // scale factor + neighborsValue, // minimum neighbors + 0|myflag, // flags + cv::Size(minSize, minSize), // minimum size + cv::Size(maxSize, maxSize) // minimum size + ); + + /* printf("this\n" ); + } else { + face_cascade_profile.detectMultiScale( + gray, // input image (grayscale) + newFaces, // output variable containing face rectangle + scaleValue, // scale factor + neighborsValue, // minimum neighbors + 0|myflag, // flags + cv::Size(minSize, minSize), // minimum size + cv::Size(maxSize, maxSize) // minimum size + ); + printf("that\n" ); + }*/ + if(imgScale != 1){ + for(unsigned i = 0; i < newFaces.size(); ++i) { + newFaces[i].x = newFaces[i].x/imgScale; + newFaces[i].y = newFaces[i].y/imgScale; + newFaces[i].width = newFaces[i].width/imgScale; + newFaces[i].height = newFaces[i].height/imgScale; + } + } + } + + + + //#################################################################### + //####################### tracking part ############################## + //#################################################################### + // + Mat croppedImage; + + int mx; + int my; + int mh; + int mw; + + for (unsigned i = 0; i < faces.size(); i++) { + //printf("next faces analysis \n"); + mx = faces[i].x; + my = faces[i].y; + mh = faces[i].height; + mw = faces[i].width; + //printf("adding values \n"); + double mvRateX = 0.0; + double mvRateY = 0.0; + + std::vector features_prev, features_next; + std::vector status; + std::vector err; + + //printf("cropping \n"); + //printf("mx %d \n", mx); + croppedImage = inputImage(Rect(mx,my, mw,mh)); + cv::goodFeaturesToTrack(croppedImage, // the image + features_prev, // the output detected features + maxNumFeatures, // the maximum number of features + 0.4, // quality level + 2 // min distance between two features + ); + + + //printf("test %lu \n",features_prev.size()); + for (unsigned j = 0; j < features_prev.size(); j++) { + features_prev[j].x = features_prev[j].x + mx; + features_prev[j].y = features_prev[j].y + my; + if(pixelSwitch == 0){ + cv::circle(cv_ptr->image, cv::Point(features_prev[j].x , features_prev[j].y), 1, CV_RGB(255,0,0),CV_FILLED); + } + + + } + + //printf("Optical Flow \n"); + // #################################### + // Optical Flow + cv::Size winSize(trackSearchWinSize,trackSearchWinSize); + if(features_prev.size() != 0){ + cv::calcOpticalFlowPyrLK( + previousFrame, inputImage, // 2 consecutive images + features_prev, // input point positions in first im + features_next, // output point positions in the 2nd + status, // tracking success + err, // tracking error + winSize + ); + } + //printf("print sizes of arrays %lu %lu %lu\n", features_prev.size(), features_next.size(), status.size() ); + //for (unsigned j = 0; j < features_next.size(); j++) { + // printf("%u ", status[j]); + //} + + // #################################### + // add mx my to the values of the cropped window + // then calc error rate + for (unsigned j = 0; j < features_next.size(); j++) { + if(pixelSwitch == 0){ + cv::circle(cv_ptr->image, cv::Point(features_next[j].x , features_next[j].y), 1, CV_RGB(255,255,255),CV_FILLED); + } + mvRateX += features_next[j].x - features_prev[j].x; + mvRateY += features_next[j].y - features_prev[j].y; + + } + mvRateX = mvRateX /features_next.size(); + mvRateY = mvRateY /features_next.size(); + + if(pixelSwitch == 0){ + cv::circle(cv_ptr->image, cv::Point(mx + mw/2, my + mh/2), 10, CV_RGB(0,255,0)); + cv::circle(cv_ptr->image, cv::Point(mx + mw/2 + mvRateX, my + mh/2 +mvRateY), 10, CV_RGB(255,0,0)); + } + + + // update error rate + faces[i].x = faces[i].x + mvRateX; + faces[i].y = faces[i].y + mvRateY; + //printf("update error rate \n"); + //if(faces[i].x < 0){ faces[i].x = 0;} + //if(faces[i].y < 0){ faces[i].y = 0;} + + if(faces[i].x < 0 || faces[i].y < 0 || (faces[i].x + faces[i].width) > (cv_ptr->image.cols) || (faces[i].y+ faces[i].height) > (cv_ptr->image.rows)){ + faces.erase (faces.begin()+i); + lastSeen.erase (lastSeen.begin()+i); + faceID.erase (faceID.begin()+i); + detectionLength.erase (detectionLength.begin()+i); + i--; + } + + } + + + + //#################################################################### + //################### find intersection ############################# + //#################################################################### + // here we compare the tracked faces against the newly detected faces: + // if we have an intersection, the tracked faces is udated with a new detection + // if we have no intersection, the new detection is added to the current faces + if(gCounter > gFps -1){ + gCounter = 0; + int duplicatedFaceDetection = 0; + for (unsigned i = 0; i < newFaces.size(); i++) { + for ( unsigned j = 0; j < faces.size(); j++) { + Rect interSection = faces[j] & newFaces[i]; + + // all values == 0 means no intersection + if (interSection.width != 0){ + // we have intersection + duplicatedFaceDetection = 1; + //printf("instersection %d %d %d %d\n", interSection.x,interSection.y,interSection.width,interSection.height); + faces[j] = newFaces[i]; + lastSeen[j] = maxTrackingNum; + } //else { + // we have no intersection + //printf("no instersection %d %d %d %d\n", interSection.x,interSection.y,interSection.width,interSection.height); + //faces[j] = newFaces[i]; + //} + + } + + if(duplicatedFaceDetection == 0){ + faces.push_back(newFaces[i]); + lastSeen.push_back(initialDetectionNum); + faceID.push_back(IDcounter); + IDcounter++; + detectionLength.push_back(1); + } + } + + + //#################################################################### + //################### count lastSeen ################################# + //#################################################################### + for (unsigned i = 0; i < faces.size(); i++) { + if(lastSeen[i] == 1){ + faces.erase (faces.begin()+i); + lastSeen.erase (lastSeen.begin()+i); + faceID.erase (faceID.begin()+i); + detectionLength.erase (detectionLength.begin()+i); + i--; + } else { + lastSeen[i] = lastSeen[i] -1; + detectionLength[i] = detectionLength[i] + 1; + } + } + } + + + + + + + // ############################## + // rest program + previousFrame = inputImage.clone(); + + //keep number of total detections + totalDetections += faces.size(); + + //print faces on top of image + if(pixelSwitch == 0){ + cv_ptr->image = drawFaces(cv_ptr->image); + } else { + + //blur faces + Mat blurMyFace; + for (i = faces.begin(); i != faces.end(); ++i) { + Rect cropROI((i->x),(i->y),(i->width), (i->height)); + blurMyFace = cv_ptr->image(cropROI); + blurMyFace = pixelate(blurMyFace,16); + blurMyFace.copyTo(cv_ptr->image(cropROI)); + } + } + + + //Display Section, images will only displayed if option is selected + if(debug != 0){ + if(debug == 1 || debug == 3){ + cv::imshow(OPENCV_WINDOW, cv_ptr->image); + } + else if(debug == 2){ + for (i = faces.begin(); i != faces.end(); ++i) { + cv::rectangle( + gray, + cv::Point((i->x)*imgScale, (i->y)*imgScale), + cv::Point((i->x)*imgScale + (i->width)*imgScale, (i->y)*imgScale + (i->height)*imgScale), + CV_RGB(0, 255, 0), + 2); + } + cv::imshow(OPENCV_WINDOW, gray); + } + } + + + + if(debug != 3){ + // Output modified video stream + image_pub_.publish(cv_ptr->toImageMsg()); + //image_pub_.publish(cv_ptr->toImageMsg()); + //ros::NodeHandle n; + // + + // ### publishing coordinates ### + std_msgs::Int32MultiArray myMsg; + myMsg.data.clear(); + // publish current fps rate + myMsg.data.push_back(fps); + // publish number of detected faces + myMsg.data.push_back(faces.size()); + // width of the image + myMsg.data.push_back(cv_ptr->image.cols); + // height of the image + myMsg.data.push_back(cv_ptr->image.rows); + //for (i = faces.begin(); i != faces.end(); ++i) { + for ( unsigned i = 0; i < faces.size(); i++) { + myMsg.data.push_back(faceID[i]); + myMsg.data.push_back(detectionLength[i]); + myMsg.data.push_back(faces[i].x); + myMsg.data.push_back(faces[i].y); + myMsg.data.push_back(faces[i].width); + myMsg.data.push_back(faces[i].height); + } + faceCoord_pub.publish(myMsg); + } + + + // fps counter begin + time(&end); + frameCounter++; + if (frameCounter > 100){ + sec = difftime(end, start); + fps = frameCounter/sec; + //printf("%.2f fps\n", fps); + //printf("%.2f fps ; sec = %.2f ; counter = %i \n", fps, sec,frameCounter); + frameCounter = 0; + } + // fps counter end + + // print out averages + totalTime = ( ros::Time::now() - begin).toSec(); + sec = difftime(end, timeZero); + printf("time passed: %.2f # frames: %i # fps: %f \n# total number of detections: %i # FPS in last 100 frames : %.2f \n", totalTime, totalFrameCounter, totalFrameCounter/totalTime, totalDetections, fps); + + totalFrameCounter += 1; + cv::waitKey(3); + + + + } + + // ######################################### + // #### used for pixelising images ######### + // ######################################### + Mat pixelate(Mat myImage, int pixelizationRate){ + + cv::Mat result = cv::Mat::zeros(myImage.size(), CV_8UC3); + for (int i = 0; i < myImage.rows; i += pixelizationRate) + { + for (int j = 0; j < myImage.cols; j += pixelizationRate) + { + cv::Rect rect = cv::Rect(j, i, pixelizationRate, pixelizationRate) & + cv::Rect(0, 0, myImage.cols, myImage.rows); + + cv::Mat sub_dst(result, rect); + sub_dst.setTo(cv::mean(myImage(rect))); + + } + } + + return result; + } + + + + //#################################################################### + //##################### drawFaces #################################### + //#################################################################### + //takes the detected faces and daws them on top of an image + //cv_bridge::CvImagePtr drawFaces(cv_bridge::CvImagePtr myImagePtr) { + cv::Mat drawFaces(cv::Mat myImage) { + + for (unsigned i = 0; i < faces.size(); ++i) { + //printf("last seen %d \n", lastSeen[i]); + if(lastSeen[i] == (maxTrackingNum -1) ){ + // green = newly detected + //printf("seen \n"); + cv::rectangle( + myImage, + cv::Point((faces[i].x), (faces[i].y)), + cv::Point((faces[i].x) + (faces[i].width), (faces[i].y) + (faces[i].height)), + CV_RGB(50, 255 , 50), + 2); + } else if(lastSeen[i] != 1) { + // blue = old face + cv::rectangle( + myImage, + cv::Point((faces[i].x), (faces[i].y)), + cv::Point((faces[i].x) + (faces[i].width), (faces[i].y) + (faces[i].height)), + CV_RGB(50, 50 , 255), + 2); + } else { + // red = about to disappear + cv::rectangle( + myImage, + cv::Point((faces[i].x), (faces[i].y)), + cv::Point((faces[i].x) + (faces[i].width), (faces[i].y) + (faces[i].height)), + CV_RGB(255, 50 , 50), + 2); + } + + cv::putText(myImage, std::to_string(faceID[i]), cv::Point(faces[i].x,faces[i].y+faces[i].height+20), CV_FONT_NORMAL, 0.5, Scalar(255,255,255),1,1); + + } + return myImage; + } + + +public: + + //###################################################################### + //##################### constructor #################################### + //###################################################################### + FaceDetector(String casc0, String casc1, String casc2, String casc3) + : it_(nh_) + { + inputSkipp = 1; + + + // Subscrive to input video feed and publish output video feed "/camera/image_raw", + //string imageInput = "/camera/image_raw"; + //inputSkipp = 1 + image_sub_ = it_.subscribe(imageInput, inputSkipp, &FaceDetector::newImageCallBack, this); + //string imageOutput = "/face_det/image_raw"; + image_pub_ = it_.advertise(imageOutput, inputSkipp); + + + + //loads in the different cascade detection files + printf("################\n" ); + if (face_cascade_0.load(casc0) == false) { + printf("cascade.load_0() failed...\n"); + printf("The missing cascade file is /include/face_detection/HaarCascades/haarcascade_frontalface_alt.xml\n"); + exit(0); + } + if (face_cascade_1.load(casc1) == false) { + printf("cascade.load_1() failed...\n"); + printf("The missing cascade file is /include/face_detection/HaarCascades/haarcascade_frontalface_alt2.xml\n"); + exit(0); + } + if (face_cascade_2.load(casc2) == false) { + printf("cascade.load_2() failed...\n"); + printf("The missing cascade file is /include/face_detection/HaarCascades/haarcascade_frontalface_alt_tree.xml\n"); + exit(0); + } + if (face_cascade_3.load(casc3) == false) { + printf("cascade.load_3() failed...\n"); + printf("The missing cascade file is /include/face_detection/HaarCascades/haarcascade_frontalface_default.xml\n"); + exit(0); + } + + if (face_cascade_profile.load("/home/phil/catkin_ws/src/face_detection/include/face_detection//HaarCascades/haarcascade_frontalface_default.xml") == false) { + printf("cascade.load_3() failed...\n"); + printf("The missing cascade file is /include/face_detection/HaarCascades/haarcascade_frontalface_default.xml\n"); + exit(0); + } + printf("OpenCV: %s \n", cv::getBuildInformation().c_str()); + + counter = 0; + gFps = 2; + gCounter = gFps -1; + neighborsValue = 2; + scaleValue = 1.2; + minSize = 13; + maxSize = 250; + cascadeValue = 2; + imgScale = 1.0; + histOnOff = 0; + blurFactor = 0; + brightnessFactor = 0; + button1 = 0; + frameCounter = 0; + contrastFactor = 1.5; + flag = 2; + fps = -1; + debug = 0; + totalFrameCounter = 0; + totalTime = 0; + myflag = CV_HAAR_DO_CANNY_PRUNING; + windowOnOff = 0; + totalDetections = 0; + maxTrackingNum = 60; + initialDetectionNum = 4; + maxNumFeatures = 15; + pixelSwitch = 1; + trackSearchWinSize = 100; + IDcounter = 1; + + //setNumThreads(0); + + //setting up the dynamic reconfigure server + f = boost::bind(&FaceDetector::callback, this, _1, _2); + srv.setCallback(f); + + + faceCoord_pub = n.advertise("faceCoord", 1000); + + //generate windows + if(debug != 0){ + cv::namedWindow(OPENCV_WINDOW); + } + + } + + //#################################################################### + //##################### destroyer #################################### + //#################################################################### + ~FaceDetector() + { + cv::destroyWindow(OPENCV_WINDOW); + } + + + //######################################################## + //########## reconfigure callback function ############### + //######################################################## + void callback(face_detection::face_trackConfig &config, uint32_t level) + { + + ROS_INFO("Reconfigure request"); + + + if (config.debug == 0 && debug > 0) { + cv::destroyWindow(OPENCV_WINDOW); + } + + gFps = config.skipFrames; + neighborsValue = config.neighborsValue; + scaleValue = config.scaleValue; + + minSize = config.minSize/scaleValue; + maxSize = config.maxSize/scaleValue; + cascadeValue = config.cascadeValue; + imgScale = config.imgScale; + histOnOff = config.histOnOff; + blurFactor = config.blurFactor; + brightnessFactor = config.brightnessFactor; + contrastFactor = config.contrastFactor; + debug = config.debug; + inputSkipp = config.inputSkipp; + pixelSwitch = config.pixelSwitch; + maxNumFeatures = config.maxNumFeatures; + maxTrackingNum = config.maxTrackingNum; + initialDetectionNum = config.initialDetectionNum; + trackSearchWinSize = config.trackSearchWinSize; + //selecting the correct flag for the + switch(config.myflag){ + case 0 : + myflag = CV_HAAR_SCALE_IMAGE; + break; + case 1 : + myflag = CV_HAAR_FIND_BIGGEST_OBJECT; + break; + case 2 : + myflag = CV_HAAR_DO_CANNY_PRUNING; + break; + case 3 : + myflag = CV_HAAR_DO_ROUGH_SEARCH; + break; + default: + myflag = CV_HAAR_SCALE_IMAGE; + break; + } + + switch (cascadeValue) { + case 0: + face_cascade = face_cascade_0; + break; + case 1: + face_cascade = face_cascade_1; + break; + case 2: + face_cascade = face_cascade_2; + break; + case 3: + face_cascade = face_cascade_3; + break; + default: + face_cascade = face_cascade_0; + break; + } + + if (imageInput != config.imageInput || inputSkipp != config.inputSkipp) { + imageInput = config.imageInput; + image_sub_ = it_.subscribe(imageInput, inputSkipp, &FaceDetector::newImageCallBack, this); + } + + if (imageOutput != config.imageOutput || inputSkipp != config.inputSkipp) { + imageOutput = config.imageOutput; + image_pub_ = it_.advertise(imageOutput, inputSkipp); + } + + } + + + // check the reconfigure sever + void callSrv() + { + srv.setCallback(f); + } + +}; + + + + +//######################################################## +//##################### Main ############################# +//######################################################## +int main(int argc, char** argv) +{ + ros::init(argc, argv, "image_converter"); + printf("\n"); + printf("\n"); + printf("##############################################\n"); + printf("############ ROS Face Detection ##############\n"); + printf("##############################################\n"); + printf("\n"); + if(argc < 5){ + printf("Not Enough arguments, use one of the provided Roslaunch files\n"); + printf("\n"); + printf("Alternatively, arguments are needed as follows:\n"); + printf("01) Detection Cascade file 1\n"); + printf("02) Detection Cascade file 2\n"); + printf("03) Detection Cascade file 3\n"); + printf("04) Detection Cascade file 4\n"); + printf("\n"); + printf("\n"); + exit(0); + } + + + + ros::init(argc, argv, "face_tracking"); + + + ROS_INFO("Starting to spin..."); + + FaceDetector faceDet(argv[1],argv[2],argv[3],argv[4]); + faceDet.callSrv(); + ros::spin(); + return 0; +}