59d5c3c4a41704880f2f88035a53b37856b3a029
[platform/upstream/opencv.git] / modules / softcascade / test / test_softcascade.cpp
1 /*M///////////////////////////////////////////////////////////////////////////////////////
2 //
3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
4 //
5 //  By downloading, copying, installing or using the software you agree to this license.
6 //  If you do not agree to this license, do not download, install,
7 //  copy or use the software.
8 //
9 //
10 //                           License Agreement
11 //                For Open Source Computer Vision Library
12 //
13 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
14 // Copyright (C) 2008-2013, Willow Garage Inc., all rights reserved.
15 // Third party copyrights are property of their respective owners.
16 //
17 // Redistribution and use in source and binary forms, with or without modification,
18 // are permitted provided that the following conditions are met:
19 //
20 //   * Redistribution's of source code must retain the above copyright notice,
21 //     this list of conditions and the following disclaimer.
22 //
23 //   * Redistribution's in binary form must reproduce the above copyright notice,
24 //     this list of conditions and the following disclaimer in the documentation
25 //     and / or other materials provided with the distribution.
26 //
27 //   * The name of the copyright holders may not be used to endorse or promote products
28 //     derived from this software without specific prior written permission.
29 //
30 // This software is provided by the copyright holders and contributors "as is" and
31 // any express or implied warranties, including, but not limited to, the implied
32 // warranties of merchantability and fitness for a particular purpose are disclaimed.
33 // In no event shall the Intel Corporation or contributors be liable for any direct,
34 // indirect, incidental, special, exemplary, or consequential damages
35 // (including, but not limited to, procurement of substitute goods or services;
36 // loss of use, data, or profits; or business interruption) however caused
37 // and on any theory of liability, whether in contract, strict liability,
38 // or tort (including negligence or otherwise) arising in any way out of
39 // the use of this software, even if advised of the possibility of such damage.
40 //
41 //M*/
42
43 #include <string>
44 #include <fstream>
45
46 #include "test_precomp.hpp"
47
48 using namespace cv::softcascade;
49
50 TEST(SoftCascadeDetector, readCascade)
51 {
52     std::string xml = cvtest::TS::ptr()->get_data_path() + "cascadeandhog/cascades/inria_caltech-17.01.2013.xml";
53      Detector cascade;
54     cv::FileStorage fs(xml, cv::FileStorage::READ);
55     ASSERT_TRUE(fs.isOpened());
56     ASSERT_TRUE(cascade.load(fs.getFirstTopLevelNode()));
57 }
58
59 TEST(SoftCascadeDetector, detect)
60 {
61     std::string xml =  cvtest::TS::ptr()->get_data_path()+ "cascadeandhog/cascades/inria_caltech-17.01.2013.xml";
62     Detector cascade;
63     cv::FileStorage fs(xml, cv::FileStorage::READ);
64     ASSERT_TRUE(cascade.load(fs.getFirstTopLevelNode()));
65
66     cv::Mat colored = cv::imread(cvtest::TS::ptr()->get_data_path()  + "cascadeandhog/images/image_00000000_0.png");
67     ASSERT_FALSE(colored.empty());
68
69     std::vector<Detection> objects;
70     cascade.detect(colored, cv::noArray(), objects);
71
72     ASSERT_EQ(719, (int)objects.size());
73 }
74
75 TEST(SoftCascadeDetector, detectSeparate)
76 {
77     std::string xml =  cvtest::TS::ptr()->get_data_path() + "cascadeandhog/cascades/inria_caltech-17.01.2013.xml";
78     Detector cascade;
79     cv::FileStorage fs(xml, cv::FileStorage::READ);
80     ASSERT_TRUE(cascade.load(fs.getFirstTopLevelNode()));
81
82     cv::Mat colored = cv::imread(cvtest::TS::ptr()->get_data_path() + "cascadeandhog/images/image_00000000_0.png");
83     ASSERT_FALSE(colored.empty());
84
85     cv::Mat rects, confs;
86
87     cascade.detect(colored, cv::noArray(), rects, confs);
88     ASSERT_EQ(719, confs.cols);
89 }
90
91 TEST(SoftCascadeDetector, detectRoi)
92 {
93     std::string xml =  cvtest::TS::ptr()->get_data_path() + "cascadeandhog/cascades/inria_caltech-17.01.2013.xml";
94     Detector cascade;
95     cv::FileStorage fs(xml, cv::FileStorage::READ);
96     ASSERT_TRUE(cascade.load(fs.getFirstTopLevelNode()));
97
98     cv::Mat colored = cv::imread(cvtest::TS::ptr()->get_data_path() + "cascadeandhog/images/image_00000000_0.png");
99     ASSERT_FALSE(colored.empty());
100
101     std::vector<Detection> objects;
102     std::vector<cv::Rect> rois;
103     rois.push_back(cv::Rect(0, 0, 640, 480));
104
105     cascade.detect(colored, rois, objects);
106     ASSERT_EQ(719, (int)objects.size());
107 }
108
109 TEST(SoftCascadeDetector, detectNoRoi)
110 {
111     std::string xml =  cvtest::TS::ptr()->get_data_path() + "cascadeandhog/cascades/inria_caltech-17.01.2013.xml";
112     Detector cascade;
113     cv::FileStorage fs(xml, cv::FileStorage::READ);
114     ASSERT_TRUE(cascade.load(fs.getFirstTopLevelNode()));
115
116     cv::Mat colored = cv::imread(cvtest::TS::ptr()->get_data_path() + "cascadeandhog/images/image_00000000_0.png");
117     ASSERT_FALSE(colored.empty());
118
119     std::vector<Detection> objects;
120     std::vector<cv::Rect> rois;
121
122     cascade.detect(colored, rois, objects);
123
124     ASSERT_EQ(719, (int)objects.size());
125 }
126
127 TEST(SoftCascadeDetector, detectEmptyRoi)
128 {
129     std::string xml =  cvtest::TS::ptr()->get_data_path() + "cascadeandhog/cascades/inria_caltech-17.01.2013.xml";
130     Detector cascade;
131     cv::FileStorage fs(xml, cv::FileStorage::READ);
132     ASSERT_TRUE(cascade.load(fs.getFirstTopLevelNode()));
133
134     cv::Mat colored = cv::imread(cvtest::TS::ptr()->get_data_path() + "cascadeandhog/images/image_00000000_0.png");
135     ASSERT_FALSE(colored.empty());
136
137     std::vector<Detection> objects;
138     cascade.detect(colored, cv::Mat::zeros(colored.size(), CV_8UC1), objects);
139
140     ASSERT_EQ(0, (int)objects.size());
141 }