From afcb649c8a2785c6095be5762c6077f9e15afd1a Mon Sep 17 00:00:00 2001 From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674> Date: 星期三, 02 八月 2017 10:33:31 +0800 Subject: [PATCH] c++ dupl image --- VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCacheForPLBG.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 46 insertions(+), 2 deletions(-) diff --git a/VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCacheForPLBG.cpp b/VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCacheForPLBG.cpp index 9c1fc23..7a82720 100644 --- a/VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCacheForPLBG.cpp +++ b/VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCacheForPLBG.cpp @@ -39,9 +39,13 @@ size_t frameRGBSize; bool frameTruncated; + typedef std::map<int, float> block_score_filter_map_t; + block_score_filter_map_t blockScoreFilter; + FcPmBreackerContextPLBG() : lastOutputs(), lastOutputsRGBBufs(), frameYUV(), frameYUVSize(0), frameRGB(),frameRGBSize(0), - frameTruncated(false) + frameTruncated(false), + blockScoreFilter() {} void reset() @@ -178,8 +182,48 @@ size_t FaceCacheForPLBG::getFaceCount(const PipeMaterial& pm) const { + FcPmBreackerContextPLBG& ctx(*(FcPmBreackerContextPLBG*)_ctx); plbg_output_vec_t* plbgOut = (plbg_output_vec_t*)pm.buffer; - return plbgOut->size(); + + bool hasFiltedBlock = false; + int min_st_track_id = 0; + + for (plbg_output_vec_t::iterator iterBGOut = plbgOut->begin(); iterBGOut != plbgOut->end(); ++iterBGOut) + { + int st_track_id = (int)(int64_t)(iterBGOut->rectInOriginFrame.userData); + float score = iterBGOut->score; + + FcPmBreackerContextPLBG::block_score_filter_map_t::iterator iterFilter = ctx.blockScoreFilter.find(st_track_id); + if (iterFilter == ctx.blockScoreFilter.end()) + { + ctx.blockScoreFilter.insert(std::make_pair(st_track_id, score)); + hasFiltedBlock = true; + } + else + { + if (iterFilter->second < score) + { + iterFilter->second = score; + hasFiltedBlock = true; + } + } + + if (min_st_track_id > st_track_id) + min_st_track_id = st_track_id; + } + + for(FcPmBreackerContextPLBG::block_score_filter_map_t::iterator iterFilter = ctx.blockScoreFilter.begin(); iterFilter != ctx.blockScoreFilter.end(); ) + { + if (iterFilter->first < min_st_track_id) + iterFilter = ctx.blockScoreFilter.erase(iterFilter); + else + ++iterFilter; + } + + if (hasFiltedBlock) + return plbgOut->size(); + else + return 0; } -- Gitblit v1.8.0