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
f46cd9db
Commit
f46cd9db
authored
6 years ago
by
Alexander Alekhin
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #13670 from allnes:dnn_fix_obj_detect_sample
parents
37a5af36
cca2c4b3
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
35 additions
and
57 deletions
+35
-57
object_detection.cpp
samples/dnn/object_detection.cpp
+27
-39
object_detection.py
samples/dnn/object_detection.py
+8
-18
No files found.
samples/dnn/object_detection.cpp
View file @
f46cd9db
...
...
@@ -153,51 +153,39 @@ void postprocess(Mat& frame, const std::vector<Mat>& outs, Net& net)
std
::
vector
<
int
>
classIds
;
std
::
vector
<
float
>
confidences
;
std
::
vector
<
Rect
>
boxes
;
if
(
net
.
getLayer
(
0
)
->
outputNameToIndex
(
"im_info"
)
!=
-
1
)
// Faster-RCNN or R-FCN
if
(
outLayerType
==
"DetectionOutput"
)
{
// Network produces output blob with a shape 1x1xNx7 where N is a number of
// detections and an every detection is a vector of values
// [batchId, classId, confidence, left, top, right, bottom]
CV_Assert
(
outs
.
size
()
==
1
);
float
*
data
=
(
float
*
)
outs
[
0
].
data
;
for
(
size_t
i
=
0
;
i
<
outs
[
0
].
total
();
i
+=
7
)
CV_Assert
(
outs
.
size
()
>
0
);
for
(
size_t
k
=
0
;
k
<
outs
.
size
();
k
++
)
{
float
confidence
=
data
[
i
+
2
]
;
if
(
confidence
>
confThreshold
)
float
*
data
=
(
float
*
)
outs
[
k
].
data
;
for
(
size_t
i
=
0
;
i
<
outs
[
k
].
total
();
i
+=
7
)
{
int
left
=
(
int
)
data
[
i
+
3
];
int
top
=
(
int
)
data
[
i
+
4
];
int
right
=
(
int
)
data
[
i
+
5
];
int
bottom
=
(
int
)
data
[
i
+
6
];
int
width
=
right
-
left
+
1
;
int
height
=
bottom
-
top
+
1
;
classIds
.
push_back
((
int
)(
data
[
i
+
1
])
-
1
);
// Skip 0th background class id.
boxes
.
push_back
(
Rect
(
left
,
top
,
width
,
height
));
confidences
.
push_back
(
confidence
);
}
}
}
else
if
(
outLayerType
==
"DetectionOutput"
)
{
// Network produces output blob with a shape 1x1xNx7 where N is a number of
// detections and an every detection is a vector of values
// [batchId, classId, confidence, left, top, right, bottom]
CV_Assert
(
outs
.
size
()
==
1
);
float
*
data
=
(
float
*
)
outs
[
0
].
data
;
for
(
size_t
i
=
0
;
i
<
outs
[
0
].
total
();
i
+=
7
)
{
float
confidence
=
data
[
i
+
2
];
if
(
confidence
>
confThreshold
)
{
int
left
=
(
int
)(
data
[
i
+
3
]
*
frame
.
cols
);
int
top
=
(
int
)(
data
[
i
+
4
]
*
frame
.
rows
);
int
right
=
(
int
)(
data
[
i
+
5
]
*
frame
.
cols
);
int
bottom
=
(
int
)(
data
[
i
+
6
]
*
frame
.
rows
);
int
width
=
right
-
left
+
1
;
int
height
=
bottom
-
top
+
1
;
classIds
.
push_back
((
int
)(
data
[
i
+
1
])
-
1
);
// Skip 0th background class id.
boxes
.
push_back
(
Rect
(
left
,
top
,
width
,
height
));
confidences
.
push_back
(
confidence
);
float
confidence
=
data
[
i
+
2
];
if
(
confidence
>
confThreshold
)
{
int
left
=
(
int
)
data
[
i
+
3
];
int
top
=
(
int
)
data
[
i
+
4
];
int
right
=
(
int
)
data
[
i
+
5
];
int
bottom
=
(
int
)
data
[
i
+
6
];
int
width
=
right
-
left
+
1
;
int
height
=
bottom
-
top
+
1
;
if
(
width
*
height
<=
1
)
{
left
=
(
int
)(
data
[
i
+
3
]
*
frame
.
cols
);
top
=
(
int
)(
data
[
i
+
4
]
*
frame
.
rows
);
right
=
(
int
)(
data
[
i
+
5
]
*
frame
.
cols
);
bottom
=
(
int
)(
data
[
i
+
6
]
*
frame
.
rows
);
width
=
right
-
left
+
1
;
height
=
bottom
-
top
+
1
;
}
classIds
.
push_back
((
int
)(
data
[
i
+
1
])
-
1
);
// Skip 0th background class id.
boxes
.
push_back
(
Rect
(
left
,
top
,
width
,
height
));
confidences
.
push_back
(
confidence
);
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
samples/dnn/object_detection.py
View file @
f46cd9db
...
...
@@ -102,7 +102,7 @@ def postprocess(frame, outs):
classIds
=
[]
confidences
=
[]
boxes
=
[]
if
net
.
getLayer
(
0
)
.
outputNameToIndex
(
'im_info'
)
!=
-
1
:
# Faster-RCNN or R-FCN
if
lastLayer
.
type
==
'DetectionOutput'
:
# Network produces output blob with a shape 1x1xNx7 where N is a number of
# detections and an every detection is a vector of values
# [batchId, classId, confidence, left, top, right, bottom]
...
...
@@ -116,23 +116,13 @@ def postprocess(frame, outs):
bottom
=
int
(
detection
[
6
])
width
=
right
-
left
+
1
height
=
bottom
-
top
+
1
classIds
.
append
(
int
(
detection
[
1
])
-
1
)
# Skip background label
confidences
.
append
(
float
(
confidence
))
boxes
.
append
([
left
,
top
,
width
,
height
])
elif
lastLayer
.
type
==
'DetectionOutput'
:
# Network produces output blob with a shape 1x1xNx7 where N is a number of
# detections and an every detection is a vector of values
# [batchId, classId, confidence, left, top, right, bottom]
for
out
in
outs
:
for
detection
in
out
[
0
,
0
]:
confidence
=
detection
[
2
]
if
confidence
>
confThreshold
:
left
=
int
(
detection
[
3
]
*
frameWidth
)
top
=
int
(
detection
[
4
]
*
frameHeight
)
right
=
int
(
detection
[
5
]
*
frameWidth
)
bottom
=
int
(
detection
[
6
]
*
frameHeight
)
width
=
right
-
left
+
1
height
=
bottom
-
top
+
1
if
width
*
height
<=
1
:
left
=
int
(
detection
[
3
]
*
frameWidth
)
top
=
int
(
detection
[
4
]
*
frameHeight
)
right
=
int
(
detection
[
5
]
*
frameWidth
)
bottom
=
int
(
detection
[
6
]
*
frameHeight
)
width
=
right
-
left
+
1
height
=
bottom
-
top
+
1
classIds
.
append
(
int
(
detection
[
1
])
-
1
)
# Skip background label
confidences
.
append
(
float
(
confidence
))
boxes
.
append
([
left
,
top
,
width
,
height
])
...
...
This diff is collapsed.
Click to expand it.
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