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 
15 #include <mrpt/utils/CTimeLogger.h>
16 #include <mrpt/system/threads.h>
17 #include <mrpt/synch.h>
19 #include <mrpt/obs/obs_frwds.h>
20 
21 namespace 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 
55  bool batchMode;
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 
96  struct TMeasurement
97  {
99 
103 
105 
106  int faceNum;
110 
111  bool takeTime;
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)
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.1 for MRPT 1.4.0 SVN: at Mon Apr 18 03:37:47 UTC 2022