From 96024c860270477fe9cf387ba855632a3ead08ee Mon Sep 17 00:00:00 2001
From: pansen <pansen626@sina.com>
Date: 星期二, 18 十二月 2018 18:08:24 +0800
Subject: [PATCH] add Face tracking demo code

---
 QiaoJiaSystem/testCodeMod/FaceTrackingWrapper.cpp |   95 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 95 insertions(+), 0 deletions(-)

diff --git a/QiaoJiaSystem/testCodeMod/FaceTrackingWrapper.cpp b/QiaoJiaSystem/testCodeMod/FaceTrackingWrapper.cpp
index ca5fb81..bd334b6 100644
--- a/QiaoJiaSystem/testCodeMod/FaceTrackingWrapper.cpp
+++ b/QiaoJiaSystem/testCodeMod/FaceTrackingWrapper.cpp
@@ -3,6 +3,8 @@
 //
 
 #include "FaceTrackingWrapper.h"
+#include "Debug.h"
+
 
 FaceTrackingWrapper::FaceTrackingWrapper() {
 
@@ -11,3 +13,96 @@
 FaceTrackingWrapper::~FaceTrackingWrapper() {
 
 }
+
+void FaceTrackingWrapper::setChannelParam(int channel, const BasicFace::InitParam &initParam) {
+    m_mapParam.insert(std::make_pair(channel, initParam));
+}
+
+bool FaceTrackingWrapper::initHandle() {
+//    todo add gpu support
+    int size = m_mapParam.size();
+    THFT_Param *param = new THFT_Param[size];
+
+    for (auto &item :m_mapParam) {
+        int pos = item.first;
+        auto t_param = item.second;
+        param[pos].nDeviceID = t_param.nDeviceID;
+        param[pos].nImageWidth = t_param.nImageWidth;
+        param[pos].nImageHeight = t_param.nImageHeight;
+        param[pos].nMaxFaceNum = t_param.nMaxFaceNum;
+        param[pos].nSampleSize = t_param.nSampleSize;
+        param[pos].nDetectionIntervalFrame = t_param.nDetectionIntervalFrame;
+    }
+    int nNum = -1;
+    nNum = THFT_Create(size, param);
+    delete[] param;
+    return (nNum > 0);
+}
+
+/***
+ * @todo
+ *
+ * @param image
+ * @return
+ */
+std::vector<BasicFace::FaceDetectResult> FaceTrackingWrapper::detectFace(BasicFace::FaceImage image) {
+    return vector<BasicFace::FaceDetectResult>();
+}
+
+std::vector<BasicFace::FaceDetectResult> FaceTrackingWrapper::trackingFace(int channel, BasicFace::FaceImage image) {
+    vector<BasicFace::FaceDetectResult> results;
+    //    ClockTimer ct("CasiaFaceWapper::detectFace");
+    if (channel == -1) {
+        ERR("invalid face channel, face detect faild");
+        return results;
+    }
+    THFT_FaceInfo facePos[MAX_DETECT_FACE];
+    int faceNum = THFT_FaceTracking(channel, image.data, facePos);
+    //int faceNum = THFI_DetectFace(channel, image.data, 24, image.width, image.height, facePos, MAX_DETECT_FACE);
+    if (faceNum < 0) {
+        ERR("THFI_DetectFace return " << faceNum);
+    } else {
+        results.resize(faceNum);
+        for (int i = 0; i < faceNum; i++) {
+            BasicFace::FaceDetectResult &result = results[i];
+            THFT_FaceInfo &face = facePos[i];
+            result.angle = sqrt(face.fAngle.pitch * face.fAngle.pitch / 3 +
+                                face.fAngle.roll * face.fAngle.roll / 3 +
+                                face.fAngle.yaw * face.fAngle.yaw / 3);
+            result.yaw = face.fAngle.yaw;
+            result.pitch = face.fAngle.pitch;
+            result.roll = face.fAngle.roll;
+            result.left = face.rcFace.left;
+            result.top = face.rcFace.top;
+            result.width = face.rcFace.right - face.rcFace.left;
+            result.height = face.rcFace.bottom - face.rcFace.top;
+//                result.score = face.nQuality / 100.0f;
+            result.score = face.fAngle.confidence;
+            result.trackingId = face.nFaceID;
+        }
+    }
+    return results;
+}
+
+/***
+ * @todo
+ *
+ * @param image
+ * @return
+ */
+vector<BasicFace::FaceFeatureResult> FaceTrackingWrapper::extractFace(BasicFace::FaceImage image) {
+    return vector<BasicFace::FaceFeatureResult>();
+}
+
+/***
+ * @todo
+ * @param feature1
+ * @param feature2
+ * @return
+ */
+float FaceTrackingWrapper::compareFeature(BasicFace::Feature &feature1, BasicFace::Feature &feature2) {
+    return 0;
+}
+
+
+

--
Gitblit v1.8.0