Skip to content

Commit

Permalink
Fix zoom
Browse files Browse the repository at this point in the history
  • Loading branch information
Danile71 committed Feb 13, 2020
1 parent 11c1970 commit 560fa0f
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 60 deletions.
108 changes: 54 additions & 54 deletions facerec.cc
Original file line number Diff line number Diff line change
Expand Up @@ -35,24 +35,71 @@ void FaceRec::setAge(const char* age_path) {
deserialize(std::string(age_path)) >> age_net_;
}

std::vector<rectangle> FaceRec::detect(image_t& img) {
std::lock_guard<std::mutex> lock(detector_mutex_);

void FaceRec::setSize(unsigned long new_size) {
size = new_size;
}

void FaceRec::setPadding(double new_padding) {
padding = new_padding;
}

void FaceRec::setJittering(int new_jittering) {
jittering = new_jittering;
}

void FaceRec::setMinImageSize(int new_min_image_size) {
min_image_size = new_min_image_size;
}

facesret* FaceRec::detect(facesret *ret, image_t &img, int type) {
std::vector<rectangle> rects;
int upped = 0;

while(img.size() < min_image_size) {
pyramid_up(img);
upped += 2;
}

if (type == 0 ) {
rects = detectFront(img);
} else {
rects = detectCNN(img);
}

ret->num_faces = rects.size();

if (ret->num_faces == 0)
return ret;

ret->rectangles = (long*)malloc(ret->num_faces * RECT_LEN * sizeof(long));
ret->p = new image_pointer[ret->num_faces];

for (int i = 0; i < ret->num_faces; i++) {
ret->p[i].img = new image_t(img);
ret->p[i].rect = new rectangle(rects[i]);
ret->p[i].shape = 0;
if (upped == 0) upped = 1;
ret->p[i].upped = upped;

long* dst = ret->rectangles + i * RECT_LEN;
dst[0] = rects[i].left() / upped;
dst[1] = rects[i].top() / upped;
dst[2] = rects[i].right() / upped;
dst[3] = rects[i].bottom() / upped;
}
return ret;
}

std::vector<rectangle> FaceRec::detectFront(image_t& img) {
std::lock_guard<std::mutex> lock(detector_mutex_);

return detector_(img);
}

std::vector<rectangle> FaceRec::detectCNN(image_t& img) {
std::vector<rectangle> rects;
std::lock_guard<std::mutex> lock(cnn_net_mutex_);

while(img.size() < min_image_size) {
pyramid_up(img);
}

auto dets = cnn_net_(img);
for (auto&& d : dets) {
rects.push_back(d.rect);
Expand Down Expand Up @@ -137,53 +184,6 @@ std::tuple<descriptor, full_object_detection> FaceRec::recognize(image_pointer *
return std::make_tuple(descr, shape);
}

void FaceRec::setSize(unsigned long new_size) {
size = new_size;
}

void FaceRec::setPadding(double new_padding) {
padding = new_padding;
}

void FaceRec::setJittering(int new_jittering) {
jittering = new_jittering;
}

void FaceRec::setMinImageSize(int new_min_image_size) {
min_image_size = new_min_image_size;
}

facesret* facerec_detect(facesret *ret, facerec* rec, image_t &img, int type) {
FaceRec* cls = (FaceRec*)(rec->cls);
std::vector<rectangle> rects;

if (type == 0 ) {
rects = cls->detect(img);
} else {
rects = cls->detectCNN(img);
}

ret->num_faces = rects.size();

if (ret->num_faces == 0)
return ret;

ret->rectangles = (long*)malloc(ret->num_faces * RECT_LEN * sizeof(long));
ret->p = new image_pointer[ret->num_faces];

for (int i = 0; i < ret->num_faces; i++) {
ret->p[i].img = new image_t(img);
ret->p[i].rect = new rectangle(rects[i]);
ret->p[i].shape = 0;
long* dst = ret->rectangles + i * RECT_LEN;
dst[0] = rects[i].left();
dst[1] = rects[i].top();
dst[2] = rects[i].right();
dst[3] = rects[i].bottom();
}
return ret;
}

// Classify
void FaceRec::setSamples(std::vector<descriptor>&& samples, std::vector<int>&& cats) {
std::unique_lock<std::shared_mutex> lock(samples_mutex_);
Expand Down
3 changes: 2 additions & 1 deletion facerec.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ class FaceRec {
void setJittering(int);
void setMinImageSize(int);

std::vector<rectangle> detect(image_t&);
facesret* detect(facesret *, image_t &, int);
std::vector<rectangle> detectFront(image_t&);
std::vector<rectangle> detectCNN(image_t&);

std::tuple<descriptor, full_object_detection> recognize(image_pointer *);
Expand Down
3 changes: 2 additions & 1 deletion gocv.cc
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using namespace dlib;

facesret* facerec_detect_from_mat(facerec* rec, const void *mat,int type) {
FaceRec* cls = (FaceRec*)(rec->cls);
facesret* ret = (facesret*)calloc(1, sizeof(facesret));
image_t img;

Expand All @@ -27,5 +28,5 @@ facesret* facerec_detect_from_mat(facerec* rec, const void *mat,int type) {
return ret;
}

return facerec_detect(ret, rec, img, type);
return cls->detect(ret, img, type);
}
10 changes: 6 additions & 4 deletions wrapper.cc
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ void facerec_set_age(facerec* rec, const char *file) {

facesret* facerec_detect_from_file(facerec* rec, const char* file,int type) {
facesret* ret = (facesret*)calloc(1, sizeof(facesret));
FaceRec* cls = (FaceRec*)(rec->cls);
image_t img;

try {
Expand All @@ -89,10 +90,11 @@ facesret* facerec_detect_from_file(facerec* rec, const char* file,int type) {
return ret;
}

return facerec_detect(ret, rec, img, type);
return cls->detect(ret, img, type);
}

facesret* facerec_detect_from_buffer(facerec* rec, unsigned char* img_data, int len,int type) {
FaceRec* cls = (FaceRec*)(rec->cls);
facesret* ret = (facesret*)calloc(1, sizeof(facesret));
image_t img;

Expand All @@ -109,7 +111,7 @@ facesret* facerec_detect_from_buffer(facerec* rec, unsigned char* img_data, int
return ret;
}

return facerec_detect(ret, rec, img, type);
return cls->detect(ret, img, type);
}

faceret* facerec_recognize(facerec* rec, image_pointer *p) {
Expand All @@ -128,8 +130,8 @@ faceret* facerec_recognize(facerec* rec, image_pointer *p) {

long* dst = ret->shape;
for (int j = 0; j < ret->num_shape; j++) {
dst[j*SHAPE_LEN] = shape.part(j).x();
dst[j*SHAPE_LEN+1] = shape.part(j).y();
dst[j*SHAPE_LEN] = shape.part(j).x() / p->upped;
dst[j*SHAPE_LEN+1] = shape.part(j).y() / p->upped;
}
} catch(image_load_error& e) {
ret->err_str = strdup(e.what());
Expand Down
1 change: 1 addition & 0 deletions wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ typedef struct image_pointer {
void *img;
void *shape;
void *rect;
int upped;
} image_pointer;

typedef struct facesret {
Expand Down

0 comments on commit 560fa0f

Please sign in to comment.