houxiao
2016-12-28 017b7eb736ccc53c52f81486be8196d7fafc3289
1
#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;?}