From b7340a34ff68f018a4aa0e7aada3b7feaabd2fe1 Mon Sep 17 00:00:00 2001 From: chenshijun <csj_sky@126.com> Date: 星期二, 22 十月 2019 14:52:49 +0800 Subject: [PATCH] 增加人脸跟踪检测的通道分辨率调整接口face_track_resize --- csrc/buz/face/face.cpp | 62 +++++++++++++++++++----------- 1 files changed, 39 insertions(+), 23 deletions(-) diff --git a/csrc/buz/face/face.cpp b/csrc/buz/face/face.cpp index cfa7735..aa101a0 100644 --- a/csrc/buz/face/face.cpp +++ b/csrc/buz/face/face.cpp @@ -16,7 +16,6 @@ :fpos_(NULL) ,featLen_(0) ,feat_(NULL) - ,param_track_(NULL) ,finfo_(NULL) {} @@ -27,7 +26,6 @@ if (fpos_) free(fpos_); if (feat_) free(feat_); - if (param_track_) free(param_track_); if (finfo_) free(finfo_); } @@ -65,14 +63,16 @@ return -1; } - ::THFI_FacePos facesPos[maxFacePos]; - int faceNum = THFI_DetectFace(chan, (BYTE*)(img->data), 24, img->width, img->height, facesPos, 30); + if (fpos_ == NULL){ + fpos_ = (cFacePos*)malloc(maxFacePos * sizeof(cFacePos)); + } + + // ::THFI_FacePos facesPos[maxFacePos]; + int faceNum = THFI_DetectFace(chan, (BYTE*)(img->data), 24, img->width, img->height, + (::THFI_FacePos*)fpos_, maxFacePos); if (faceNum > 0) { - if (fpos_ == NULL){ - fpos_ = (cFacePos*)malloc(maxFacePos * sizeof(cFacePos)); - } - memcpy(fpos_, facesPos, sizeof(THFI_FacePos) * faceNum); + // memcpy(fpos_, facesPos, sizeof(THFI_FacePos) * faceNum); *fcnt = faceNum; *fpos = fpos_; } @@ -160,33 +160,32 @@ return result; } ///////////////////////////////////////////////////// +static THFT_Param param; int sdkface::init_face_tracker(const int tm, const int gi,const int w, const int h, - const int maxFaces, const int detinterval, const int sampleSize){ - if (param_track_) return -1; - param_track_ = (THFT_Param*)malloc(sizeof(THFT_Param)); - - param_track_->nDeviceID = gi; - param_track_->nImageWidth = w; - param_track_->nImageHeight = h; - param_track_->nMaxFaceNum = maxFaces; - param_track_->nSampleSize = sampleSize > 0 ? sampleSize : w/2; - param_track_->nDetectionIntervalFrame = detinterval; - - auto nNum = THFT_Create(tm, param_track_); + const int maxFaces, const int detinterval, const int sampleSize){ + 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{ dtors_.emplace_back([]{THFT_Release();}); } return nNum; - } int sdkface::face_track(const cIMAGE *img, const int chan, void **fInfo, int *fcnt){ - if (!param_track_) return -1; if (!finfo_){ - finfo_ = (cFaceInfo*)malloc(param_track_->nMaxFaceNum * sizeof(cFaceInfo)); + finfo_ = (cFaceInfo*)malloc(param.nMaxFaceNum * sizeof(cFaceInfo)); } *fcnt = 0; @@ -200,4 +199,21 @@ } return nNum; } + + //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; + } } \ No newline at end of file -- Gitblit v1.8.0