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
3a4bc0d4
Commit
3a4bc0d4
authored
Nov 06, 2018
by
Alexander Alekhin
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #13055 from vpisarev:remove_old_haar
parents
687fa6a8
b8175f89
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
3 additions
and
352 deletions
+3
-352
objdetect_c.h
modules/objdetect/include/opencv2/objdetect/objdetect_c.h
+0
-166
cascadedetect.cpp
modules/objdetect/src/cascadedetect.cpp
+3
-48
haar.avx.cpp
modules/objdetect/src/haar.avx.cpp
+0
-0
haar.cpp
modules/objdetect/src/haar.cpp
+0
-0
haar.hpp
modules/objdetect/src/haar.hpp
+0
-101
test_cascadeandhog.cpp
modules/objdetect/test/test_cascadeandhog.cpp
+0
-36
test_precomp.hpp
modules/objdetect/test/test_precomp.hpp
+0
-1
No files found.
modules/objdetect/include/opencv2/objdetect/objdetect_c.h
deleted
100644 → 0
View file @
687fa6a8
/*M///////////////////////////////////////////////////////////////////////////////////////
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of the copyright holders may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/
#ifndef OPENCV_OBJDETECT_C_H
#define OPENCV_OBJDETECT_C_H
#include "opencv2/core/core_c.h"
#ifdef __cplusplus
#include <deque>
#include <vector>
extern
"C"
{
#endif
/** @addtogroup objdetect_c
@{
*/
/****************************************************************************************\
* Haar-like Object Detection functions *
\****************************************************************************************/
#define CV_HAAR_MAGIC_VAL 0x42500000
#define CV_TYPE_NAME_HAAR "opencv-haar-classifier"
#define CV_IS_HAAR_CLASSIFIER( haar ) \
((haar) != NULL && \
(((const CvHaarClassifierCascade*)(haar))->flags & CV_MAGIC_MASK)==CV_HAAR_MAGIC_VAL)
#define CV_HAAR_FEATURE_MAX 3
#define CV_HAAR_STAGE_MAX 1000
typedef
struct
CvHaarFeature
{
int
tilted
;
struct
{
CvRect
r
;
float
weight
;
}
rect
[
CV_HAAR_FEATURE_MAX
];
}
CvHaarFeature
;
typedef
struct
CvHaarClassifier
{
int
count
;
CvHaarFeature
*
haar_feature
;
float
*
threshold
;
int
*
left
;
int
*
right
;
float
*
alpha
;
}
CvHaarClassifier
;
typedef
struct
CvHaarStageClassifier
{
int
count
;
float
threshold
;
CvHaarClassifier
*
classifier
;
int
next
;
int
child
;
int
parent
;
}
CvHaarStageClassifier
;
typedef
struct
CvHidHaarClassifierCascade
CvHidHaarClassifierCascade
;
typedef
struct
CvHaarClassifierCascade
{
int
flags
;
int
count
;
CvSize
orig_window_size
;
CvSize
real_window_size
;
double
scale
;
CvHaarStageClassifier
*
stage_classifier
;
CvHidHaarClassifierCascade
*
hid_cascade
;
}
CvHaarClassifierCascade
;
typedef
struct
CvAvgComp
{
CvRect
rect
;
int
neighbors
;
}
CvAvgComp
;
/* Loads haar classifier cascade from a directory.
It is obsolete: convert your cascade to xml and use cvLoad instead */
CVAPI
(
CvHaarClassifierCascade
*
)
cvLoadHaarClassifierCascade
(
const
char
*
directory
,
CvSize
orig_window_size
);
CVAPI
(
void
)
cvReleaseHaarClassifierCascade
(
CvHaarClassifierCascade
**
cascade
);
#define CV_HAAR_DO_CANNY_PRUNING 1
#define CV_HAAR_SCALE_IMAGE 2
#define CV_HAAR_FIND_BIGGEST_OBJECT 4
#define CV_HAAR_DO_ROUGH_SEARCH 8
CVAPI
(
CvSeq
*
)
cvHaarDetectObjects
(
const
CvArr
*
image
,
CvHaarClassifierCascade
*
cascade
,
CvMemStorage
*
storage
,
double
scale_factor
CV_DEFAULT
(
1
.
1
),
int
min_neighbors
CV_DEFAULT
(
3
),
int
flags
CV_DEFAULT
(
0
),
CvSize
min_size
CV_DEFAULT
(
cvSize
(
0
,
0
)),
CvSize
max_size
CV_DEFAULT
(
cvSize
(
0
,
0
)));
/* sets images for haar classifier cascade */
CVAPI
(
void
)
cvSetImagesForHaarClassifierCascade
(
CvHaarClassifierCascade
*
cascade
,
const
CvArr
*
sum
,
const
CvArr
*
sqsum
,
const
CvArr
*
tilted_sum
,
double
scale
);
/* runs the cascade on the specified window */
CVAPI
(
int
)
cvRunHaarClassifierCascade
(
const
CvHaarClassifierCascade
*
cascade
,
CvPoint
pt
,
int
start_stage
CV_DEFAULT
(
0
));
/** @} objdetect_c */
#ifdef __cplusplus
}
CV_EXPORTS
CvSeq
*
cvHaarDetectObjectsForROC
(
const
CvArr
*
image
,
CvHaarClassifierCascade
*
cascade
,
CvMemStorage
*
storage
,
std
::
vector
<
int
>&
rejectLevels
,
std
::
vector
<
double
>&
levelWeightds
,
double
scale_factor
=
1
.
1
,
int
min_neighbors
=
3
,
int
flags
=
0
,
CvSize
min_size
=
cvSize
(
0
,
0
),
CvSize
max_size
=
cvSize
(
0
,
0
),
bool
outputRejectLevels
=
false
);
#endif
#endif
/* OPENCV_OBJDETECT_C_H */
modules/objdetect/src/cascadedetect.cpp
View file @
3a4bc0d4
...
...
@@ -44,7 +44,6 @@
#include <iostream>
#include "cascadedetect.hpp"
#include "opencv2/objdetect/objdetect_c.h"
#include "opencl_kernels_objdetect.hpp"
namespace
cv
...
...
@@ -1071,9 +1070,6 @@ public:
};
struct
getRect
{
Rect
operator
()(
const
CvAvgComp
&
e
)
const
{
return
e
.
rect
;
}
};
struct
getNeighbors
{
int
operator
()(
const
CvAvgComp
&
e
)
const
{
return
e
.
neighbors
;
}
};
#ifdef HAVE_OPENCL
bool
CascadeClassifierImpl
::
ocl_detectMultiScaleNoGrouping
(
const
std
::
vector
<
float
>&
scales
,
std
::
vector
<
Rect
>&
candidates
)
...
...
@@ -1227,24 +1223,6 @@ void* CascadeClassifierImpl::getOldCascade()
return
oldCascade
;
}
static
void
detectMultiScaleOldFormat
(
const
Mat
&
image
,
Ptr
<
CvHaarClassifierCascade
>
oldCascade
,
std
::
vector
<
Rect
>&
objects
,
std
::
vector
<
int
>&
rejectLevels
,
std
::
vector
<
double
>&
levelWeights
,
std
::
vector
<
CvAvgComp
>&
vecAvgComp
,
double
scaleFactor
,
int
minNeighbors
,
int
flags
,
Size
minObjectSize
,
Size
maxObjectSize
,
bool
outputRejectLevels
=
false
)
{
MemStorage
storage
(
cvCreateMemStorage
(
0
));
CvMat
_image
=
cvMat
(
image
);
CvSeq
*
_objects
=
cvHaarDetectObjectsForROC
(
&
_image
,
oldCascade
,
storage
,
rejectLevels
,
levelWeights
,
scaleFactor
,
minNeighbors
,
flags
,
cvSize
(
minObjectSize
),
cvSize
(
maxObjectSize
),
outputRejectLevels
);
Seq
<
CvAvgComp
>
(
_objects
).
copyTo
(
vecAvgComp
);
objects
.
resize
(
vecAvgComp
.
size
());
std
::
transform
(
vecAvgComp
.
begin
(),
vecAvgComp
.
end
(),
objects
.
begin
(),
getRect
());
}
void
CascadeClassifierImpl
::
detectMultiScaleNoGrouping
(
InputArray
_image
,
std
::
vector
<
Rect
>&
candidates
,
std
::
vector
<
int
>&
rejectLevels
,
std
::
vector
<
double
>&
levelWeights
,
double
scaleFactor
,
Size
minObjectSize
,
Size
maxObjectSize
,
...
...
@@ -1374,7 +1352,7 @@ void CascadeClassifierImpl::detectMultiScale( InputArray _image, std::vector<Rec
std
::
vector
<
int
>&
rejectLevels
,
std
::
vector
<
double
>&
levelWeights
,
double
scaleFactor
,
int
minNeighbors
,
int
flags
,
Size
minObjectSize
,
Size
maxObjectSize
,
int
/*flags*/
,
Size
minObjectSize
,
Size
maxObjectSize
,
bool
outputRejectLevels
)
{
CV_INSTRUMENT_REGION
();
...
...
@@ -1384,15 +1362,6 @@ void CascadeClassifierImpl::detectMultiScale( InputArray _image, std::vector<Rec
if
(
empty
()
)
return
;
if
(
isOldFormatCascade
()
)
{
Mat
image
=
_image
.
getMat
();
std
::
vector
<
CvAvgComp
>
fakeVecAvgComp
;
detectMultiScaleOldFormat
(
image
,
oldCascade
,
objects
,
rejectLevels
,
levelWeights
,
fakeVecAvgComp
,
scaleFactor
,
minNeighbors
,
flags
,
minObjectSize
,
maxObjectSize
,
outputRejectLevels
);
}
else
{
detectMultiScaleNoGrouping
(
_image
,
objects
,
rejectLevels
,
levelWeights
,
scaleFactor
,
minObjectSize
,
maxObjectSize
,
outputRejectLevels
);
const
double
GROUP_EPS
=
0.2
;
...
...
@@ -1404,7 +1373,6 @@ void CascadeClassifierImpl::detectMultiScale( InputArray _image, std::vector<Rec
{
groupRectangles
(
objects
,
minNeighbors
,
GROUP_EPS
);
}
}
}
void
CascadeClassifierImpl
::
detectMultiScale
(
InputArray
_image
,
std
::
vector
<
Rect
>&
objects
,
...
...
@@ -1421,7 +1389,7 @@ void CascadeClassifierImpl::detectMultiScale( InputArray _image, std::vector<Rec
void
CascadeClassifierImpl
::
detectMultiScale
(
InputArray
_image
,
std
::
vector
<
Rect
>&
objects
,
std
::
vector
<
int
>&
numDetections
,
double
scaleFactor
,
int
minNeighbors
,
int
flags
,
Size
minObjectSize
,
int
minNeighbors
,
int
/*flags*/
,
Size
minObjectSize
,
Size
maxObjectSize
)
{
CV_INSTRUMENT_REGION
();
...
...
@@ -1434,20 +1402,10 @@ void CascadeClassifierImpl::detectMultiScale( InputArray _image, std::vector<Rec
std
::
vector
<
int
>
fakeLevels
;
std
::
vector
<
double
>
fakeWeights
;
if
(
isOldFormatCascade
()
)
{
std
::
vector
<
CvAvgComp
>
vecAvgComp
;
detectMultiScaleOldFormat
(
image
,
oldCascade
,
objects
,
fakeLevels
,
fakeWeights
,
vecAvgComp
,
scaleFactor
,
minNeighbors
,
flags
,
minObjectSize
,
maxObjectSize
);
numDetections
.
resize
(
vecAvgComp
.
size
());
std
::
transform
(
vecAvgComp
.
begin
(),
vecAvgComp
.
end
(),
numDetections
.
begin
(),
getNeighbors
());
}
else
{
detectMultiScaleNoGrouping
(
image
,
objects
,
fakeLevels
,
fakeWeights
,
scaleFactor
,
minObjectSize
,
maxObjectSize
);
const
double
GROUP_EPS
=
0.2
;
groupRectangles
(
objects
,
numDetections
,
minNeighbors
,
GROUP_EPS
);
}
}
...
...
@@ -1613,9 +1571,6 @@ bool CascadeClassifierImpl::read_(const FileNode& root)
return
featureEvaluator
->
read
(
fn
,
data
.
origWinSize
);
}
void
DefaultDeleter
<
CvHaarClassifierCascade
>::
operator
()(
CvHaarClassifierCascade
*
obj
)
const
{
cvReleaseHaarClassifierCascade
(
&
obj
);
}
BaseCascadeClassifier
::~
BaseCascadeClassifier
()
{
}
...
...
modules/objdetect/src/haar.avx.cpp
deleted
100644 → 0
View file @
687fa6a8
This diff is collapsed.
Click to expand it.
modules/objdetect/src/haar.cpp
deleted
100644 → 0
View file @
687fa6a8
This diff is collapsed.
Click to expand it.
modules/objdetect/src/haar.hpp
deleted
100644 → 0
View file @
687fa6a8
/*M///////////////////////////////////////////////////////////////////////////////////////
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// Intel License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2000, Intel Corporation, all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of Intel Corporation may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/
/* Haar features calculation */
#ifndef OPENCV_OBJDETECT_HAAR_HPP
#define OPENCV_OBJDETECT_HAAR_HPP
#define CV_HAAR_FEATURE_MAX_LOCAL 3
typedef
int
sumtype
;
typedef
double
sqsumtype
;
typedef
struct
CvHidHaarFeature
{
struct
{
sumtype
*
p0
,
*
p1
,
*
p2
,
*
p3
;
float
weight
;
}
rect
[
CV_HAAR_FEATURE_MAX_LOCAL
];
}
CvHidHaarFeature
;
typedef
struct
CvHidHaarTreeNode
{
CvHidHaarFeature
feature
;
float
threshold
;
int
left
;
int
right
;
}
CvHidHaarTreeNode
;
typedef
struct
CvHidHaarClassifier
{
int
count
;
//CvHaarFeature* orig_feature;
CvHidHaarTreeNode
*
node
;
float
*
alpha
;
}
CvHidHaarClassifier
;
#define calc_sumf(rect,offset) \
static_cast<float>((rect).p0[offset] - (rect).p1[offset] - (rect).p2[offset] + (rect).p3[offset])
namespace
cv_haar_avx
{
#if 0 /*CV_TRY_AVX*/
#define CV_HAAR_USE_AVX 1
#else
#define CV_HAAR_USE_AVX 0
#endif
#if CV_HAAR_USE_AVX
// AVX version icvEvalHidHaarClassifier. Process 8 CvHidHaarClassifiers per call. Check AVX support before invocation!!
double
icvEvalHidHaarClassifierAVX
(
CvHidHaarClassifier
*
classifier
,
double
variance_norm_factor
,
size_t
p_offset
);
double
icvEvalHidHaarStumpClassifierAVX
(
CvHidHaarClassifier
*
classifier
,
double
variance_norm_factor
,
size_t
p_offset
);
double
icvEvalHidHaarStumpClassifierTwoRectAVX
(
CvHidHaarClassifier
*
classifier
,
double
variance_norm_factor
,
size_t
p_offset
);
#endif
}
#endif
/* End of file. */
modules/objdetect/test/test_cascadeandhog.cpp
View file @
3a4bc0d4
...
...
@@ -404,7 +404,6 @@ protected:
virtual
void
readDetector
(
const
FileNode
&
fn
);
virtual
void
writeDetector
(
FileStorage
&
fs
,
int
di
);
virtual
int
detectMultiScale
(
int
di
,
const
Mat
&
img
,
vector
<
Rect
>&
objects
);
virtual
int
detectMultiScale_C
(
const
string
&
filename
,
int
di
,
const
Mat
&
img
,
vector
<
Rect
>&
objects
);
vector
<
int
>
flags
;
};
...
...
@@ -434,36 +433,6 @@ void CV_CascadeDetectorTest::writeDetector( FileStorage& fs, int di )
fs
<<
C_SCALE_CASCADE
<<
sc
;
}
int
CV_CascadeDetectorTest
::
detectMultiScale_C
(
const
string
&
filename
,
int
di
,
const
Mat
&
img
,
vector
<
Rect
>&
objects
)
{
Ptr
<
CvHaarClassifierCascade
>
c_cascade
(
cvLoadHaarClassifierCascade
(
filename
.
c_str
(),
cvSize
(
0
,
0
)));
Ptr
<
CvMemStorage
>
storage
(
cvCreateMemStorage
());
if
(
!
c_cascade
)
{
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"cascade %s can not be opened"
);
return
cvtest
::
TS
::
FAIL_INVALID_TEST_DATA
;
}
Mat
grayImg
;
cvtColor
(
img
,
grayImg
,
COLOR_BGR2GRAY
);
equalizeHist
(
grayImg
,
grayImg
);
CvMat
c_gray
=
cvMat
(
grayImg
);
CvSeq
*
rs
=
cvHaarDetectObjects
(
&
c_gray
,
c_cascade
,
storage
,
1.1
,
3
,
flags
[
di
]
);
objects
.
clear
();
for
(
int
i
=
0
;
i
<
rs
->
total
;
i
++
)
{
Rect
r
=
*
(
Rect
*
)
cvGetSeqElem
(
rs
,
i
);
objects
.
push_back
(
r
);
}
return
cvtest
::
TS
::
OK
;
}
int
CV_CascadeDetectorTest
::
detectMultiScale
(
int
di
,
const
Mat
&
img
,
vector
<
Rect
>&
objects
)
{
...
...
@@ -471,11 +440,6 @@ int CV_CascadeDetectorTest::detectMultiScale( int di, const Mat& img,
filename
=
dataPath
+
detectorFilenames
[
di
];
const
string
pattern
=
"haarcascade_frontalface_default.xml"
;
if
(
filename
.
size
()
>=
pattern
.
size
()
&&
strcmp
(
filename
.
c_str
()
+
(
filename
.
size
()
-
pattern
.
size
()),
pattern
.
c_str
())
==
0
)
return
detectMultiScale_C
(
filename
,
di
,
img
,
objects
);
CascadeClassifier
cascade
(
filename
);
if
(
cascade
.
empty
()
)
{
...
...
modules/objdetect/test/test_precomp.hpp
View file @
3a4bc0d4
...
...
@@ -6,6 +6,5 @@
#include "opencv2/ts.hpp"
#include "opencv2/objdetect.hpp"
#include "opencv2/objdetect/objdetect_c.h"
#endif
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