Visual Servoing Platform  version 3.3.0 under development (2020-02-17)
vpDetectorFace Class Reference

#include <visp3/detection/vpDetectorFace.h>

+ Inheritance diagram for vpDetectorFace:

Public Member Functions

 vpDetectorFace ()
 
virtual ~vpDetectorFace ()
 
bool detect (const vpImage< unsigned char > &I)
 
bool detect (const cv::Mat &frame_gray)
 
void setCascadeClassifierFile (const std::string &filename)
 
Inherited functionalities from vpDetectorBase
vpRect getBBox (size_t i) const
 
vpImagePoint getCog (size_t i) const
 
std::vector< std::string > & getMessage ()
 
std::string & getMessage (size_t i)
 
size_t getNbObjects () const
 
std::vector< std::vector< vpImagePoint > > & getPolygon ()
 
std::vector< vpImagePoint > & getPolygon (size_t i)
 
void setTimeout (unsigned long timeout_ms)
 

Protected Attributes

std::vector< cv::Rect > m_faces
 
cv::CascadeClassifier m_face_cascade
 
cv::Mat m_frame_gray
 
std::vector< std::vector< vpImagePoint > > m_polygon
 
std::vector< std::string > m_message
 
size_t m_nb_objects
 
unsigned long m_timeout_ms
 

Detailed Description

The vpDetectorFace class is a wrapper over OpenCV Haar cascade face detection capabilities. To use this class ViSP should be build against OpenCV 2.2.0 or a more recent version. Installation instructions are provided here https://visp.inria.fr/3rd_opencv.

The following sample code shows how to use this class to detect the largest face in the image. The cascade classifier file "haarcascade_frontalface_alt.xml" can be found in ViSP source code or in OpenCV.

#include <visp3/detection/vpDetectorFace.h>
int main()
{
vpDetectorFace face_detector;
face_detector.setCascadeClassifierFile("haarcascade_frontalface_alt.xml");
while(1) {
// acquire a new image in I
bool face_found = face_detector.track(I);
if (face_found) {
vpRect face_bbox = face_detector.getBoundingBox(0); // largest face has index 0
}
}
}

A more complete example that works with images acquired from a camera is provided in tutorial-face-detector-live.cpp.

Examples:
tutorial-face-detector-live-threaded.cpp, tutorial-face-detector-live.cpp, and tutorial-face-detector.cpp.

Definition at line 88 of file vpDetectorFace.h.

Constructor & Destructor Documentation

◆ vpDetectorFace()

vpDetectorFace::vpDetectorFace ( )

Default constructor.

Definition at line 52 of file vpDetectorFace.cpp.

◆ ~vpDetectorFace()

virtual vpDetectorFace::~vpDetectorFace ( )
inlinevirtual

Default destructor.

Definition at line 100 of file vpDetectorFace.h.

References vpDetectorBase::detect().

Member Function Documentation

◆ detect() [1/2]

bool vpDetectorFace::detect ( const vpImage< unsigned char > &  I)
virtual

Allows to detect a face in the image. When more than one face is detected, faces are sorted from largest to smallest.

Parameters
I: Input image to process. This ViSP image is converted internally in an OpenCV cv::Mat image. If you original image is an gray level OpenCV image, we suggest rather the use of detect(const cv::Mat &).
Returns
true if one or more faces are found, false otherwise.

The number of detected faces is returned using getNbObjects(). If a face is found the functions getBBox(), getCog() return some information about the location of the face.

The largest face is always available using getBBox(0) or getCog(0).

See also
detect(const cv::Mat &)

Implements vpDetectorBase.

Examples:
tutorial-face-detector-live-threaded.cpp, tutorial-face-detector-live.cpp, and tutorial-face-detector.cpp.

Definition at line 84 of file vpDetectorFace.cpp.

References vpImageConvert::convert(), and m_frame_gray.

◆ detect() [2/2]

bool vpDetectorFace::detect ( const cv::Mat &  frame_gray)

Allows to detect a face in the image. When more than one face is detected, faces are sorted from largest to smallest.

Parameters
frame_gray: Input gray level image to process.
Returns
true if one or more faces are found, false otherwise.

The number of detected faces is returned using getNbObjects(). If a face is found the functions getBBox(), getCog() return some information about the location of the face.

The largest face is always available using getBBox(0) or getCog(0).

Definition at line 103 of file vpDetectorFace.cpp.

References m_face_cascade, m_faces, vpDetectorBase::m_message, vpDetectorBase::m_nb_objects, and vpDetectorBase::m_polygon.

◆ getBBox()

vpRect vpDetectorBase::getBBox ( size_t  i) const
inherited

◆ getCog()

vpImagePoint vpDetectorBase::getCog ( size_t  i) const
inherited

Return the center of gravity location of the ith object.

Examples:
mbot-apriltag-2D-half-vs.cpp, mbot-apriltag-ibvs.cpp, servoBebop2.cpp, servoFlirPtuIBVS.cpp, servoFrankaPBVS.cpp, and tutorial-flir-ptu-ibvs.cpp.

Definition at line 79 of file vpDetectorBase.cpp.

References vpDetectorBase::m_polygon.

Referenced by VispDetector::detectAprilTag:px:py:.

◆ getMessage() [1/2]

std::vector<std::string>& vpDetectorBase::getMessage ( void  )
inlineinherited

◆ getMessage() [2/2]

std::string & vpDetectorBase::getMessage ( size_t  i)
inherited

Returns the contained message of the ith object if there is one.

Definition at line 67 of file vpDetectorBase.cpp.

References vpException::badValue, vpDetectorBase::m_message, and vpDetectorBase::m_polygon.

◆ getNbObjects()

◆ getPolygon() [1/2]

std::vector<std::vector<vpImagePoint> >& vpDetectorBase::getPolygon ( )
inlineinherited

◆ getPolygon() [2/2]

std::vector< vpImagePoint > & vpDetectorBase::getPolygon ( size_t  i)
inherited

Returns ith object container box as a vector of points.

Definition at line 55 of file vpDetectorBase.cpp.

References vpException::badValue, and vpDetectorBase::m_polygon.

◆ setCascadeClassifierFile()

void vpDetectorFace::setCascadeClassifierFile ( const std::string &  filename)

Set the name of the OpenCV cascade classifier file used for face detection.

Parameters
filename: Full path to access to the file. Such a file can be found in OpenCV. Within the last versions it was name "haarcascade_frontalface_alt.xml".
Examples:
tutorial-face-detector-live-threaded.cpp, tutorial-face-detector-live.cpp, and tutorial-face-detector.cpp.

Definition at line 60 of file vpDetectorFace.cpp.

References vpException::ioError, and m_face_cascade.

◆ setTimeout()

void vpDetectorBase::setTimeout ( unsigned long  timeout_ms)
inlineinherited

Set detector timeout in milli-seconds. When set to 0, there is no timeout.

Definition at line 129 of file vpDetectorBase.h.

Referenced by vpDetectorDataMatrixCode::vpDetectorDataMatrixCode().

Member Data Documentation

◆ m_face_cascade

cv::CascadeClassifier vpDetectorFace::m_face_cascade
protected

Haar cascade classifier file name.

Definition at line 92 of file vpDetectorFace.h.

Referenced by detect(), and setCascadeClassifierFile().

◆ m_faces

std::vector<cv::Rect> vpDetectorFace::m_faces
protected

Bounding box of each detected face.

Definition at line 91 of file vpDetectorFace.h.

Referenced by detect().

◆ m_frame_gray

cv::Mat vpDetectorFace::m_frame_gray
protected

OpenCV image used as input for the face detection.

Definition at line 93 of file vpDetectorFace.h.

Referenced by detect().

◆ m_message

std::vector<std::string> vpDetectorBase::m_message
protectedinherited

◆ m_nb_objects

size_t vpDetectorBase::m_nb_objects
protectedinherited

◆ m_polygon

std::vector<std::vector<vpImagePoint> > vpDetectorBase::m_polygon
protectedinherited

◆ m_timeout_ms

unsigned long vpDetectorBase::m_timeout_ms
protectedinherited

Detection timeout.

Definition at line 70 of file vpDetectorBase.h.

Referenced by vpDetectorDataMatrixCode::detect().