#include "tracker.h" #include #include "THFaceTracking_i.h" namespace csdk_wrap{ static THFT_Param param; int init_face_tracker(const int tm, const int gi,const int w, const int h, const int maxFaces, const int detinterval, const int sampleSize, VecFunc &vec){ param.nDeviceID = gi; param.nImageWidth = w; param.nImageHeight = h; param.nMaxFaceNum = maxFaces; param.nSampleSize = sampleSize > 0 ? sampleSize : w/2; param.nDetectionIntervalFrame = detinterval; printf("threads %d gi: %d size: %dx%d maxface: %d, sample: %d, interval: %d\n", tm, gi, w, h, maxFaces, sampleSize, detinterval); auto nNum = THFT_Create(tm, ¶m); if(nNum != tm){ printf("create face detector failed!\n"); }else{ vec.emplace_back([]{THFT_Release();}); } return nNum; } cRECT* face_track_only(int *faceCount, const cIMAGE *img, const int chan){ *faceCount = 0; cRECT *pFaces = (cRECT*)malloc(param.nMaxFaceNum * sizeof(cRECT)); auto nNum = THFT_FaceOnly(chan, img->data, img->width, img->height, (tagRECT*)pFaces, param.nMaxFaceNum, param.nSampleSize); if (nNum > 0) { *faceCount = nNum; }else{ free(pFaces); pFaces = NULL; } return pFaces; } cFaceInfo* face_track_detect(int *faceCount, const cIMAGE *img, const int chan){ *faceCount = 0; cFaceInfo* pFaceInfos = (cFaceInfo*)malloc(param.nMaxFaceNum * sizeof(cFaceInfo)); auto nNum = THFT_FaceDetect(chan, img->data, img->width, img->height, (THFT_FaceInfo*)pFaceInfos, param.nMaxFaceNum, param.nSampleSize); if (nNum > 0){ *faceCount = nNum; }else{ free(pFaceInfos); pFaceInfos = NULL; } return pFaceInfos; } cFaceInfo* face_track(int *faceCount, const cIMAGE *img, const int chan){ *faceCount = 0; cFaceInfo* pFaceInfos = (cFaceInfo*)malloc(param.nMaxFaceNum * sizeof(cFaceInfo)); auto nNum = THFT_FaceTracking(chan, img->data, (THFT_FaceInfo*)pFaceInfos); if (nNum > 0){ *faceCount = nNum; }else{ free(pFaceInfos); pFaceInfos = NULL; } return pFaceInfos; } //THFACETRACKING_API int THFT_Reset(short nChannelID, THFT_Param* pParam); int face_track_resize(const int chan, const int w, const int h){ THFT_Param tmpParam; tmpParam.nDeviceID = param.nDeviceID; tmpParam.nImageWidth = w; tmpParam.nImageHeight = h; tmpParam.nMaxFaceNum = param.nMaxFaceNum; tmpParam.nSampleSize = param.nSampleSize; tmpParam.nDetectionIntervalFrame = param.nDetectionIntervalFrame; printf("chan %d size: %dx%d", chan, w, h); auto flag = THFT_Reset(chan, &tmpParam); return flag; } }