Main MRPT website > C++ reference for MRPT 1.5.7
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
mrpt::utils::CTimeLogger m_timeLog
bool m_end_threads
Indicates to all threads that must finish their execution.
mrpt::system::TThreadHandle m_thread_checkIfFacePlaneCov
Thread that execute checkIfFacePlaneCov filter.
std::vector< uint32_t > vector_uint
Definition: types_simple.h:28
CCascadeClassifierDetection cascadeClassifier
bool m_checkIfFaceRegions_res
Save result of checkIfFaceRegions filter.
A class for storing images as grayscale or RGB bitmaps.
Definition: CImage.h:101
std::vector< CDetectableObjectPtr > vector_detectable_object
Declares a class derived from "CObservation" that encapsules a 3D range scan measurement, as from a time-of-flight range camera or any other RGBD sensor.
Column vector, like Eigen::MatrixX*, but automatically initialized to zeros since construction...
Definition: eigen_frwds.h:35
std::vector< double > m_meanHist
mrpt::synch::CSemaphore m_leave_checkIfFacePlaneCov
Indicates to main thread that thread_checkIfFacePlaneCov has been completed analisis of the last face...
mrpt::system::TThreadHandle m_thread_checkIfFaceRegions
Thread that execute checkIfFaceRegions filter.
GLsizei GLsizei GLuint * obj
Definition: glext.h:3902
mrpt::obs::CObservation3DRangeScan m_lastFaceDetected
Last face detected.
This class allows loading and storing values and vectors of different types from a configuration text...
GLsizei const GLfloat * points
Definition: glext.h:4797
mrpt::synch::CSemaphore m_leave_checkIfDiagonalSurface
Indicates to main thread that thread_checkIfDiagonalSurface has been completed analisis of the last f...
Specific class for face detection.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
mrpt::synch::CSemaphore m_leave_checkIfFaceRegions
Indicates to main thread that thread_checkIfFaceRegions has been completed analisis of the last face ...
Declares a class that represents any robot&#39;s observation.
This structure contains the information needed to interface the threads API on each platform: ...
Definition: threads.h:25
A versatile "profiler" that logs the time spent within each pair of calls to enter(X)-leave(X), among other stats.
Definition: CTimeLogger.h:41
mrpt::synch::CSemaphore m_enter_checkIfDiagonalSurface
Indicates to thread_checkIfDiagonalSurface that exist a new face to analyze.
mrpt::synch::CSemaphore m_enter_checkIfFaceRegions
Indicates to thread_checkIfFaceRegions that exist a new face to analyze.
Lightweight 3D point.
mrpt::system::TThreadHandle m_thread_checkIfDiagonalSurface
Thread that execute checkIfDiagonalSurface filter.
bool m_checkIfDiagonalSurface_res
Save result of checkIfDiagonalSurface filter.
GLfloat GLfloat p
Definition: glext.h:5587
A semaphore for inter-thread synchronization.
Definition: CSemaphore.h:28
mrpt::synch::CSemaphore m_enter_checkIfFacePlaneCov
Indicates to thread_checkIfFacePlaneCov that exist a new face to analyze.
bool m_checkIfFacePlaneCov_res
Save result of checkIfFacePlaneCov filter.
GLenum GLuint GLint GLenum face
Definition: glext.h:7014



Page generated by Doxygen 1.8.14 for MRPT 1.5.7 Git: 8277875f6 Mon Jun 11 02:47:32 2018 +0200 at lun oct 28 01:50:49 CET 2019