#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; 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; } }