Main MRPT website > C++ reference for MRPT 1.4.0
CFaceDetection.h
Go to the documentation of this file.
1/* +---------------------------------------------------------------------------+
2 | Mobile Robot Programming Toolkit (MRPT) |
3 | http://www.mrpt.org/ |
4 | |
5 | Copyright (c) 2005-2016, Individual contributors, see AUTHORS file |
6 | See: http://www.mrpt.org/Authors - All rights reserved. |
7 | Released under BSD License. See details in http://www.mrpt.org/License |
8 +---------------------------------------------------------------------------+ */
9
10#ifndef CFaceDetection_H
11#define CFaceDetection_H
12
16#include <mrpt/system/threads.h>
17#include <mrpt/synch.h>
19#include <mrpt/obs/obs_frwds.h>
20
21namespace mrpt
22{
23 /** \ingroup mrpt_detectors_grp */
24 namespace detectors
25 {
26 /** Specific class for face detection.
27 * Methods and variables labeled as experimentals are temporals (for debug or testing
28 * purposes) and may disappear in future versions.
29 * \ingroup mrpt_detectors_grp
30 */
32 {
33 public:
34
36
38
40
41 virtual void init(const mrpt::utils::CConfigFileBase &cfg );
42
44
45 struct TOptions
46 {
49
54
56
57 }m_options;
58
60 {
66
67 }m_testsOptions;
68
69 // Experimental methods
71
72 void debug_returnResults( const vector_uint &falsePositives, const vector_uint &ignore, unsigned int &falsePositivesDeleted, unsigned int &realFacesDeleted );
73
74 private:
75
76 mrpt::system::TThreadHandle m_thread_checkIfFaceRegions; //!< Thread that execute checkIfFaceRegions filter
77 mrpt::system::TThreadHandle m_thread_checkIfFacePlaneCov; //!< Thread that execute checkIfFacePlaneCov filter
78 mrpt::system::TThreadHandle m_thread_checkIfDiagonalSurface; //!< Thread that execute checkIfDiagonalSurface filter
79
80 bool m_checkIfFaceRegions_res; //!< Save result of checkIfFaceRegions filter
81 bool m_checkIfFacePlaneCov_res; //!< Save result of checkIfFacePlaneCov filter
82 bool m_checkIfDiagonalSurface_res; //!< Save result of checkIfDiagonalSurface filter
83
84 bool m_end_threads; //!< Indicates to all threads that must finish their execution
85
86 mrpt::synch::CSemaphore m_enter_checkIfFaceRegions; //!< Indicates to thread_checkIfFaceRegions that exist a new face to analyze
87 mrpt::synch::CSemaphore m_enter_checkIfFacePlaneCov; //!< Indicates to thread_checkIfFacePlaneCov that exist a new face to analyze
88 mrpt::synch::CSemaphore m_enter_checkIfDiagonalSurface; //!< Indicates to thread_checkIfDiagonalSurface that exist a new face to analyze
89
90 mrpt::synch::CSemaphore m_leave_checkIfFaceRegions; //!< Indicates to main thread that thread_checkIfFaceRegions has been completed analisis of the last face detected
91 mrpt::synch::CSemaphore m_leave_checkIfFacePlaneCov; //!< Indicates to main thread that thread_checkIfFacePlaneCov has been completed analisis of the last face detected
92 mrpt::synch::CSemaphore m_leave_checkIfDiagonalSurface; //!< Indicates to main thread that thread_checkIfDiagonalSurface has been completed analisis of the last face detected
93
95
97 {
99
103
105
110
112
114
115 }m_measure;
116
117 // To take measures abaout execution time
119
120 std::vector<double> m_meanHist;
121
122
123 // Test to check if a candidate region is a real face
124
126
128
130
132
133
135
137
139
140 size_t checkRelativePosition( const mrpt::math::TPoint3D &p1, const mrpt::math::TPoint3D &p2, const mrpt::math::TPoint3D &p, double &dist );
141
142
144
146
148
150
151 // Experimental methods to view 3D points
152
153 void experimental_viewFacePointsScanned( const std::vector<float> &xs, const std::vector<float> &ys, const std::vector<float> &zs );
154
156
157 void experimental_viewFacePointsScanned( const std::vector<mrpt::math::TPoint3D> &points );
158
159 void experimental_viewFacePointsAndEigenVects( const std::vector<mrpt::math::CArrayDouble<3> > &pointsVector, const mrpt::math::CMatrixDouble &eigenVect, const mrpt::math::CVectorDouble &eigenVal );
160
161 void experimental_viewRegions( const std::vector<mrpt::math::TPoint3D> regions[9], const mrpt::math::TPoint3D meanPos[3][3] );
162
163 // Segmentation methods
165
166 // Histogram methods
167 void experimental_calcHist( const mrpt::utils::CImage &face, const size_t &c1, const size_t &r1, const size_t &c2,
168 const size_t &r2, mrpt::math::CMatrixTemplate<unsigned int> &hist );
169
170
171
172 }; // End of class
173 }
174
175}
176
177#endif
Specific class for face detection.
mrpt::system::TThreadHandle m_thread_checkIfFacePlaneCov
Thread that execute checkIfFacePlaneCov filter.
bool m_checkIfFaceRegions_res
Save result of checkIfFaceRegions filter.
bool checkIfDiagonalSurface2(mrpt::obs::CObservation3DRangeScan *face)
void experimental_viewFacePointsScanned(const mrpt::obs::CObservation3DRangeScan &face)
virtual void detectObjects_Impl(const mrpt::obs::CObservation *obs, vector_detectable_object &detected)
void experimental_viewFacePointsScanned(const std::vector< float > &xs, const std::vector< float > &ys, const std::vector< float > &zs)
bool checkIfFacePlaneCov(mrpt::obs::CObservation3DRangeScan *face)
mrpt::synch::CSemaphore m_leave_checkIfFacePlaneCov
Indicates to main thread that thread_checkIfFacePlaneCov has been completed analisis of the last face...
void experimental_segmentFace(const mrpt::obs::CObservation3DRangeScan &face, mrpt::math::CMatrixTemplate< bool > &region)
std::vector< double > m_meanHist
static void dummy_checkIfFaceRegions(CFaceDetection *obj)
mrpt::system::TThreadHandle m_thread_checkIfDiagonalSurface
Thread that execute checkIfDiagonalSurface filter.
virtual void init(const mrpt::utils::CConfigFileBase &cfg)
Initialize the object with parameters loaded from the given config source.
mrpt::system::TThreadHandle m_thread_checkIfFaceRegions
Thread that execute checkIfFaceRegions filter.
mrpt::synch::CSemaphore m_enter_checkIfFaceRegions
Indicates to thread_checkIfFaceRegions that exist a new face to analyze.
mrpt::synch::CSemaphore m_leave_checkIfDiagonalSurface
Indicates to main thread that thread_checkIfDiagonalSurface has been completed analisis of the last f...
mrpt::synch::CSemaphore m_leave_checkIfFaceRegions
Indicates to main thread that thread_checkIfFaceRegions has been completed analisis of the last face ...
size_t checkRelativePosition(const mrpt::math::TPoint3D &p1, const mrpt::math::TPoint3D &p2, const mrpt::math::TPoint3D &p, double &dist)
mrpt::obs::CObservation3DRangeScan m_lastFaceDetected
Last face detected.
mrpt::utils::CTimeLogger m_timeLog
CCascadeClassifierDetection cascadeClassifier
bool m_end_threads
Indicates to all threads that must finish their execution.
bool checkIfFacePlane(mrpt::obs::CObservation3DRangeScan *face)
bool m_checkIfFacePlaneCov_res
Save result of checkIfFacePlaneCov filter.
static void dummy_checkIfFacePlaneCov(CFaceDetection *obj)
void experimental_viewFacePointsScanned(const std::vector< mrpt::math::TPoint3D > &points)
mrpt::synch::CSemaphore m_enter_checkIfFacePlaneCov
Indicates to thread_checkIfFacePlaneCov that exist a new face to analyze.
bool checkIfDiagonalSurface(mrpt::obs::CObservation3DRangeScan *face)
mrpt::synch::CSemaphore m_enter_checkIfDiagonalSurface
Indicates to thread_checkIfDiagonalSurface that exist a new face to analyze.
void experimental_calcHist(const mrpt::utils::CImage &face, const size_t &c1, const size_t &r1, const size_t &c2, const size_t &r2, mrpt::math::CMatrixTemplate< unsigned int > &hist)
void experimental_viewRegions(const std::vector< mrpt::math::TPoint3D > regions[9], const mrpt::math::TPoint3D meanPos[3][3])
void debug_returnResults(const vector_uint &falsePositives, const vector_uint &ignore, unsigned int &falsePositivesDeleted, unsigned int &realFacesDeleted)
bool m_checkIfDiagonalSurface_res
Save result of checkIfDiagonalSurface filter.
void experimental_viewFacePointsAndEigenVects(const std::vector< mrpt::math::CArrayDouble< 3 > > &pointsVector, const mrpt::math::CMatrixDouble &eigenVect, const mrpt::math::CVectorDouble &eigenVal)
static void dummy_checkIfDiagonalSurface(CFaceDetection *obj)
bool checkIfFaceRegions(mrpt::obs::CObservation3DRangeScan *face)
A partial specialization of CArrayNumeric for double numbers.
Definition: CArrayNumeric.h:75
This template class provides the basic functionality for a general 2D any-size, resizable container o...
Column vector, like Eigen::MatrixX*, but automatically initialized to zeros since construction.
Definition: types_math.h:65
Declares a class derived from "CObservation" that encapsules a 3D range scan measurement,...
Declares a class that represents any robot's observation.
A semaphore for inter-thread synchronization.
Definition: CSemaphore.h:32
This class allows loading and storing values and vectors of different types from a configuration text...
A class for storing images as grayscale or RGB bitmaps.
Definition: CImage.h:102
A versatile "profiler" that logs the time spent within each pair of calls to enter(X)-leave(X),...
Definition: CTimeLogger.h:36
std::vector< uint32_t > vector_uint
Definition: types_simple.h:28
std::vector< CDetectableObjectPtr > vector_detectable_object
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
Lightweight 3D point.
This structure contains the information needed to interface the threads API on each platform:
Definition: threads.h:26



Page generated by Doxygen 1.9.6 for MRPT 1.4.0 SVN: at Fri Jan 20 00:13:14 UTC 2023