From 734e1a94bc026ba8e7e71de0a9ddabe12e07b13b Mon Sep 17 00:00:00 2001 From: pans <pans@454eff88-639b-444f-9e54-f578c98de674> Date: 星期三, 11 一月 2017 19:28:58 +0800 Subject: [PATCH] --- RtspFace/SensetimeFaceAPIWrapper/src/faceDB.cpp | 97 ++++++++++++++++++++++++++++++++---------------- 1 files changed, 64 insertions(+), 33 deletions(-) diff --git a/RtspFace/SensetimeFaceAPIWrapper/src/faceDB.cpp b/RtspFace/SensetimeFaceAPIWrapper/src/faceDB.cpp index f57c356..62e2695 100644 --- a/RtspFace/SensetimeFaceAPIWrapper/src/faceDB.cpp +++ b/RtspFace/SensetimeFaceAPIWrapper/src/faceDB.cpp @@ -1,50 +1,73 @@ #include "faceDB.h" - -#include <iostream> - +//faceDB实现部分 //"./out1.db" -char *db_path = "out.db"; +//char *db_path = "out.db"; -faceDB::faceDB() +FaceDB::FaceDB() { - // 创建人脸数据库句柄 - cv_verify_create_db(&handle_db); - fprintf(stderr, "create cv_verify_create_db\n"); + +} + +FaceDB::~FaceDB() {} + +//初始化设置 +bool FaceDB::init(char* db_path_t) +{ + + db_path = db_path_t; + + //加载一次可多次使用。 cv_verify_create_handle(&handle_verify, "../models/verify.model"); fprintf(stderr, "create cv_verify_create_handle\n"); cv_face_create_detector(&handle_detect, NULL, CV_DETECT_ENABLE_ALIGN_21); fprintf(stderr, "create cv_face_create_detector\n"); - db_load(); - fprintf(stderr, "db load\n"); + + + // 创建人脸数据库句柄,在db_save()中,数据库保存成功,会释放该句柄 + cv_verify_create_db(&handle_db); + fprintf(stderr, "create cv_verify_create_db\n"); + + + if(db_load()) + { + fprintf(stderr, "db load\n"); + return true; + } + fprintf(stderr, "db load falied\n"); + return false; } -faceDB::~faceDB() {} - -/* -faceDB* faceDB::GetInstance(){ - if (db == NULL) +//调用数据库保存 +bool FaceDB::finally() +{ + if(db_save()) { - db = new faceDB(); + return true; } - - return db; -}*/ - -//数据库添加数据,并返回记录得id -int faceDB::db_add(cv_feature_t* p_feature) + + return false; + +} + +//@brief 数据库添加数据 +//@param 特征值 +//@return 人脸id,添加失败返回-1 +int FaceDB::db_add(cv_feature_t* p_feature) { int idx; cv_result_t cv_result = cv_verify_add_face(handle_db, p_feature, &idx); if (cv_result != CV_OK) { fprintf(stderr, "cv_verify_add_face failed, error code %d\n", cv_result); + return -1; } cv_verify_release_feature(p_feature); return idx; } -//数据库保存 -bool faceDB::db_save() +//@brief 保存数据库 +//@return 状态量 +bool FaceDB::db_save() { cv_result = cv_verify_save_db(handle_db, db_path); if (cv_result != CV_OK) { @@ -53,12 +76,13 @@ } else { fprintf(stderr, "save done!\n"); } - + cv_verify_destroy_db(handle_db); return true; } -//数据库加载 -bool faceDB::db_load() +//@brief 加载数据库 +//@return 状态量 +bool FaceDB::db_load() { if (handle_db != NULL) { fprintf(stderr, "handle_db is not null!%s\n",db_path); @@ -76,11 +100,11 @@ return true; } -//搜索数据库 -int faceDB::search_db(cv_feature_t *p_feature) +//@brief 搜索数据库 +//@param 人脸特征值 +//@return 人脸id +int FaceDB::search_db(cv_feature_t *p_feature) { - - int indx=-1; //查询前10条 int top_k = 3; @@ -102,8 +126,10 @@ } else { fprintf(stderr, "cv_verify_search_face failed, error code %d\n", cv_result); } + std::cout<<"this is hits"<<std::endl; if (top_scores[0] != 0) { indx=top_idxs[0]; + std::cout<<"indx="<<indx<<std::endl; } if (top_idxs) { delete[]top_idxs; @@ -112,19 +138,24 @@ delete[]top_scores; } cv_verify_release_feature(p_feature); + std::cout<<"return indx"<<std::endl; return indx; } -cv_feature_t* faceDB::extract_feature(cv::Mat image_color) +//@brief 提取特征值 +//@param 图片 +//@return 特征值 +cv_feature_t* FaceDB::extract_feature(cv::Mat image_color) { - if (handle_verify != NULL) { fprintf(stderr, "fdb.handle_verify is not null!\n"); } else { fprintf(stderr, "fdb.handle_verify is null!\n"); } + //该变量内存会在db_add()中,添加成功后释放。 cv_feature_t *p_feature = NULL; + cv_face_t *p_face = NULL; int face_count = 0; cv_result_t st_result = CV_OK; -- Gitblit v1.8.0