From 9730739fed10585b192a7c6bc36f05121dd36ead Mon Sep 17 00:00:00 2001 From: 11566hyc <123456789> Date: Fri, 24 Jan 2025 14:25:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0bTrackingPipe=E4=B8=8EbTracki?= =?UTF-8?q?ng=E4=BA=92=E6=96=A5=E4=BF=9D=E6=8A=A4=EF=BC=8C=E9=98=B2?= =?UTF-8?q?=E6=AD=A2=E8=BE=93=E5=87=BA=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NeoTracker/src/Arith_EOController.cpp | 5 +++++ NeoTracker/src/Arith_Status_MOTRACK.cpp | 17 +++++++---------- NeoTracker/src/Arith_Status_SEARCH.cpp | 2 +- NeoTracker/src/Arith_Status_TRACK.cpp | 4 ++-- NeoTracker/src/Arith_TrackSAObj.cpp | 1 + NeoTracker/src/Arith_Tracker.cpp | 2 +- NeoTracker/src/NeoArithStandardDll.cpp | 11 +++++++++-- 7 files changed, 26 insertions(+), 16 deletions(-) diff --git a/NeoTracker/src/Arith_EOController.cpp b/NeoTracker/src/Arith_EOController.cpp index 0b897ec..b00e28b 100644 --- a/NeoTracker/src/Arith_EOController.cpp +++ b/NeoTracker/src/Arith_EOController.cpp @@ -907,6 +907,11 @@ void Arith_EOController::GLB_Release_Trackers(SINT32 nPipeNum) pPipe->bTracking = FALSE; pPipe->nDelCntThres = GLB_PIPE_DEL_MIN_STARE; } + if (pPipe->bTrackingPipe) + { + pPipe->bTrackingPipe = FALSE; + pPipe->nDelCntThres = GLB_PIPE_DEL_MIN_STARE; + } pPipe->nShowPipeID = 0;//清空外部显示批号 } } diff --git a/NeoTracker/src/Arith_Status_MOTRACK.cpp b/NeoTracker/src/Arith_Status_MOTRACK.cpp index d85b7f3..440e92f 100644 --- a/NeoTracker/src/Arith_Status_MOTRACK.cpp +++ b/NeoTracker/src/Arith_Status_MOTRACK.cpp @@ -13,9 +13,6 @@ void Arith_EOController::Proc_MOTLock(GD_VIDEO_FRAME_S img, GLB_INPUT & g_Input, #if 1 // 管道队列 PIPE* pPipeArray = g_GLB_PipeProc->getPipeArray(); - - // 原跟踪管道跟踪器所有权转移给当前锁定管道,后续的资源释放交给g_GLB_Trackers[nChoicePipeID] 这条管道 - auto tracker = g_GLB_Trackers[g_GLB_stPara.nLockPipeInd]; if (g_GLB_stPara.stLockCtrl == LockMode::LOCK_POINT) { // 找到点选的附近告警管道 @@ -58,7 +55,7 @@ void Arith_EOController::Proc_MOTLock(GD_VIDEO_FRAME_S img, GLB_INPUT & g_Input, pPipe->bTracking = true; pPipe->nDelCntThres = GLB_FRM_FREQ; //辅跟踪目标记忆1S g_GLB_stPara.bEnForceGuide = FALSE; //强制提取复位 - g_GLB_stPara.stLockCtrl = LOCK_NONE; //锁定标记复位 + //tracker->ResetByBackPipe(&pPipeArray[nChoicePipeID], img, &g_Input, 1); //g_GLB_PipeProc->DelPipe(&pPipeArray[nChoicePipeID]); @@ -68,7 +65,7 @@ void Arith_EOController::Proc_MOTLock(GD_VIDEO_FRAME_S img, GLB_INPUT & g_Input, //g_GLB_stPara.nStatus = GLB_STATUS_TRACK; } - + g_GLB_stPara.stLockCtrl = LOCK_NONE; //锁定标记复位 } return; @@ -258,7 +255,11 @@ BBOOL Arith_EOController::Arith_Status_MOTRACK(GD_VIDEO_FRAME_S img, GLB_INPUT& // 管道队列 PIPE* pPipeArray = g_GLB_PipeProc->getPipeArray(); SINT32 nPipeArrayLen = g_GLB_stPara.nPipeMaxNum; + // 目标系统相关的其他信息计算 + Arith_CalcTargetSysInfo(pFrameTargetArray, nFrmTargetNum, g_Input); + // MOT管道处理 + g_GLB_PipeProc->Run(pFrameTargetArray, nFrmTargetNum, GLB_STATUS_TRACK, g_Input); // 执行MOT //SINT32 nTrackingNum = MultiTargteTrack(img, g_GLB_PipeProc, g_GLB_Trackers, &g_Input, nPipeArrayLen, &g_stArithPara); // 取被锁定的单目标管道 @@ -296,11 +297,7 @@ BBOOL Arith_EOController::Arith_Status_MOTRACK(GD_VIDEO_FRAME_S img, GLB_INPUT& // 处理锁定指令,初始化跟踪 Proc_MOTLock(img, g_Input, g_para); - // 目标系统相关的其他信息计算 - Arith_CalcTargetSysInfo(pFrameTargetArray, nFrmTargetNum, g_Input); - - // MOT管道处理 - g_GLB_PipeProc->Run(pFrameTargetArray, nFrmTargetNum, GLB_STATUS_TRACK, g_Input); + if (nTrackingNum > 1) { diff --git a/NeoTracker/src/Arith_Status_SEARCH.cpp b/NeoTracker/src/Arith_Status_SEARCH.cpp index ff16603..a5574be 100644 --- a/NeoTracker/src/Arith_Status_SEARCH.cpp +++ b/NeoTracker/src/Arith_Status_SEARCH.cpp @@ -118,7 +118,7 @@ SINT32 Arith_EOController::Proc_SearchLock(GD_VIDEO_FRAME_S img, GLB_INPUT & g_I // 管道标记为跟踪 pLockPipe->bTrackingPipe = true; - + pLockPipe->bTracking = FALSE;//防止后续显示错误 // 转入跟踪状态 g_GLB_stPara.stLockCtrl = LOCK_NONE; //锁定标记复位 g_GLB_stPara.bEnForceGuide = FALSE; //强制提取复位 diff --git a/NeoTracker/src/Arith_Status_TRACK.cpp b/NeoTracker/src/Arith_Status_TRACK.cpp index a5e7611..e9f6446 100644 --- a/NeoTracker/src/Arith_Status_TRACK.cpp +++ b/NeoTracker/src/Arith_Status_TRACK.cpp @@ -139,7 +139,7 @@ void Arith_EOController::Proc_SOTLock_NoRemainID(GD_VIDEO_FRAME_S img, GLB_INPUT // 转移跟踪状态 pNewLockPipe->bTrackingPipe = true; - + pNewLockPipe->bTracking = false; // 删除原目标管道 g_GLB_PipeProc->DelPipe(pOldPipe); @@ -176,7 +176,7 @@ void Arith_EOController::Proc_SOTLock_NoRemainID(GD_VIDEO_FRAME_S img, GLB_INPUT // 转移跟踪状态 pNewLockPipe->bTrackingPipe = true; - + pNewLockPipe->bTracking = false; // 删除原目标管道 g_GLB_PipeProc->DelPipe(pOldPipe); diff --git a/NeoTracker/src/Arith_TrackSAObj.cpp b/NeoTracker/src/Arith_TrackSAObj.cpp index 20ff8b5..8396b70 100644 --- a/NeoTracker/src/Arith_TrackSAObj.cpp +++ b/NeoTracker/src/Arith_TrackSAObj.cpp @@ -90,6 +90,7 @@ bool SA_Tracker::Init(UINT16* pSrc, SINT32 nWidth, SINT32 nHeight, PIPE* pTracki // 标记为跟踪管道 m_LockingPipe->bTrackingPipe = true; + m_LockingPipe->bTracking = false; SINT32 nEnd = m_LockingPipe->ubEnd; SINT32 nObjSize = (SINT32)(m_LockingPipe->ObjectFilter.fPxlsCnt); TARGET_OBJECT* pTrackingTarget = &m_LockingPipe->objHistoryList[nEnd]; diff --git a/NeoTracker/src/Arith_Tracker.cpp b/NeoTracker/src/Arith_Tracker.cpp index 650ac9d..39c2ad2 100644 --- a/NeoTracker/src/Arith_Tracker.cpp +++ b/NeoTracker/src/Arith_Tracker.cpp @@ -206,7 +206,7 @@ bool Tracker::ResetByBackPipe(PIPE* pNewPipe, GD_VIDEO_FRAME_S img, GLB_INPUT* p // 恢复跟踪标记 pPipeOld->bTrackingPipe = true; - + pPipeOld->bTracking = false; // 新管道被eat,需完全删除,交外部执行,tracker没这个权限。 diff --git a/NeoTracker/src/NeoArithStandardDll.cpp b/NeoTracker/src/NeoArithStandardDll.cpp index 6101ee0..00e21a8 100644 --- a/NeoTracker/src/NeoArithStandardDll.cpp +++ b/NeoTracker/src/NeoArithStandardDll.cpp @@ -474,7 +474,10 @@ void ARIDLL_OutputPipeTarget(Arith_EOController* pArith, ARIDLL_OUTPUT* pstOutpu { obj.nOutputID = pPipe->nGuideBatchID; } - + if (pPipe->bTrackingPipe) + { + pPipe->bTracking = FALSE; + } // 跟踪目标送进跟踪队列 if (pPipe->bTrackingPipe || pPipe->bTracking) { @@ -487,7 +490,7 @@ void ARIDLL_OutputPipeTarget(Arith_EOController* pArith, ARIDLL_OUTPUT* pstOutpu } else { - if (0 < pPipe->nShowPipeID) + if (1 < pPipe->nShowPipeID) { obj.nOutputID = pPipe->nShowPipeID; } @@ -497,6 +500,10 @@ void ARIDLL_OutputPipeTarget(Arith_EOController* pArith, ARIDLL_OUTPUT* pstOutpu { continue;//最大到255 } + if (pArith->g_TrackCurrentID < 2) + { + pArith->g_TrackCurrentID = 2;//防错 + } pPipe->nShowPipeID = pArith->g_TrackCurrentID; obj.nOutputID = pPipe->nShowPipeID; pArith->g_TrackCurrentID++;