From f5ad66e7cfcc014859ef6bcb3573a41fa2cb689c Mon Sep 17 00:00:00 2001 From: pansen <pansen626@sina.com> Date: 星期三, 19 十二月 2018 18:10:24 +0800 Subject: [PATCH] save code --- QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp | 75 ++++++------ QiaoJiaSystem/StructureApp/FaceDefine.h | 0 QiaoJiaSystem/StructureApp/FaceTrackingWrapper.h | 6 QiaoJiaSystem/StructureApp/TrackingTrigger.h | 63 ++++++++-- QiaoJiaSystem/StructureApp/FaceRpcElement.cpp | 25 +++- QiaoJiaSystem/build/DataWebServer | 0 QiaoJiaSystem/StructureApp/FaceRpcElement.h | 7 + /dev/null | 98 ---------------- QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.cpp | 1 QiaoJiaSystem/StructureApp/FaceTrackingWrapper.cpp | 38 +++++ QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt | 1 QiaoJiaSystem/build/VideoAnalysFromHC | 0 QiaoJiaSystem/StructureApp/CMakeLists.txt | 6 - QiaoJiaSystem/build/StructureApp | 0 14 files changed, 151 insertions(+), 169 deletions(-) diff --git a/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.cpp b/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.cpp index 7e2236d..0f0ec1a 100644 --- a/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.cpp +++ b/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.cpp @@ -56,6 +56,7 @@ memcpy(&face, &pos, sizeof(pos) - sizeof(pos.pFacialData)); face.pFacialData.resize(sizeof(pos.pFacialData)); memcpy(face.pFacialData.data(), pos.pFacialData, sizeof(pos.pFacialData)); + face.pfaceId = -1; // DBG(face.fAngle.confidence); faces.push_back(face); } diff --git a/QiaoJiaSystem/StructureApp/CMakeLists.txt b/QiaoJiaSystem/StructureApp/CMakeLists.txt index 663a782..af6e988 100644 --- a/QiaoJiaSystem/StructureApp/CMakeLists.txt +++ b/QiaoJiaSystem/StructureApp/CMakeLists.txt @@ -118,9 +118,3 @@ ${LIBS} ) -#add_executable(AppPipeControllerTest -# AppPipeControllerTest.cpp -# ${SOURCES}) -#target_link_libraries(AppPipeControllerTest -# ${LIBS} -# ) diff --git a/QiaoJiaSystem/testCodeMod/FaceDefine.h b/QiaoJiaSystem/StructureApp/FaceDefine.h similarity index 100% rename from QiaoJiaSystem/testCodeMod/FaceDefine.h rename to QiaoJiaSystem/StructureApp/FaceDefine.h diff --git a/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp index ccee428..87f282f 100644 --- a/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp +++ b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp @@ -4,6 +4,7 @@ #include <QtCore/QString> #include <basic/timer_counter/Clocktimer.h> #include <basic/util/opencv/CvUtil.h> +#include "FaceTrackingWrapper.h" #define GETSCORE(IDENT) appPref.getFloatData(IDENT) == -1 ? 95 : appPref.getFloatData(IDENT); @@ -37,15 +38,18 @@ sharedMemory(nullptr), trackingTrigger(nullptr) { sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str())); if (!sharedMemory->create(4608 * 2592 * 4)) { - sharedMemory->attach(); + sharedMemory-> + + attach(); DBG("size is " << sharedMemory->size()); } // string t_camIdex = getProperty("dev_id"); - //#todo +//#todo string t_camIdex; if (shareMemoryName.find("/")) { - string_replace(shareMemoryName, "//", "/"); + string_replace(shareMemoryName, + "//", "/"); auto dev_pos = shareMemoryName.find("/cut/") + 5; auto ch_pos = shareMemoryName.find("/", dev_pos) + 1; auto str_device_id = shareMemoryName.substr(dev_pos, ch_pos - dev_pos - 1); @@ -62,6 +66,7 @@ t_score = t_score / 100; trackingTrigger = new TrackingTrigger(t_score); + m_trackingRet = appPref.getIntData("FaceTrackingRet"); } FaceRpcElement::~FaceRpcElement() { @@ -86,9 +91,15 @@ try { auto server = rpcClient.getServer(); if (!server) ERR("server is null"); - faces = server->faceDetect(image.cols, image.rows, sharedMemory->key().toStdString()); + + if (m_trackingRet) { +// #todo xxxx.detectFace + faces = faceTrackingFunc(m_channel, image); + } else { + faces = server->faceDetect(image.cols, image.rows, sharedMemory->key().toStdString()); + } // DBG("faces.size " << faces.size()); - for (auto face: faces) { + for (auto &face: faces) { ::FaceDetect::RECT &rect = face.rcFace; ScoredRect scoredRect; int x = face.rcFace.left; @@ -98,7 +109,9 @@ scoredRect.rect = {x, y, w, h}; scoredRect.score = (float) face.fAngle.confidence; - if (trackingTrigger->triggerOnce(scoredRect)) { + bool newFaceRet = m_trackingRet ? trackingTrigger->triggerOnce(scoredRect, face.pfaceId) + : trackingTrigger->triggerOnce(scoredRect); + if (newFaceRet) { auto property = server->faceProperty(image.cols, image.rows, face, sharedMemory->key().toStdString()); trackingTrigger->getLastRect().properties["id"] = to_string(scoredRect.id); trackingTrigger->getLastRect().properties["age"] = to_string(property.age); diff --git a/QiaoJiaSystem/StructureApp/FaceRpcElement.h b/QiaoJiaSystem/StructureApp/FaceRpcElement.h index 4804da4..d1799bd 100644 --- a/QiaoJiaSystem/StructureApp/FaceRpcElement.h +++ b/QiaoJiaSystem/StructureApp/FaceRpcElement.h @@ -42,11 +42,18 @@ QSharedMemory *sharedMemory; ::FaceDetect::Faces faces; TrackingTrigger *trackingTrigger; + +// 褰撳墠甯ф柊澧炰汉鑴� 锛� ::FaceDetect::Faces triggerFaces; +// 褰撳墠甯ф柊澧炰汉鑴稿浘鐗囷紵 std::vector<cv::Mat> triggerMats; +// 褰撳墠甯ф柊澧炰汉鑴镐綅缃紵 std::vector<ScoredRect> triggerScoredRects; + //褰曞儚瑙﹀彂 TriggerElement m_triggerElement; +// 鏄惁浣跨敤sdk璺熻釜 + bool m_trackingRet; }; #endif // FACERPCELEMENT_H diff --git a/QiaoJiaSystem/testCodeMod/FaceTrackingWrapper.cpp b/QiaoJiaSystem/StructureApp/FaceTrackingWrapper.cpp similarity index 70% rename from QiaoJiaSystem/testCodeMod/FaceTrackingWrapper.cpp rename to QiaoJiaSystem/StructureApp/FaceTrackingWrapper.cpp index bd334b6..90d75ab 100644 --- a/QiaoJiaSystem/testCodeMod/FaceTrackingWrapper.cpp +++ b/QiaoJiaSystem/StructureApp/FaceTrackingWrapper.cpp @@ -5,6 +5,37 @@ #include "FaceTrackingWrapper.h" #include "Debug.h" +#include <FaceDetectServer/rpc/FaceServer.h> +#include <opencv2/opencv.hpp> + +static FaceTrackingWrapper g_faceTrackingWrapper; +static std::map<std::string, int> g_channelCache; + +static ::FaceDetect::Faces faceTrackingFunc(int channel, cv::Mat &image) { + FaceDetect::Faces faces; + int channel = 0; + BasicFace::FaceImage faceImage{image.cols, image.rows, image.step, image.data}; + + THFT_FaceInfo facePos[MAX_DETECT_FACE]; + int faceNum = THFT_FaceTracking(channel, image.data, facePos); + + if (faceNum > 0) { + for (int i = 0; i < faceNum; i++) { + FaceDetect::FacePos face; + auto &pos = facesPos[i]; + memcpy(&face, &pos, sizeof(pos) - sizeof(pos.pFacialData) - sizeof(pos.nFaceID)); + face.pFacialData.resize(sizeof(pos.pFacialData)); + memcpy(face.pFacialData.data(), pos.pFacialData, sizeof(pos.pFacialData)); + face.pfaceId = pos.nFaceID; +// DBG(face.fAngle.confidence); + faces.push_back(face); + } + } else { + DBG("Face num is 0"); + } + +} + FaceTrackingWrapper::FaceTrackingWrapper() { @@ -45,11 +76,12 @@ * @param image * @return */ -std::vector<BasicFace::FaceDetectResult> FaceTrackingWrapper::detectFace(BasicFace::FaceImage image) { +std::vector<BasicFace::FaceDetectResult> FaceTrackingWrapper::detectFace(const BasicFace::FaceImage &image) { return vector<BasicFace::FaceDetectResult>(); } -std::vector<BasicFace::FaceDetectResult> FaceTrackingWrapper::trackingFace(int channel, BasicFace::FaceImage image) { +std::vector<BasicFace::FaceDetectResult> +FaceTrackingWrapper::trackingFace(int channel, const BasicFace::FaceImage &image) { vector<BasicFace::FaceDetectResult> results; // ClockTimer ct("CasiaFaceWapper::detectFace"); if (channel == -1) { @@ -90,7 +122,7 @@ * @param image * @return */ -vector<BasicFace::FaceFeatureResult> FaceTrackingWrapper::extractFace(BasicFace::FaceImage image) { +vector<BasicFace::FaceFeatureResult> FaceTrackingWrapper::extractFace(const BasicFace::FaceImage &image) { return vector<BasicFace::FaceFeatureResult>(); } diff --git a/QiaoJiaSystem/testCodeMod/FaceTrackingWrapper.h b/QiaoJiaSystem/StructureApp/FaceTrackingWrapper.h similarity index 81% rename from QiaoJiaSystem/testCodeMod/FaceTrackingWrapper.h rename to QiaoJiaSystem/StructureApp/FaceTrackingWrapper.h index 83e04f1..a220dcd 100644 --- a/QiaoJiaSystem/testCodeMod/FaceTrackingWrapper.h +++ b/QiaoJiaSystem/StructureApp/FaceTrackingWrapper.h @@ -34,11 +34,11 @@ bool initHandle(); - std::vector<BasicFace::FaceDetectResult> detectFace(BasicFace::FaceImage image); + std::vector<BasicFace::FaceDetectResult> detectFace(const BasicFace::FaceImage &image); - std::vector<BasicFace::FaceDetectResult> trackingFace(int channel, BasicFace::FaceImage image); + std::vector<BasicFace::FaceDetectResult> trackingFace(int channel, const BasicFace::FaceImage &image); - vector<BasicFace::FaceFeatureResult> extractFace(BasicFace::FaceImage image); + vector<BasicFace::FaceFeatureResult> extractFace(const BasicFace::FaceImage &image); static float compareFeature(BasicFace::Feature &feature1, BasicFace::Feature &feature2); diff --git a/QiaoJiaSystem/StructureApp/TrackingTrigger.h b/QiaoJiaSystem/StructureApp/TrackingTrigger.h index 8fe9509..544dd77 100644 --- a/QiaoJiaSystem/StructureApp/TrackingTrigger.h +++ b/QiaoJiaSystem/StructureApp/TrackingTrigger.h @@ -9,7 +9,8 @@ using namespace std; struct ScoredRect { - ScoredRect() : id(-1) ,isMask(false){} + ScoredRect() : id(-1), isMask(false) {} + bool isMask; float score; cv::Rect rect; @@ -22,7 +23,50 @@ TrackingTrigger(float threshold) : threshold(threshold), faceTrackingId(0) {} - bool triggerOnce(ScoredRect &rect) { + + bool triggerOnce(ScoredRect &rect, long faceId = -1) { + if (faceId < 0) { + return triggerOnce(rect, false); + } else { + bool found = false; + for (auto lastRect: lastScoreRects) { + if (lastRect.id >= 0 && lastRect.id == faceId) { + found = true; + rect.id = faceId; + rect.properties = lastRect.properties; + tempScoreRects.push_back(rect); + break; + } + } + if (!found) { + if (rect.score < threshold) { +// tempScoreRects.push_back(rect); + return false; + } else { + rect.id = faceId; + tempScoreRects.push_back(rect); + return true; + } + } + return false; + } + } + + void triggerLine() { + lastScoreRects.swap(tempScoreRects);// = tempScoreRects; + tempScoreRects.clear(); + } + + ScoredRect &getLastRect() { + return tempScoreRects[tempScoreRects.size() - 1]; + } + + std::vector<ScoredRect> getLastScoreRects() const { + return lastScoreRects; + } + +private: + bool triggerOnce(ScoredRect &rect, bool) { bool found = false; for (auto lastRect: lastScoreRects) { if (lastRect.id >= 0 && (rect.rect & lastRect.rect).area() > lastRect.rect.area() * 0.4) { @@ -46,23 +90,12 @@ return false; } - void triggerLine() { - lastScoreRects = tempScoreRects; - tempScoreRects.clear(); - } - - ScoredRect &getLastRect() { - return tempScoreRects[tempScoreRects.size() - 1]; - } - - std::vector<ScoredRect> getLastScoreRects() const { - return lastScoreRects; - } - private: float threshold; std::vector<ScoredRect> lastScoreRects; std::vector<ScoredRect> tempScoreRects; + std::vector<int> lastScoreInts; + std::vector<int> tempScoreInts; std::atomic<long> faceTrackingId; }; diff --git a/QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt b/QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt index 1d8f81c..1caec38 100644 --- a/QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt +++ b/QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt @@ -52,6 +52,7 @@ ../StructureApp/RecordVideoElement.cpp ../StructureApp/JudgmentRetrogradeTool.cpp ../StructureApp/PerimeterElement.cpp + ../StructureApp/FaceTrackingWrapper.cpp ../StructureApp/NewRecordVideoElement.cpp diff --git a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp index b96f6bd..db732c6 100644 --- a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp +++ b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp @@ -68,6 +68,7 @@ } void RtspAnalysElement::init() { + appPref.setIntData("FaceTrackingRet", 1); auto lst = m_lDBTool->searchCamDevTableAll(); auto lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); @@ -106,7 +107,7 @@ vector<int> sdkDetCoVec = chnString2Vec(en_sdk.str_det_thr.toStdString()); vector<int> sdkComCoVec = chnString2Vec(en_sdk.str_cmp_thr.toStdString()); - int camId=item.str_cam_dev_id.toInt(); + int camId = item.str_cam_dev_id.toInt(); int t_size = sdkVec.size(); for (int i = 0; i < t_size; i++) { switch (sdkVec[i]) { @@ -116,6 +117,7 @@ SETSCORE(sdkDetCoVec, i, t_camIdex + "face.det"); SETSCORE(sdkComCoVec, i, t_camIdex + "face.cmp"); DBG(" TESTCODE " << sdkDetCoVec[i] << " " << sdkComCoVec[i]); +// #todo add param break; } @@ -137,15 +139,15 @@ json["perimeter.enable"] = "1"; SETSCORE(sdkDetCoVec, i, t_camIdex + "perimeter.det"); SETSCORE(sdkComCoVec, i, t_camIdex + "perimeter.cmp"); - setDataByType(4,json,camId); + setDataByType(4, json, camId); break; - } + } case 5: { json["crowd.enable"] = "1"; SETSCORE(sdkDetCoVec, i, t_camIdex + "crowd.det"); SETSCORE(sdkComCoVec, i, t_camIdex + "crowd.cmp"); - setDataByType(5,json,camId); + setDataByType(5, json, camId); break; } case 6: { @@ -153,7 +155,7 @@ json["keepRight.enable"] = "1"; SETSCORE(sdkDetCoVec, i, t_camIdex + "keepRight.det"); SETSCORE(sdkComCoVec, i, t_camIdex + "keepRight.cmp"); - setDataByType(6,json,camId); + setDataByType(6, json, camId); break; } } @@ -266,39 +268,36 @@ } return result; } -void RtspAnalysElement::setDataByType(int type,Json::Value& json,int camId) -{ + +void RtspAnalysElement::setDataByType(int type, Json::Value &json, int camId) { switch (type) { - case 4: - { - auto rule=m_lDBTool->searchPerimeterRuleByCamId(camId); - json["perimeter.area"]=rule.strAreas.toStdString(); - json["perimeter.num"]=rule.nAlarmPeopleNum; - json["perimeter.delay"]=rule.nTriggerDelay; - json["perimeter.tolerance"]=rule.nTriggertolerance; - break; - } - case 5: - { - auto rule=m_lDBTool->searchCrowdRuleByCamId(camId); - json["crowd.area"]=rule.strAreas.toStdString(); - json["crowd.num"]=rule.nAlarmPeopleNum; - json["crowd.delay"]=rule.nTriggerDelay; - json["crowd.tolerance"]=rule.nTriggertolerance; - break; - } - case 6: - { - auto rule=m_lDBTool->searchActRuleByCamId(camId); - json["keepRight.leftArea"]=rule.strAreas.toStdString(); - json["keepRight.leftLine"]=rule.strLine.toStdString(); - json["keepRight.rightArea"]=rule.strExAreas.toStdString(); - json["keepRight.rightLine"]=rule.strExLine.toStdString(); - json["keepRight.delay"]=rule.nTriggerDelay; - json["keepRight.tolerance"]=rule.nTriggertolerance; - break; - } - default: - break; + case 4: { + auto rule = m_lDBTool->searchPerimeterRuleByCamId(camId); + json["perimeter.area"] = rule.strAreas.toStdString(); + json["perimeter.num"] = rule.nAlarmPeopleNum; + json["perimeter.delay"] = rule.nTriggerDelay; + json["perimeter.tolerance"] = rule.nTriggertolerance; + break; + } + case 5: { + auto rule = m_lDBTool->searchCrowdRuleByCamId(camId); + json["crowd.area"] = rule.strAreas.toStdString(); + json["crowd.num"] = rule.nAlarmPeopleNum; + json["crowd.delay"] = rule.nTriggerDelay; + json["crowd.tolerance"] = rule.nTriggertolerance; + break; + } + case 6: { + auto rule = m_lDBTool->searchActRuleByCamId(camId); + json["keepRight.leftArea"] = rule.strAreas.toStdString(); + json["keepRight.leftLine"] = rule.strLine.toStdString(); + json["keepRight.rightArea"] = rule.strExAreas.toStdString(); + json["keepRight.rightLine"] = rule.strExLine.toStdString(); + json["keepRight.delay"] = rule.nTriggerDelay; + json["keepRight.tolerance"] = rule.nTriggertolerance; + break; + } + default: + break; } } diff --git a/QiaoJiaSystem/build/DataWebServer b/QiaoJiaSystem/build/DataWebServer index 47ad9d1..b288461 100644 --- a/QiaoJiaSystem/build/DataWebServer +++ b/QiaoJiaSystem/build/DataWebServer Binary files differ diff --git a/QiaoJiaSystem/build/StructureApp b/QiaoJiaSystem/build/StructureApp index 45095a3..1dc58b6 100644 --- a/QiaoJiaSystem/build/StructureApp +++ b/QiaoJiaSystem/build/StructureApp Binary files differ diff --git a/QiaoJiaSystem/build/VideoAnalysFromHC b/QiaoJiaSystem/build/VideoAnalysFromHC index 81df8c6..c2b295f 100644 --- a/QiaoJiaSystem/build/VideoAnalysFromHC +++ b/QiaoJiaSystem/build/VideoAnalysFromHC Binary files differ diff --git a/QiaoJiaSystem/testCodeMod/CMakeLists.txt b/QiaoJiaSystem/testCodeMod/CMakeLists.txt deleted file mode 100644 index b95da27..0000000 --- a/QiaoJiaSystem/testCodeMod/CMakeLists.txt +++ /dev/null @@ -1,48 +0,0 @@ -cmake_minimum_required(VERSION 3.5) -project(testCode) -set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build) -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_BUILD_TYPE debug) -add_definitions(-DDEBUG_ERR -DDEBUG_INFO) -add_definitions(-DGLOG) -add_compile_options(-fPIC) - -SET(LIBS - glog - opencv_world - Qt5Core - THFaceImage - THFaceTracking - THFeature - THFaceProperty - pthread - ) -include_directories( - ./rpc - ../../../BasicPlatForm - ../../../BasicPlatForm/basic/debug - ../../../BasicPlatForm/libs/opencv/include - ../../../BasicPlatForm/libs/ffmpeg/include - ../../../BasicPlatForm/wrapper/casia/include - ../../../BasicPlatForm/libs/Casia_Face/FaceSdk/include - /usr/include/x86_64-linux-gnu/qt5 - #glog - ../../../BasicPlatForm/libs/glog/include -) - -link_directories( - #glog - ../../../BasicPlatForm/libs/glog/lib - /usr/local/cuda/lib64 - ../../../BasicPlatForm/libs/opencv/lib - ../../../BasicPlatForm/libs/Casia_Face/FaceSdk/lib/gpu -) - -add_executable(${PROJECT_NAME} - main.cpp - FaceTrackingWrapper.cpp FaceTrackingWrapper.h FaceDefine.h) -target_link_libraries(${PROJECT_NAME} - ${LIBS} - ) - - diff --git a/QiaoJiaSystem/testCodeMod/main.cpp b/QiaoJiaSystem/testCodeMod/main.cpp deleted file mode 100644 index 11f3fd1..0000000 --- a/QiaoJiaSystem/testCodeMod/main.cpp +++ /dev/null @@ -1,98 +0,0 @@ -// -// Created by ps on 18-12-18. -// - -#include <Debug.h> -#include "FaceTrackingWrapper.h" - -using namespace cv; - -//get current system time -double msecond() { - struct timeval tv; - gettimeofday(&tv, 0); - return (tv.tv_sec * 1.0e3 + tv.tv_usec * 1.0e-3); -} - -int main(int argc, char **argv) { - - ENABLEGLOG("./log/"); - FaceTrackingWrapper faceTrackingWrapper; - - bool bOpen; - VideoCapture vc; -// rtsp stream address - bOpen = vc.open("rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream"); - //camera -// if (1) { -// bool bSet1 = vc.set(CV_CAP_PROP_FRAME_WIDTH, w); -// bool bSet2 = vc.set(CV_CAP_PROP_FRAME_HEIGHT, h); -// bOpen = vc.open(devID); -// -// } -// //video file -// else { -// bOpen = vc.open("test.avi"); -// -// } - if (!bOpen) { - printf("Open video source faild."); - return 0; - } - - int nWidth = vc.get(CV_CAP_PROP_FRAME_WIDTH); - int nHeight = vc.get(CV_CAP_PROP_FRAME_HEIGHT); - - printf("FRAME_WIDTH=%d,FRAME_HEIGHT=%d\n", nWidth, nHeight); - - - BasicFace::InitParam initParam; - initParam.nDeviceID = 0; - initParam.nImageWidth = nWidth; - initParam.nImageHeight = nHeight; - initParam.nMaxFaceNum = 50; - initParam.nSampleSize = nWidth / 2; - initParam.nDetectionIntervalFrame = 12; - - faceTrackingWrapper.setChannelParam(0, initParam); - faceTrackingWrapper.setChannelParam(1, initParam); - faceTrackingWrapper.setChannelParam(2, initParam); - - faceTrackingWrapper.initHandle(); - Mat frame; - - while (1) { - - vc >> frame; - if (frame.empty()) { - waitKey(30); - continue; - } - - int nNum = 0; - THFT_FaceInfo *pFaceInfos = new THFT_FaceInfo[50]; - double t1, t2; - t1 = msecond(); -// nNum = THFT_FaceTracking(2, frame.data, pFaceInfos); - - BasicFace::FaceImage faceImage2{frame.cols, frame.rows, frame.step, frame.data}; - auto t_lists = faceTrackingWrapper.trackingFace(2, faceImage2); - t2 = msecond(); - delete[] pFaceInfos; - printf("face tracking time=%fms faceNun is %d\n", t2 - t1, (int) t_lists.size()); - - imshow("Face Tracking", frame); - waitKey(30); - } - destroyWindow("Face Tracking"); - - vc.release(); - THFT_Release(); - - getchar(); - return 0; - - - INFO("test"); - -} \ No newline at end of file -- Gitblit v1.8.0