#include "face_sdk.h" #include #include #include #include #include #include #include #include #include #include "get_file.h" #include "get_model_version.h" using namespace cv; using namespace std; #define DEFUALT_MODEL_INIT int main(int argc, char* argv[]) { #ifdef DEFUALT_MODEL_INIT void* det_handle = THFI_Create("../models/face_det/detect_v1.0.model", "../lic/license.lic"); void* pos_handle = THFacialPosCreate("../models/face_landmark/landmark_v1.3.model", "../lic/license.lic"); void* fea_handle = FE_Create("../models/face_extract/recognize_v1.2.model", "../lic/license.lic"); #else void* det_handle = NULL; void* pos_handle = NULL; void* fea_handle = NULL; #endif FaceRect faceRect = { 0 }; vector landmarks; char feature[1024] = { 0 }; string base_dir = argv[1]; string input_dir = base_dir + "/pic"; string output_dir = base_dir + "/json"; string move_pic_to_dir = base_dir + "/backup"; string version_path = base_dir + "/version/version.txt"; string pic_name; string input_pic; string output_file; string move_pic_to_path; int faceNum = 0; int posNum = 0; int feaNum = 0; const char* face_det_model_format = "../models/face_det/%s.model"; const char* face_pos_model_format = "../models/face_landmark/%s.model"; const char* face_extract_model_format = "../models/face_extract/%s.model"; string model_name; string version_info; while (1) { if (get_file_content(version_path.c_str(), version_info)) { recreate_handle(det_handle, face_det_model_format, detect_versions, DETECT_VERSION_NUM, version_info, "../lic/license.lic", THFI_Free, THFI_Create); recreate_handle(pos_handle, face_pos_model_format, landmark_versions, LANDMARK_VERSION_NUM, version_info, "../lic/license.lic", THFacilalPosFree, THFacialPosCreate); recreate_handle(fea_handle, face_extract_model_format, extract_versions, EXTRACT_VERSION_NUM, version_info, "../lic/license.lic", FE_Free, FE_Create); move_pic_to_path = move_pic_to_dir + "/version.txt"; rename(version_path.c_str(), move_pic_to_path.c_str()); } if (get_pic_file(input_dir.c_str(), pic_name) == 0) { input_pic = input_dir + "/" + pic_name; move_pic_to_path = move_pic_to_dir + "/" + pic_name; pic_name = pic_name.substr(0, pic_name.rfind(".")); output_file = output_dir + "/" + pic_name + ".json"; printf("pic_name: %s\n", pic_name.c_str()); printf("input_pic: %s\n", input_pic.c_str()); Mat mat = imread(input_pic.c_str()); // printf("cols: %d, rows: %d\n", mat.cols, mat.rows); if (mat.cols > 0 && mat.rows > 0) { faceNum = THFI_DetectFace(det_handle, mat, 1, &faceRect); printf("faceNum: %d left: %f, top: %f, right: %f, bottom: %f \r\n", faceNum, faceRect.left, faceRect.top, faceRect.right, faceRect.bottom); if (faceNum > 0) { fstream fout(output_file.c_str(), ios::out); fout << "{\"detection out\":[[\"score\"," << faceRect.score << "],[\"bbox\"," << faceRect.left << "," << faceRect.top << "," << faceRect.right << "," << faceRect.bottom << "]]"; posNum = THFacialPosExecute(pos_handle, mat, &faceRect, &landmarks); if (posNum > 0) fout << ",\"landmark\":" << "[[" << landmarks[0]; for (int i = 1; i < posNum; ++i) { fout << "," << landmarks[i]; } fout << "]]"; printf("Extract...\r\n"); feaNum = FE_Execute(fea_handle, mat, &landmarks, (char*)feature); printf("feaNum: %d\r\n", feaNum); if (feaNum) fout << ",\"feature\":[[" << ((short*)feature)[0]; for (int i = 1; i < feaNum; ++i) { fout << "," << ((short*)feature)[i]; } fout << "]]}"; fout.close(); } } rename(input_pic.c_str(), move_pic_to_path.c_str()); } sleep(1); } THFacilalPosFree(pos_handle); THFI_Free(det_handle); FE_Free(fea_handle); return 0; }