Main MRPT website > C++ reference for MRPT 1.5.6
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-2017, 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/CSemaphore.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 
39  ~CFaceDetection();
40 
41  virtual void init(const mrpt::utils::CConfigFileBase &cfg );
42 
43  virtual void detectObjects_Impl(const mrpt::obs::CObservation *obs, vector_detectable_object &detected);
44 
45  struct TOptions
46  {
49 
54 
55  bool batchMode;
56 
57  }m_options;
58 
60  {
66 
67  }m_testsOptions;
68 
69  // Experimental methods
70  void experimental_showMeasurements();
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 
125  bool checkIfFacePlane( mrpt::obs::CObservation3DRangeScan* face );
126 
127  bool checkIfFacePlaneCov( mrpt::obs::CObservation3DRangeScan* face );
128 
129  void thread_checkIfFacePlaneCov( );
130 
131  static void dummy_checkIfFacePlaneCov( CFaceDetection *obj );
132 
133 
134  bool checkIfFaceRegions( mrpt::obs::CObservation3DRangeScan* face );
135 
136  void thread_checkIfFaceRegions( );
137 
138  static void dummy_checkIfFaceRegions( CFaceDetection *obj );
139 
140  size_t checkRelativePosition( const mrpt::math::TPoint3D &p1, const mrpt::math::TPoint3D &p2, const mrpt::math::TPoint3D &p, double &dist );
141 
142 
143  void thread_checkIfDiagonalSurface( );
144 
145  bool checkIfDiagonalSurface( mrpt::obs::CObservation3DRangeScan* face );
146 
147  bool checkIfDiagonalSurface2( mrpt::obs::CObservation3DRangeScan* face );
148 
149  static void dummy_checkIfDiagonalSurface( CFaceDetection *obj );
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 
155  void experimental_viewFacePointsScanned( const mrpt::obs::CObservation3DRangeScan &face );
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
164  void experimental_segmentFace( const mrpt::obs::CObservation3DRangeScan &face, mrpt::math::CMatrixTemplate<bool> &region );
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.
mrpt::synch::CSemaphore m_leave_checkIfFacePlaneCov
Indicates to main thread that thread_checkIfFacePlaneCov has been completed analisis of the last face...
std::vector< double > m_meanHist
mrpt::system::TThreadHandle m_thread_checkIfDiagonalSurface
Thread that execute checkIfDiagonalSurface filter.
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 ...
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 m_checkIfFacePlaneCov_res
Save result of checkIfFacePlaneCov filter.
mrpt::synch::CSemaphore m_enter_checkIfFacePlaneCov
Indicates to thread_checkIfFacePlaneCov that exist a new face to analyze.
mrpt::synch::CSemaphore m_enter_checkIfDiagonalSurface
Indicates to thread_checkIfDiagonalSurface that exist a new face to analyze.
bool m_checkIfDiagonalSurface_res
Save result of checkIfDiagonalSurface filter.
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:29
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:42
GLsizei GLsizei GLuint * obj
Definition: glext.h:3902
GLenum GLuint GLint GLenum face
Definition: glext.h:7014
GLfloat GLfloat p
Definition: glext.h:5587
GLsizei const GLfloat * points
Definition: glext.h:4797
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.5.6 Git: 4c65e8431 Tue Apr 24 08:18:17 2018 +0200 at mar 26 may 2026 13:06:43 CEST