Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
a70496e4
Commit
a70496e4
authored
Oct 03, 2011
by
Maria Dimashova
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added test for c++ version of latent svm and updated testdata
parent
a2ff919a
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
154 additions
and
3 deletions
+154
-3
test_latentsvmdetector.cpp
modules/objdetect/test/test_latentsvmdetector.cpp
+154
-3
No files found.
modules/objdetect/test/test_latentsvmdetector.cpp
View file @
a70496e4
...
...
@@ -66,7 +66,6 @@ public:
~
CV_LatentSVMDetectorTest
();
protected
:
void
run
(
int
);
private
:
bool
isEqual
(
CvRect
r1
,
CvRect
r2
);
};
...
...
@@ -84,7 +83,7 @@ bool CV_LatentSVMDetectorTest::isEqual(CvRect r1, CvRect r2)
void
CV_LatentSVMDetectorTest
::
run
(
int
/* start_from */
)
{
string
img_path
=
string
(
ts
->
get_data_path
())
+
"latentsvmdetector/cat.jpg"
;
string
model_path
=
string
(
ts
->
get_data_path
())
+
"latentsvmdetector
/cat.xml"
;
string
model_path
=
string
(
ts
->
get_data_path
())
+
"latentsvmdetector/models_VOC2007
/cat.xml"
;
int
numThreads
=
-
1
;
#ifdef HAVE_TBB
numThreads
=
2
;
...
...
@@ -136,4 +135,156 @@ void CV_LatentSVMDetectorTest::run( int /* start_from */)
cvReleaseImage
(
&
image
);
}
TEST
(
Objdetect_LatentSVMDetector
,
regression
)
{
CV_LatentSVMDetectorTest
test
;
test
.
safe_run
();
}
// Test for c++ version of Latent SVM
class
LatentSVMDetectorTest
:
public
cvtest
::
BaseTest
{
public
:
LatentSVMDetectorTest
();
protected
:
void
run
(
int
);
};
LatentSVMDetectorTest
::
LatentSVMDetectorTest
()
{
}
static
void
writeDetections
(
FileStorage
&
fs
,
const
string
&
nodeName
,
const
vector
<
LatentSvmDetector
::
ObjectDetection
>&
detections
)
{
fs
<<
nodeName
<<
"["
;
for
(
size_t
i
=
0
;
i
<
detections
.
size
();
i
++
)
{
const
LatentSvmDetector
::
ObjectDetection
&
d
=
detections
[
i
];
fs
<<
d
.
rect
.
x
<<
d
.
rect
.
y
<<
d
.
rect
.
width
<<
d
.
rect
.
height
<<
d
.
score
<<
d
.
classID
;
}
fs
<<
"]"
;
}
static
void
readDetections
(
FileStorage
fs
,
const
string
&
nodeName
,
vector
<
LatentSvmDetector
::
ObjectDetection
>&
detections
)
{
detections
.
clear
();
FileNode
fn
=
fs
.
root
()[
nodeName
];
FileNodeIterator
fni
=
fn
.
begin
();
while
(
fni
!=
fn
.
end
()
)
{
LatentSvmDetector
::
ObjectDetection
d
;
fni
>>
d
.
rect
.
x
>>
d
.
rect
.
y
>>
d
.
rect
.
width
>>
d
.
rect
.
height
>>
d
.
score
>>
d
.
classID
;
detections
.
push_back
(
d
);
}
}
static
inline
bool
isEqual
(
const
LatentSvmDetector
::
ObjectDetection
&
d1
,
const
LatentSvmDetector
::
ObjectDetection
&
d2
)
{
return
((
d1
.
rect
.
x
==
d2
.
rect
.
x
)
&&
(
d1
.
rect
.
y
==
d2
.
rect
.
y
)
&&
(
d1
.
rect
.
width
==
d2
.
rect
.
width
)
&&
(
d1
.
rect
.
height
==
d2
.
rect
.
height
)
&&
(
d1
.
classID
==
d2
.
classID
)
&&
std
::
abs
(
d1
.
score
-
d2
.
score
)
<
score_thr
);
}
bool
compareResults
(
const
vector
<
LatentSvmDetector
::
ObjectDetection
>&
calc
,
const
vector
<
LatentSvmDetector
::
ObjectDetection
>&
valid
)
{
if
(
calc
.
size
()
!=
valid
.
size
()
)
return
false
;
for
(
size_t
i
=
0
;
i
<
calc
.
size
();
i
++
)
{
const
LatentSvmDetector
::
ObjectDetection
&
c
=
calc
[
i
];
const
LatentSvmDetector
::
ObjectDetection
&
v
=
valid
[
i
];
if
(
!
isEqual
(
c
,
v
)
)
return
false
;
}
return
true
;
}
void
LatentSVMDetectorTest
::
run
(
int
/* start_from */
)
{
string
img_path_cat
=
string
(
ts
->
get_data_path
())
+
"latentsvmdetector/cat.jpg"
;
string
img_path_cars
=
string
(
ts
->
get_data_path
())
+
"latentsvmdetector/cars.jpg"
;
string
model_path_cat
=
string
(
ts
->
get_data_path
())
+
"latentsvmdetector/models_VOC2007/cat.xml"
;
string
model_path_car
=
string
(
ts
->
get_data_path
())
+
"latentsvmdetector/models_VOC2007/car.xml"
;
string
true_res_path
=
string
(
ts
->
get_data_path
())
+
"latentsvmdetector/results.xml"
;
int
numThreads
=
1
;
#ifdef HAVE_TBB
numThreads
=
2
;
#endif
Mat
image_cat
=
imread
(
img_path_cat
);
Mat
image_cars
=
imread
(
img_path_cars
);
if
(
image_cat
.
empty
()
||
image_cars
.
empty
()
)
{
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_INVALID_TEST_DATA
);
return
;
}
// We will test 2 cases:
// detector1 - to test case of one class 'cat'
// detector12 - to test case of two (several) classes 'cat' and car
// Load detectors
LatentSvmDetector
detector1
(
vector
<
string
>
(
1
,
model_path_cat
)
);
vector
<
string
>
models_pathes
(
2
);
models_pathes
[
0
]
=
model_path_cat
;
models_pathes
[
1
]
=
model_path_car
;
LatentSvmDetector
detector12
(
models_pathes
);
if
(
detector1
.
empty
()
||
detector12
.
empty
()
||
detector12
.
getClassCount
()
!=
2
)
{
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_INVALID_TEST_DATA
);
return
;
}
// Run detectors
vector
<
LatentSvmDetector
::
ObjectDetection
>
detections1_cat
,
detections12_cat
,
detections12_cars
;
detector1
.
detect
(
image_cat
,
detections1_cat
,
0.5
,
numThreads
);
detector12
.
detect
(
image_cat
,
detections12_cat
,
0.5
,
numThreads
);
detector12
.
detect
(
image_cars
,
detections12_cars
,
0.5
,
numThreads
);
// Load true results
FileStorage
fs
(
true_res_path
,
FileStorage
::
READ
);
if
(
fs
.
isOpened
()
)
{
vector
<
LatentSvmDetector
::
ObjectDetection
>
true_detections1_cat
,
true_detections12_cat
,
true_detections12_cars
;
readDetections
(
fs
,
"detections1_cat"
,
true_detections1_cat
);
readDetections
(
fs
,
"detections12_cat"
,
true_detections12_cat
);
readDetections
(
fs
,
"detections12_cars"
,
true_detections12_cars
);
if
(
!
compareResults
(
detections1_cat
,
true_detections1_cat
)
)
{
std
::
cerr
<<
"Results of detector1 are invalid on image cat.jpg"
<<
std
::
endl
;
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_MISMATCH
);
}
if
(
!
compareResults
(
detections12_cat
,
true_detections12_cat
)
)
{
std
::
cerr
<<
"Results of detector12 are invalid on image cat.jpg"
<<
std
::
endl
;
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_MISMATCH
);
}
if
(
!
compareResults
(
detections12_cars
,
true_detections12_cars
)
)
{
std
::
cerr
<<
"Results of detector12 are invalid on image cars.jpg"
<<
std
::
endl
;
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_MISMATCH
);
}
}
else
{
fs
.
open
(
true_res_path
,
FileStorage
::
WRITE
);
if
(
fs
.
isOpened
()
)
{
writeDetections
(
fs
,
"detections1_cat"
,
detections1_cat
);
writeDetections
(
fs
,
"detections12_cat"
,
detections12_cat
);
writeDetections
(
fs
,
"detections12_cars"
,
detections12_cars
);
}
else
std
::
cerr
<<
"File "
<<
true_res_path
<<
" cann't be opened to save test results"
<<
std
::
endl
;
}
ts
->
set_failed_test_info
(
cvtest
::
TS
::
OK
);
}
TEST
(
Objdetect_LatentSVMDetector_c
,
regression
)
{
CV_LatentSVMDetectorTest
test
;
test
.
safe_run
();
}
TEST
(
Objdetect_LatentSVMDetector_cpp
,
regression
)
{
LatentSVMDetectorTest
test
;
test
.
safe_run
();
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment