Im using dlib's hog detector because it finds faces much better than opencv haarcascades. But it can not detect emotions on faces (or can???). I need extract a "sub-image" from dlib::rectangle with face, and create cv::Mat from it to call cv::detectMultiScale() with preloaded "haarcascade_smile.xml".
How to perform this extraction/conversion?
Code sample below...
int DetectionProc(void * param){ // async operation
auto instance =(Detector *)param;
const unsigned int delay = 1000 / instance->OPS;
std::vector<dlib::rectangle> detects;
array2d<rgb_pixel> sample;
while(instance->OPS){
unsigned int elapsed = GetTickCount();
EnterCriticalSection(&instance->cs_buf);
assign_image(sample,instance->buffer);
instance->buffer.clear();
LeaveCriticalSection(&instance->cs_buf);
if (sample.size()){
detects = instance->face_detector(sample);
if (!detects.empty()){
detection res(GetTickCount());
if (!instance->smile_detector.empty()){
// TODO
// extract subimage from detects.front() on sample to cv::Mat face;
// instance->smile_detector.detectMultiScale(); on face
// set res.smiled to true on success
}
EnterCriticalSection(&instance->cs_result);
instance->result = res;
LeaveCriticalSection(&instance->cs_result);
}
}
elapsed = GetTickCount() - elapsed;
Sleep((elapsed < delay) ? (delay - elapsed) : 0);
}
return 0;
}