#include "detector.h" #include #include #include #include "THFaceImage_i.h" #include "struct.h" namespace csdk_wrap { int init_face_detector(const int tm, const int gi, const int minFaces, const int rollAngle, VecFunc &vec){ int ret = 0; if (gi < 0) { THFI_Param *param = new THFI_Param[tm]; ret = THFI_Create(tm, param); delete[] param; } else { THFI_Param_Ex *param = new THFI_Param_Ex[tm]; THFI_Param detParam; detParam.nMinFaceSize = minFaces; detParam.nRollAngle = rollAngle; for (int i = 0; i < tm; i++) { param[i].tp = detParam; param[i].nDeviceID = gi; } ret = THFI_Create_Ex(tm, param); delete[] param; } if(ret != tm){ printf("create face detector failed!\n"); }else{ vec.emplace_back([]{THFI_Release();}); } return ret; } cFacePos* face_detect(int *faceCount, const cIMAGE *img, const int channel){ if(channel < 0 || !img){ return NULL; } cFacePos *fpos = NULL; ::THFI_FacePos facesPos[30]; int faceNum = THFI_DetectFace(channel, (BYTE*)(img->data), 24, img->width, img->height, facesPos, 30); if (faceNum > 0) { fpos = (cFacePos*)malloc(faceNum * sizeof(cFacePos)); *faceCount = faceNum; memcpy(fpos, facesPos, sizeof(THFI_FacePos) * faceNum); }else{ // printf ("no face detected\n"); } return fpos; } } // csdk_wrap