void FaceDet::DetectFaces_( // call once per image to find all the faces const Image& img, // in: the image (grayscale) const char* imgpath, // in: used only for debugging bool multiface, // in: if false, want only the best face int minwidth, // in: min face width as percentage of img width void* user, // in: unused (match virt func signature) cv::CascadeClassifier cascade) { (void) imgpath; (void) user; DetectFaces(detpars_, img, minwidth, cascade); DiscardMissizedFaces(detpars_); if (multiface) // order faces on increasing distance from left margin { sort(detpars_.begin(), detpars_.end(), IncreasingLeftMargin); } else { // order faces on decreasing width, keep only the first (the largest face) sort(detpars_.begin(), detpars_.end(), DecreasingWidth); if (NSIZE(detpars_)) detpars_.resize(1); } iface_ = 0; // next invocation of NextFace_ must get first face }
void FaceDet::DetectFaces_( // call once per image to find all the faces const Image& img, // in: the image (grayscale) const char* imgpath, // in: used only for debugging bool multiface, // in: if false, want only the best face int minwidth, // in: min face width as percentage of img width void* user) // in: unused (match virt func signature) { CV_Assert(user == NULL); DetectFaces(detpars_, img, minwidth); char tracepath[SLEN]; sprintf(tracepath, "%s_00_unsortedfacedet.bmp", Base(imgpath)); TraceFaces(detpars_, img, tracepath); DiscardMissizedFaces(detpars_); if (multiface) // order faces on increasing distance from left margin { sort(detpars_.begin(), detpars_.end(), IncreasingLeftMargin); sprintf(tracepath, "%s_05_facedet.bmp", Base(imgpath)); TraceFaces(detpars_, img, tracepath); } else { // order faces on decreasing width, keep only the first (the largest face) sort(detpars_.begin(), detpars_.end(), DecreasingWidth); sprintf(tracepath, "%s_05_sortedfaces.bmp", Base(imgpath)); TraceFaces(detpars_, img, tracepath); if (NSIZE(detpars_)) detpars_.resize(1); } iface_ = 0; // next invocation of NextFace_ must get first face }
void FaceDet::DetectFaces_( // call once per image to find all the faces const Image& img, // in: the image (grayscale) const char*, // in: unused (match virt func signature) bool multiface, // in: if false, want only the best face int minwidth, // in: min face width as percentage of img width void* user) // in: unused (match virt func signature) { CV_Assert(user == NULL); CV_Assert(!facedet_g.empty()); // check that OpenFaceDetector_ was called DetectFaces(detpars_, img, minwidth); TraceFaces(detpars_, img, "facedet_BeforeDiscardMissizedFaces.bmp"); DiscardMissizedFaces(detpars_); TraceFaces(detpars_, img, "facedet_AfterDiscardMissizedFaces.bmp"); if (multiface) // order faces on increasing distance from left margin { sort(detpars_.begin(), detpars_.end(), IncreasingLeftMargin); TraceFaces(detpars_, img, "facedet.bmp"); } else { // order faces on decreasing width, keep only the first (the largest face) sort(detpars_.begin(), detpars_.end(), DecreasingWidth); TraceFaces(detpars_, img, "facedet.bmp"); if (NSIZE(detpars_)) detpars_.resize(1); } iface_ = 0; // next invocation of NextFace_ must get first face }