#include "faceAPI.h"
|
#include "faceDB.h"
|
|
faceDB fdb = faceDB::faceDB();
|
faceAPI::faceAPI(){
|
//´´½¨¾²Ì¬ÈËÁ³Ê¶±ð¾ä±ú£¬Í¬Ê±´´½¨×´Ì¬±êÁ¿
|
cv_result_t cv_result = 0;
|
cv_face_create_detector(&handle_detect, NULL, CV_DETECT_ENABLE_ALIGN_21);
|
cv_verify_create_handle(&handle_verify1, "verify.model");
|
//faceDB* f_db = faceDB.GetInstance();
|
}
|
|
faceAPI::~faceAPI(){
|
|
}
|
|
int faceAPI::do_reasch(cv::Mat image){
|
if (!image.data) {
|
fprintf(stderr, "fail to read img\n");
|
return -1;
|
}else
|
fprintf(stderr, "read img\n");
|
p_f = extract_feature(image);
|
if (!p_f)
|
{
|
fprintf(stderr, "p_f is null\n");
|
return -2;
|
}
|
return p_img_search(p_f);
|
}
|
|
int faceAPI::do_reasch(char* s_feature){
|
get_feature(s_feature,p_f);
|
return p_img_search(p_f);
|
}
|
|
int faceAPI::do_register(cv::Mat image){
|
p_f = extract_feature(image);
|
//db add
|
int indx = 1;
|
return indx;
|
}
|
|
|
int faceAPI::p_img_search(cv_feature_t *p_feature){
|
std::cout<<"p img search"<<std::endl;
|
|
return fdb.search_db(p_feature);
|
}
|
|
cv_feature_t* faceAPI::extract_feature(const cv::Mat image_color) {
|
|
if (handle_verify1 != NULL)
|
{
|
fprintf(stderr, "handle_verify1 is not null!\n");
|
}
|
else
|
{
|
fprintf(stderr, "handle_verify1 is null!\n");
|
}
|
|
cv_feature_t *p_feature = NULL;
|
cv_face_t *p_face = NULL;
|
int face_count = 0;
|
cv_result_t st_result = CV_OK;
|
st_result = cv_face_detect(handle_detect, image_color.data, CV_PIX_FMT_BGR888,
|
image_color.cols, image_color.rows, image_color.step,
|
CV_FACE_UP, &p_face, &face_count);
|
if (face_count >= 1) {
|
st_result = cv_verify_get_feature(handle_verify1,
|
(unsigned char *)image_color.data, CV_PIX_FMT_BGR888,
|
image_color.cols, image_color.rows, image_color.step,
|
p_face, &p_feature, NULL);
|
if (st_result != CV_OK) {
|
fprintf(stderr, "cv_verify_get_feature failed, error code %d\n", st_result);
|
}
|
} else {
|
fprintf(stderr, "can't find face in ");
|
}
|
// release the memory of face
|
cv_face_release_detector_result(p_face, face_count);
|
return p_feature;
|
}
|
|
|
//@brief ÌØÕ÷ֵת»»Îª×Ö·û´®
|
//@param ÌØÕ÷Öµ
|
//@return ×Ö·û´®¸ñʽµÄÌØÕ÷Öµ
|
int faceAPI::get_char(cv_feature_t *p_feature,char* feature_str){
|
|
return cv_verify_serialize_feature(p_feature,feature_str);
|
}
|
|
//@brief ×Ö·û´®×ª»»ÎªÌØÕ÷Öµ
|
//@param ×Ö·û´®¸ñʽµÄÌØÕ÷Öµ
|
//@return ÌØÕ÷Öµ
|
int faceAPI::get_feature(char *feature_str,cv_feature_t *p_feature){
|
|
p_feature = cv_verify_deserialize_feature(feature_str);
|
if(p_feature != NULL){
|
return 0;
|
}else
|
return -1;
|
}
|