Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
2a391282
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2a391282
编写于
4月 27, 2012
作者:
A
Andrey Kamaev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Updated latentSVM tests and data
上级
f14d80ab
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
65 addition
and
59 deletion
+65
-59
modules/objdetect/test/test_latentsvmdetector.cpp
modules/objdetect/test/test_latentsvmdetector.cpp
+65
-59
未找到文件。
modules/objdetect/test/test_latentsvmdetector.cpp
浏览文件 @
2a391282
...
...
@@ -61,23 +61,17 @@ const CvRect true_bounding_boxes[3] = {cvRect(0, 45, 362, 452), cvRect(304, 0, 6
class
CV_LatentSVMDetectorTest
:
public
cvtest
::
BaseTest
{
public:
CV_LatentSVMDetectorTest
();
~
CV_LatentSVMDetectorTest
();
protected:
void
run
(
int
);
bool
isEqual
(
CvRect
r1
,
CvRect
r2
);
bool
isEqual
(
CvRect
r1
,
CvRect
r2
,
int
eps
);
};
CV_LatentSVMDetectorTest
::
CV_LatentSVMDetectorTest
(
)
bool
CV_LatentSVMDetectorTest
::
isEqual
(
CvRect
r1
,
CvRect
r2
,
int
eps
)
{
}
CV_LatentSVMDetectorTest
::~
CV_LatentSVMDetectorTest
()
{}
bool
CV_LatentSVMDetectorTest
::
isEqual
(
CvRect
r1
,
CvRect
r2
)
{
return
((
r1
.
x
==
r2
.
x
)
&&
(
r1
.
y
==
r2
.
y
)
&&
(
r1
.
width
==
r2
.
width
)
&&
(
r1
.
height
==
r2
.
height
));
return
(
std
::
abs
(
r1
.
x
-
r2
.
x
)
<=
eps
&&
std
::
abs
(
r1
.
y
-
r2
.
y
)
<=
eps
&&
std
::
abs
(
r1
.
width
-
r2
.
width
)
<=
eps
&&
std
::
abs
(
r1
.
height
-
r2
.
height
)
<=
eps
);
}
void
CV_LatentSVMDetectorTest
::
run
(
int
/* start_from */
)
...
...
@@ -85,53 +79,55 @@ 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/models_VOC2007/cat.xml"
;
int
numThreads
=
-
1
;
#ifdef HAVE_TBB
numThreads
=
2
;
tbb
::
task_scheduler_init
init
(
tbb
::
task_scheduler_init
::
deferred
);
init
.
initialize
(
numThreads
);
init
.
initialize
(
numThreads
);
#endif
IplImage
*
image
=
cvLoadImage
(
img_path
.
c_str
());
if
(
!
image
)
IplImage
*
image
=
cvLoadImage
(
img_path
.
c_str
());
if
(
!
image
)
{
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_INVALID_TEST_DATA
);
return
;
}
CvLatentSvmDetector
*
detector
=
cvLoadLatentSvmDetector
(
model_path
.
c_str
());
if
(
!
detector
)
{
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_INVALID_TEST_DATA
);
cvReleaseImage
(
&
image
);
return
;
}
CvLatentSvmDetector
*
detector
=
cvLoadLatentSvmDetector
(
model_path
.
c_str
());
if
(
!
detector
)
{
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_INVALID_TEST_DATA
);
cvReleaseImage
(
&
image
);
return
;
}
CvMemStorage
*
storage
=
cvCreateMemStorage
(
0
);
CvMemStorage
*
storage
=
cvCreateMemStorage
(
0
);
CvSeq
*
detections
=
0
;
detections
=
cvLatentSvmDetectObjects
(
image
,
detector
,
storage
,
0.5
f
,
numThreads
);
if
(
detections
->
total
!=
num_detections
)
{
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_MISMATCH
);
}
else
{
ts
->
set_failed_test_info
(
cvtest
::
TS
::
OK
);
for
(
int
i
=
0
;
i
<
detections
->
total
;
i
++
)
{
CvObjectDetection
detection
=
*
(
CvObjectDetection
*
)
cvGetSeqElem
(
detections
,
i
);
CvRect
bounding_box
=
detection
.
rect
;
float
score
=
detection
.
score
;
if
((
!
isEqual
(
bounding_box
,
true_bounding_boxes
[
i
]
))
||
(
fabs
(
score
-
true_scores
[
i
])
>
score_thr
))
{
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_MISMATCH
);
break
;
}
}
}
if
(
detections
->
total
!=
num_detections
)
{
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_MISMATCH
);
}
else
{
ts
->
set_failed_test_info
(
cvtest
::
TS
::
OK
);
for
(
int
i
=
0
;
i
<
detections
->
total
;
i
++
)
{
CvObjectDetection
detection
=
*
(
CvObjectDetection
*
)
cvGetSeqElem
(
detections
,
i
);
CvRect
bounding_box
=
detection
.
rect
;
float
score
=
detection
.
score
;
if
((
!
isEqual
(
bounding_box
,
true_bounding_boxes
[
i
],
1
))
||
(
fabs
(
score
-
true_scores
[
i
])
>
score_thr
))
{
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_MISMATCH
);
break
;
}
}
}
#ifdef HAVE_TBB
init
.
terminate
();
#endif
cvReleaseMemStorage
(
&
storage
);
cvReleaseLatentSvmDetector
(
&
detector
);
cvReleaseMemStorage
(
&
storage
);
cvReleaseLatentSvmDetector
(
&
detector
);
cvReleaseImage
(
&
image
);
}
...
...
@@ -139,16 +135,10 @@ void CV_LatentSVMDetectorTest::run( int /* start_from */)
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
<<
"["
;
...
...
@@ -176,14 +166,24 @@ static void readDetections( FileStorage fs, const string& nodeName, vector<Laten
}
}
static
inline
bool
isEqual
(
const
LatentSvmDetector
::
ObjectDetection
&
d1
,
const
LatentSvmDetector
::
ObjectDetection
&
d2
)
static
inline
bool
isEqual
(
const
LatentSvmDetector
::
ObjectDetection
&
d1
,
const
LatentSvmDetector
::
ObjectDetection
&
d2
,
int
eps
,
float
threshold
)
{
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
);
return
(
std
::
abs
(
d1
.
rect
.
x
-
d2
.
rect
.
x
)
<=
eps
&&
std
::
abs
(
d1
.
rect
.
y
-
d2
.
rect
.
y
)
<=
eps
&&
std
::
abs
(
d1
.
rect
.
width
-
d2
.
rect
.
width
)
<=
eps
&&
std
::
abs
(
d1
.
rect
.
height
-
d2
.
rect
.
height
)
<=
eps
&&
(
d1
.
classID
==
d2
.
classID
)
&&
std
::
abs
(
d1
.
score
-
d2
.
score
)
<=
threshold
);
}
bool
compareResults
(
const
vector
<
LatentSvmDetector
::
ObjectDetection
>&
calc
,
const
vector
<
LatentSvmDetector
::
ObjectDetection
>&
valid
)
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
CvRect
&
r
)
{
return
(
os
<<
"[x="
<<
r
.
x
<<
", y="
<<
r
.
y
<<
", w="
<<
r
.
width
<<
", h="
<<
r
.
height
<<
"]"
);
}
bool
compareResults
(
const
vector
<
LatentSvmDetector
::
ObjectDetection
>&
calc
,
const
vector
<
LatentSvmDetector
::
ObjectDetection
>&
valid
,
int
eps
,
float
threshold
)
{
if
(
calc
.
size
()
!=
valid
.
size
()
)
return
false
;
...
...
@@ -192,8 +192,12 @@ bool compareResults( const vector<LatentSvmDetector::ObjectDetection>& calc, con
{
const
LatentSvmDetector
::
ObjectDetection
&
c
=
calc
[
i
];
const
LatentSvmDetector
::
ObjectDetection
&
v
=
valid
[
i
];
if
(
!
isEqual
(
c
,
v
)
)
if
(
!
isEqual
(
c
,
v
,
eps
,
threshold
)
)
{
std
::
cerr
<<
"Expected: "
<<
v
.
rect
<<
" class="
<<
v
.
classID
<<
" score="
<<
v
.
score
<<
std
::
endl
;
std
::
cerr
<<
"Actual: "
<<
c
.
rect
<<
" class="
<<
c
.
classID
<<
" score="
<<
c
.
score
<<
std
::
endl
;
return
false
;
}
}
return
true
;
}
...
...
@@ -209,9 +213,11 @@ void LatentSVMDetectorTest::run( int /* start_from */)
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
()
)
...
...
@@ -255,17 +261,17 @@ void LatentSVMDetectorTest::run( int /* start_from */)
readDetections
(
fs
,
"detections12_cars"
,
true_detections12_cars
);
if
(
!
compareResults
(
detections1_cat
,
true_detections1_cat
)
)
if
(
!
compareResults
(
detections1_cat
,
true_detections1_cat
,
1
,
score_thr
)
)
{
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
)
)
if
(
!
compareResults
(
detections12_cat
,
true_detections12_cat
,
1
,
score_thr
)
)
{
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
)
)
if
(
!
compareResults
(
detections12_cars
,
true_detections12_cars
,
1
,
score_thr
)
)
{
std
::
cerr
<<
"Results of detector12 are invalid on image cars.jpg"
<<
std
::
endl
;
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_MISMATCH
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录