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
3f8d87d8
Commit
3f8d87d8
authored
Mar 18, 2013
by
cuda-geek
Committed by
OpenCV Buildbot
Mar 18, 2013
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #661 from cuda-geek:merge-cpu-gpu-detections
parents
f768d8c9
43db0d54
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
47 additions
and
54 deletions
+47
-54
softcascade.hpp
modules/softcascade/include/opencv2/softcascade.hpp
+8
-18
perf_cuda_softcascade.cpp
modules/softcascade/perf/perf_cuda_softcascade.cpp
+5
-5
perf_softcascade.cpp
modules/softcascade/perf/perf_softcascade.cpp
+1
-1
detector.cpp
modules/softcascade/src/detector.cpp
+23
-20
octave.cpp
modules/softcascade/src/octave.cpp
+0
-0
test_cuda_softcascade.cpp
modules/softcascade/test/test_cuda_softcascade.cpp
+4
-4
peopledetect.cpp
samples/cpp/peopledetect.cpp
+3
-4
softcascade.cpp
samples/gpu/softcascade.cpp
+3
-2
No files found.
modules/softcascade/include/opencv2/softcascade.hpp
View file @
3f8d87d8
...
...
@@ -49,18 +49,21 @@
namespace
cv
{
namespace
softcascade
{
// Representation of detectors result.
// We assume that image is less then 2^16x2^16.
struct
CV_EXPORTS
Detection
{
// Default object type.
enum
{
PEDESTRIAN
=
1
};
// Creates Detection from an object bounding box and confidence.
// Param b is a bounding box
// Param c is a confidence that object belongs to class k
// Param k is an object class
Detection
(
const
cv
::
Rect
&
b
,
const
float
c
,
int
k
=
PEDESTRIAN
)
:
bb
(
b
),
confidence
(
c
),
kind
(
k
)
{}
Detection
(
const
cv
::
Rect
&
b
,
const
float
c
,
int
k
=
PEDESTRIAN
);
cv
::
Rect
bb
()
const
;
enum
{
PEDESTRIAN
=
1
};
cv
::
Rect
bb
;
ushort
x
;
ushort
y
;
ushort
w
;
ushort
h
;
float
confidence
;
int
kind
;
};
...
...
@@ -247,19 +250,6 @@ class CV_EXPORTS SCascade : public cv::Algorithm
{
public
:
// Representation of detectors result.
struct
CV_EXPORTS
Detection
{
ushort
x
;
ushort
y
;
ushort
w
;
ushort
h
;
float
confidence
;
int
kind
;
enum
{
PEDESTRIAN
=
0
};
};
enum
{
NO_REJECT
=
1
,
DOLLAR
=
2
,
/*PASCAL = 4,*/
DEFAULT
=
NO_REJECT
,
NMS_MASK
=
0xF
};
// An empty cascade will be created.
...
...
modules/softcascade/perf/perf_cuda_softcascade.cpp
View file @
3f8d87d8
...
...
@@ -27,8 +27,8 @@ void fixture##_##name::__cpu() { FAIL() << "No such CPU implementation analogy";
namespace
{
struct
DetectionLess
{
bool
operator
()(
const
cv
::
softcascade
::
SCascade
::
Detection
&
a
,
const
cv
::
softcascade
::
SCascade
::
Detection
&
b
)
const
bool
operator
()(
const
cv
::
softcascade
::
Detection
&
a
,
const
cv
::
softcascade
::
Detection
&
b
)
const
{
if
(
a
.
x
!=
b
.
x
)
return
a
.
x
<
b
.
x
;
else
if
(
a
.
y
!=
b
.
y
)
return
a
.
y
<
b
.
y
;
...
...
@@ -41,7 +41,7 @@ namespace {
{
cv
::
Mat
detections
(
objects
);
typedef
cv
::
softcascade
::
SCascade
::
Detection
Detection
;
typedef
cv
::
softcascade
::
Detection
Detection
;
Detection
*
begin
=
(
Detection
*
)(
detections
.
ptr
<
char
>
(
0
));
Detection
*
end
=
(
Detection
*
)(
detections
.
ptr
<
char
>
(
0
)
+
detections
.
cols
);
std
::
sort
(
begin
,
end
,
DetectionLess
());
...
...
@@ -73,7 +73,7 @@ RUN_GPU(SCascadeTest, detect)
ASSERT_TRUE
(
cascade
.
load
(
fs
.
getFirstTopLevelNode
()));
cv
::
gpu
::
GpuMat
objectBoxes
(
1
,
10000
*
sizeof
(
cv
::
softcascade
::
SCascade
::
Detection
),
CV_8UC1
),
rois
(
colored
.
size
(),
CV_8UC1
);
cv
::
gpu
::
GpuMat
objectBoxes
(
1
,
10000
*
sizeof
(
cv
::
softcascade
::
Detection
),
CV_8UC1
),
rois
(
colored
.
size
(),
CV_8UC1
);
rois
.
setTo
(
1
);
cascade
.
detect
(
colored
,
rois
,
objectBoxes
);
...
...
@@ -215,7 +215,7 @@ RUN_GPU(SCascadeTest, detectStream)
ASSERT_TRUE
(
cascade
.
load
(
fs
.
getFirstTopLevelNode
()));
cv
::
gpu
::
GpuMat
objectBoxes
(
1
,
10000
*
sizeof
(
cv
::
softcascade
::
SCascade
::
Detection
),
CV_8UC1
),
rois
(
colored
.
size
(),
CV_8UC1
);
cv
::
gpu
::
GpuMat
objectBoxes
(
1
,
10000
*
sizeof
(
cv
::
softcascade
::
Detection
),
CV_8UC1
),
rois
(
colored
.
size
(),
CV_8UC1
);
rois
.
setTo
(
1
);
cv
::
gpu
::
Stream
s
;
...
...
modules/softcascade/perf/perf_softcascade.cpp
View file @
3f8d87d8
...
...
@@ -17,7 +17,7 @@ void extractRacts(std::vector<Detection> objectBoxes, std::vector<Rect>& rects)
{
rects
.
clear
();
for
(
int
i
=
0
;
i
<
(
int
)
objectBoxes
.
size
();
++
i
)
rects
.
push_back
(
objectBoxes
[
i
].
bb
);
rects
.
push_back
(
objectBoxes
[
i
].
bb
()
);
}
}
...
...
modules/softcascade/src/
softcascade
.cpp
→
modules/softcascade/src/
detector
.cpp
View file @
3f8d87d8
...
...
@@ -42,11 +42,14 @@
#include "precomp.hpp"
using
cv
::
softcascade
::
Detection
;
using
cv
::
softcascade
::
Detector
;
using
cv
::
softcascade
::
ChannelFeatureBuilder
;
cv
::
softcascade
::
Detection
::
Detection
(
const
cv
::
Rect
&
b
,
const
float
c
,
int
k
)
:
x
(
static_cast
<
ushort
>
(
b
.
x
)),
y
(
static_cast
<
ushort
>
(
b
.
y
)),
w
(
static_cast
<
ushort
>
(
b
.
width
)),
h
(
static_cast
<
ushort
>
(
b
.
height
)),
confidence
(
c
),
kind
(
k
)
{}
using
namespace
cv
;
cv
::
Rect
cv
::
softcascade
::
Detection
::
bb
()
const
{
return
cv
::
Rect
(
x
,
y
,
w
,
h
);
}
namespace
{
...
...
@@ -151,13 +154,13 @@ struct Level
scaleshift
=
static_cast
<
int
>
(
relScale
*
(
1
<<
16
));
}
void
addDetection
(
const
int
x
,
const
int
y
,
float
confidence
,
std
::
vector
<
Detection
>&
detections
)
const
void
addDetection
(
const
int
x
,
const
int
y
,
float
confidence
,
std
::
vector
<
cv
::
softcascade
::
Detection
>&
detections
)
const
{
// fix me
int
shrinkage
=
4
;
//(*octave).shrinkage;
cv
::
Rect
rect
(
cvRound
(
x
*
shrinkage
),
cvRound
(
y
*
shrinkage
),
objSize
.
width
,
objSize
.
height
);
detections
.
push_back
(
Detection
(
rect
,
confidence
));
detections
.
push_back
(
cv
::
softcascade
::
Detection
(
rect
,
confidence
));
}
float
rescale
(
cv
::
Rect
&
scaledRect
,
const
float
threshold
,
int
idx
)
const
...
...
@@ -183,7 +186,7 @@ struct ChannelStorage
size_t
step
;
int
model_height
;
cv
::
Ptr
<
ChannelFeatureBuilder
>
builder
;
cv
::
Ptr
<
cv
::
softcascade
::
ChannelFeatureBuilder
>
builder
;
enum
{
HOG_BINS
=
6
,
HOG_LUV_BINS
=
10
};
...
...
@@ -192,7 +195,7 @@ struct ChannelStorage
model_height
=
cvRound
(
colored
.
rows
/
(
float
)
shrinkage
);
if
(
featureTypeStr
==
"ICF"
)
featureTypeStr
=
"HOG6MagLuv"
;
builder
=
ChannelFeatureBuilder
::
create
(
featureTypeStr
);
builder
=
cv
::
softcascade
::
ChannelFeatureBuilder
::
create
(
featureTypeStr
);
(
*
builder
)(
colored
,
hog
,
cv
::
Size
(
cvRound
(
colored
.
cols
/
(
float
)
shrinkage
),
model_height
));
step
=
hog
.
step1
();
...
...
@@ -213,8 +216,7 @@ struct ChannelStorage
}
struct
Detector
::
Fields
struct
cv
::
softcascade
::
Detector
::
Fields
{
float
minScale
;
float
maxScale
;
...
...
@@ -421,17 +423,17 @@ struct Detector::Fields
}
};
Detector
::
Detector
(
const
double
mins
,
const
double
maxs
,
const
int
nsc
,
const
int
rej
)
cv
::
softcascade
::
Detector
::
Detector
(
const
double
mins
,
const
double
maxs
,
const
int
nsc
,
const
int
rej
)
:
fields
(
0
),
minScale
(
mins
),
maxScale
(
maxs
),
scales
(
nsc
),
rejCriteria
(
rej
)
{}
Detector
::~
Detector
()
{
delete
fields
;}
cv
::
softcascade
::
Detector
::~
Detector
()
{
delete
fields
;}
void
Detector
::
read
(
const
cv
::
FileNode
&
fn
)
void
cv
::
softcascade
::
Detector
::
read
(
const
cv
::
FileNode
&
fn
)
{
Algorithm
::
read
(
fn
);
}
bool
Detector
::
load
(
const
cv
::
FileNode
&
fn
)
bool
cv
::
softcascade
::
Detector
::
load
(
const
cv
::
FileNode
&
fn
)
{
if
(
fields
)
delete
fields
;
...
...
@@ -473,7 +475,7 @@ void DollarNMS(dvector& objects)
{
const
Detection
&
b
=
*
next
;
const
float
ovl
=
overlap
(
a
.
bb
,
b
.
bb
)
/
std
::
min
(
a
.
bb
.
area
(),
b
.
bb
.
area
());
const
float
ovl
=
overlap
(
a
.
bb
(),
b
.
bb
())
/
std
::
min
(
a
.
bb
().
area
(),
b
.
bb
()
.
area
());
if
(
ovl
>
DollarThreshold
)
next
=
objects
.
erase
(
next
);
...
...
@@ -485,13 +487,13 @@ void DollarNMS(dvector& objects)
static
void
suppress
(
int
type
,
std
::
vector
<
Detection
>&
objects
)
{
CV_Assert
(
type
==
Detector
::
DOLLAR
);
CV_Assert
(
type
==
cv
::
softcascade
::
Detector
::
DOLLAR
);
DollarNMS
(
objects
);
}
}
void
Detector
::
detectNoRoi
(
const
cv
::
Mat
&
image
,
std
::
vector
<
Detection
>&
objects
)
const
void
cv
::
softcascade
::
Detector
::
detectNoRoi
(
const
cv
::
Mat
&
image
,
std
::
vector
<
Detection
>&
objects
)
const
{
Fields
&
fld
=
*
fields
;
// create integrals
...
...
@@ -518,7 +520,7 @@ void Detector::detectNoRoi(const cv::Mat& image, std::vector<Detection>& objects
if
(
rejCriteria
!=
NO_REJECT
)
suppress
(
rejCriteria
,
objects
);
}
void
Detector
::
detect
(
cv
::
InputArray
_image
,
cv
::
InputArray
_rois
,
std
::
vector
<
Detection
>&
objects
)
const
void
cv
::
softcascade
::
Detector
::
detect
(
cv
::
InputArray
_image
,
cv
::
InputArray
_rois
,
std
::
vector
<
Detection
>&
objects
)
const
{
// only color images are suppered
cv
::
Mat
image
=
_image
.
getMat
();
...
...
@@ -570,7 +572,7 @@ void Detector::detect(cv::InputArray _image, cv::InputArray _rois, std::vector<D
if
(
rejCriteria
!=
NO_REJECT
)
suppress
(
rejCriteria
,
objects
);
}
void
Detector
::
detect
(
InputArray
_image
,
InputArray
_rois
,
OutputArray
_rects
,
OutputArray
_confs
)
const
void
cv
::
softcascade
::
Detector
::
detect
(
InputArray
_image
,
InputArray
_rois
,
OutputArray
_rects
,
OutputArray
_confs
)
const
{
std
::
vector
<
Detection
>
objects
;
detect
(
_image
,
_rois
,
objects
);
...
...
@@ -588,7 +590,7 @@ void Detector::detect(InputArray _image, InputArray _rois, OutputArray _rects,
int
i
=
0
;
for
(
IDet
it
=
objects
.
begin
();
it
!=
objects
.
end
();
++
it
,
++
i
)
{
rectPtr
[
i
]
=
(
*
it
).
bb
;
rectPtr
[
i
]
=
(
*
it
).
bb
()
;
confPtr
[
i
]
=
(
*
it
).
confidence
;
}
}
\ No newline at end of file
modules/softcascade/src/
soft_cascade_
octave.cpp
→
modules/softcascade/src/octave.cpp
View file @
3f8d87d8
File moved
modules/softcascade/test/test_cuda_softcascade.cpp
View file @
3f8d87d8
...
...
@@ -76,7 +76,7 @@ TEST(SCascadeTest, readCascade)
namespace
{
typedef
cv
::
softcascade
::
SCascade
::
Detection
Detection
;
typedef
cv
::
softcascade
::
Detection
Detection
;
cv
::
Rect
getFromTable
(
int
idx
)
{
...
...
@@ -194,7 +194,7 @@ TEST_P(SCascadeTestRoi, Detect)
cascade
.
detect
(
colored
,
rois
,
objectBoxes
);
cv
::
Mat
dt
(
objectBoxes
);
typedef
cv
::
softcascade
::
SCascade
::
Detection
Detection
;
typedef
cv
::
softcascade
::
Detection
Detection
;
Detection
*
dts
=
((
Detection
*
)
dt
.
data
)
+
1
;
int
*
count
=
dt
.
ptr
<
int
>
(
0
);
...
...
@@ -262,7 +262,7 @@ TEST_P(SCascadeTestAll, detect)
cascade
.
detect
(
colored
,
rois
,
objectBoxes
);
typedef
cv
::
softcascade
::
SCascade
::
Detection
Detection
;
typedef
cv
::
softcascade
::
Detection
Detection
;
cv
::
Mat
dt
(
objectBoxes
);
...
...
@@ -303,7 +303,7 @@ TEST_P(SCascadeTestAll, detectStream)
cascade
.
detect
(
colored
,
rois
,
objectBoxes
,
s
);
s
.
waitForCompletion
();
typedef
cv
::
softcascade
::
SCascade
::
Detection
Detection
;
typedef
cv
::
softcascade
::
Detection
Detection
;
cv
::
Mat
detections
(
objectBoxes
);
int
a
=
*
(
detections
.
ptr
<
int
>
(
0
));
ASSERT_EQ
(
a
,
expected
);
...
...
samples/cpp/peopledetect.cpp
View file @
3f8d87d8
...
...
@@ -139,12 +139,11 @@ int main(int argc, char** argv)
std
::
stringstream
conf
(
std
::
stringstream
::
in
|
std
::
stringstream
::
out
);
conf
<<
d
.
confidence
;
cv
::
rectangle
(
frame
,
cv
::
Rect
(
d
.
bb
.
x
,
d
.
bb
.
y
,
d
.
bb
.
width
,
d
.
bb
.
height
),
cv
::
Scalar
(
b
,
0
,
255
-
b
,
255
),
2
);
cv
::
putText
(
frame
,
conf
.
str
()
,
cv
::
Point
(
d
.
bb
.
x
+
10
,
d
.
bb
.
y
-
5
),
1
,
1.1
,
cv
::
Scalar
(
25
,
133
,
255
,
0
),
1
,
CV_AA
);
cv
::
rectangle
(
frame
,
cv
::
Rect
(
(
int
)
d
.
x
,
(
int
)
d
.
y
,
(
int
)
d
.
w
,
(
int
)
d
.
h
),
cv
::
Scalar
(
b
,
0
,
255
-
b
,
255
),
2
);
cv
::
putText
(
frame
,
conf
.
str
()
,
cv
::
Point
(
(
int
)
d
.
x
+
10
,
(
int
)
d
.
y
-
5
),
1
,
1.1
,
cv
::
Scalar
(
25
,
133
,
255
,
0
),
1
,
CV_AA
);
if
(
wf
)
myfile
<<
d
.
bb
.
x
<<
","
<<
d
.
bb
.
y
<<
","
<<
d
.
bb
.
width
<<
","
<<
d
.
bb
.
height
<<
","
<<
d
.
confidence
<<
"
\n
"
;
myfile
<<
d
.
x
<<
","
<<
d
.
y
<<
","
<<
d
.
w
<<
","
<<
d
.
h
<<
","
<<
d
.
confidence
<<
"
\n
"
;
}
}
}
...
...
samples/gpu/softcascade.cpp
View file @
3f8d87d8
...
...
@@ -3,6 +3,8 @@
#include <opencv2/highgui.hpp>
#include <iostream>
typedef
cv
::
softcascade
::
Detection
Detection
;
int
main
(
int
argc
,
char
**
argv
)
{
const
std
::
string
keys
=
...
...
@@ -64,7 +66,7 @@ int main(int argc, char** argv)
return
1
;
}
cv
::
gpu
::
GpuMat
objects
(
1
,
sizeof
(
SCascade
::
Detection
)
*
10000
,
CV_8UC1
);
cv
::
gpu
::
GpuMat
objects
(
1
,
sizeof
(
Detection
)
*
10000
,
CV_8UC1
);
cv
::
gpu
::
printShortCudaDeviceInfo
(
parser
.
get
<
int
>
(
"device"
));
for
(;;)
{
...
...
@@ -80,7 +82,6 @@ int main(int argc, char** argv)
cascade
.
detect
(
dframe
,
roi
,
objects
);
cv
::
Mat
dt
(
objects
);
typedef
cv
::
softcascade
::
SCascade
::
Detection
Detection
;
Detection
*
dts
=
((
Detection
*
)
dt
.
data
)
+
1
;
int
*
count
=
dt
.
ptr
<
int
>
(
0
);
...
...
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