#include "tracker.h"
|
|
#include <stdio.h>
|
#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 sdkface::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;
|
}
|
|
}
|