| | |
| | | :fpos_(NULL) |
| | | ,featLen_(0) |
| | | ,feat_(NULL) |
| | | ,param_track_(NULL) |
| | | ,finfo_(NULL) |
| | | {} |
| | | |
| | |
| | | |
| | | if (fpos_) free(fpos_); |
| | | if (feat_) free(feat_); |
| | | if (param_track_) free(param_track_); |
| | | if (finfo_) free(finfo_); |
| | | } |
| | | |
| | |
| | | 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; |
| | | printf("gi: %d size: %dx%d maxface: %d, sample: %d, interval: %d\n", |
| | | gi, w, h, maxFaces, sampleSize, 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; |