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, &param);
         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