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