|
|
|
|
|
|
|
|
|
|
|
/*********版权所有(C)2020,武汉高德红外股份有限公司***************************************
|
|
|
|
|
|
* 文件名称: Arith_Detector.h
|
|
|
|
|
|
* 文件标识:
|
|
|
|
|
|
* 内容摘要: 检测器接口,根据项目情况实现,多个检测算法工作时注意检测结果的去重
|
|
|
|
|
|
* 其它说明: 外部尽量不要跨过 Arith_Detect模块对具体检测算法进行设置和调用,保持良好封装性
|
|
|
|
|
|
* 当前版本:
|
|
|
|
|
|
* 创建作者:04046WCW
|
|
|
|
|
|
* 创建日期:2020/03/05
|
|
|
|
|
|
* 包含关系:
|
|
|
|
|
|
*****************************************************************************************/
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include "Arith_Common.hpp"
|
|
|
|
|
|
#include "API_DetectSAObj.h"
|
|
|
|
|
|
#include "Arith_ThreadPool.h" // 引入线程池头文件
|
|
|
|
|
|
|
|
|
|
|
|
// 定义检测器最大检测个数
|
|
|
|
|
|
//#define DT_TARGET_MAX_NUM 100
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
|
{
|
|
|
|
|
|
bool threadFlag;
|
|
|
|
|
|
std::mutex mutex;
|
|
|
|
|
|
bool DetFlag;
|
|
|
|
|
|
GD_VIDEO_FRAME_S img;
|
|
|
|
|
|
SINT32 nWidth;
|
|
|
|
|
|
SINT32 nHeight;
|
|
|
|
|
|
CENTERRECT mmCenterRect;
|
|
|
|
|
|
GLB_STATUS nStatus;
|
|
|
|
|
|
}det_thread_info;
|
|
|
|
|
|
|
|
|
|
|
|
// 检测器
|
|
|
|
|
|
class Detectors
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
Detectors(GLB_INPUT* p_GLB_Input, SINT32 nWidth, SINT32 nHeight, CENTERRECT mmCenterRect);
|
|
|
|
|
|
Detectors(GLB_INPUT* p_GLB_Input, SINT32 nWidth, SINT32 nHeight);
|
|
|
|
|
|
|
|
|
|
|
|
virtual ~Detectors();
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
// 检测器初始化
|
|
|
|
|
|
BBOOL GrayTypeInit(GLB_INPUT* p_GLB_Input);
|
|
|
|
|
|
|
|
|
|
|
|
// 执行目标检测算法
|
|
|
|
|
|
SINT32 Detect(GD_VIDEO_FRAME_S img, CENTERRECT mmCenterRect);
|
|
|
|
|
|
|
|
|
|
|
|
// 执行目标检测算法
|
|
|
|
|
|
SINT32 Detect(GD_VIDEO_FRAME_S img);
|
|
|
|
|
|
|
|
|
|
|
|
// 导入外部目标列表
|
|
|
|
|
|
SINT32 ImportExternTargets(TARGET_OBJECT* pTargetList, SINT32 nNum);
|
|
|
|
|
|
|
|
|
|
|
|
// 清除目标列表
|
|
|
|
|
|
void ClearTargetsArray();
|
|
|
|
|
|
|
|
|
|
|
|
// 检测器参数设置
|
|
|
|
|
|
void SetParam(Param_SkyDetect para);
|
|
|
|
|
|
|
|
|
|
|
|
// 返回参数设置
|
|
|
|
|
|
Param_SkyDetect GetParam();
|
|
|
|
|
|
|
|
|
|
|
|
// 获取目标检测队列
|
|
|
|
|
|
TARGET_OBJECT* GetTargetArray();
|
|
|
|
|
|
|
|
|
|
|
|
// 根据RECT剔除目标,标记false
|
|
|
|
|
|
void RemoveLabelTarget(RECT32S box);
|
|
|
|
|
|
|
|
|
|
|
|
// 输出小目标检测的极值点
|
|
|
|
|
|
POINT16S* GetDST_MaxPoint();
|
|
|
|
|
|
|
|
|
|
|
|
//// 面目标检测线程创建(指定调用者)
|
|
|
|
|
|
//void Arith_AreaDetThreadInit();
|
|
|
|
|
|
|
|
|
|
|
|
//// 小目标检测线程创建(指定调用者)
|
|
|
|
|
|
//void Arith_SmallDetThreadInit();
|
|
|
|
|
|
|
|
|
|
|
|
//// 面目标检测线程调用者
|
|
|
|
|
|
//void AreaDetThread();
|
|
|
|
|
|
|
|
|
|
|
|
//// 小目标检测线程调用者
|
|
|
|
|
|
//void SmallDetThread();
|
|
|
|
|
|
|
|
|
|
|
|
//// 面目标检测线程参数更新,循环调用仅需更新输入参数
|
|
|
|
|
|
//void Arith_SetAreaDetParam(GD_VIDEO_FRAME_S img, SINT32 nWidth, SINT32 nHeight, CENTERRECT mmCenterRect, GLB_STATUS nStatus);
|
|
|
|
|
|
|
|
|
|
|
|
//// 面目标检测线程参数更新,循环调用仅需更新输入参数
|
|
|
|
|
|
//void Arith_SetSmallDetParam(GD_VIDEO_FRAME_S img, SINT32 nWidth, SINT32 nHeight, CENTERRECT mmCenterRect, GLB_STATUS nStatus);
|
|
|
|
|
|
|
|
|
|
|
|
// 当前帧目标检测个数
|
|
|
|
|
|
SINT32 m_FrmObjsCnt;
|
|
|
|
|
|
|
|
|
|
|
|
//参数
|
|
|
|
|
|
public:
|
|
|
|
|
|
Param_SkyDetect mDetPara;
|
|
|
|
|
|
|
|
|
|
|
|
// 小目标检测算法
|
|
|
|
|
|
API_DetectSmallObj* pDST_Module;
|
|
|
|
|
|
|
|
|
|
|
|
// 面目标检测算法
|
|
|
|
|
|
API_DetectAreaObj* pDAT_Module;
|
|
|
|
|
|
//// 面目标检测算法析构标志
|
|
|
|
|
|
//BBOOL pDAT_Module_Free = FALSE;
|
|
|
|
|
|
|
|
|
|
|
|
//// 小目标检测算法析构标志
|
|
|
|
|
|
//BBOOL pDST_Module_Free = FALSE;
|
|
|
|
|
|
|
|
|
|
|
|
std::threadpool m_SA_TPool;
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
|
|
|
|
GLB_STATUS nSysStatus;
|
|
|
|
|
|
|
|
|
|
|
|
// 目标检测队列
|
|
|
|
|
|
TARGET_OBJECT* m_Target_Array;
|
|
|
|
|
|
|
|
|
|
|
|
//// 面目标检测线程信息结构
|
|
|
|
|
|
//det_thread_info* g_pAreaDetHandle;
|
|
|
|
|
|
|
|
|
|
|
|
//// 小目标检测线程信息结构
|
|
|
|
|
|
//det_thread_info* g_pSmallDetHandle;
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SINT16 MergeSmallAndAreaTarget(TARGET_OBJECT* ptTargetArray, SINT32 nSmallObjsCnt, SINT32 nAreaObjsCnt,SINT32 nCombineDist,GLB_STATUS nSysStatus);
|
|
|
|
|
|
|
|
|
|
|
|
void Sort_TargetArray(TARGET_OBJECT* ptTargetArray, SINT32 nObjsNum, FLOAT32 DetectCenterX, FLOAT32 DetectCenterY);
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************
|
|
|
|
|
|
* Method: MergeAIAndSATarget()
|
|
|
|
|
|
* Function Description: 对现有检测数组中的目标进行合并
|
|
|
|
|
|
* CreateData: 2024/10/11
|
|
|
|
|
|
* Input Param: TARGET_OBJECT * ptTargetArray:需要合并的检测数组
|
|
|
|
|
|
* Input Param: SINT32 nObjsCnt:检测数组中的目标个数
|
|
|
|
|
|
* Output Param:
|
|
|
|
|
|
* Return: SINT32:合并后的目标个数
|
|
|
|
|
|
* Call Relation:
|
|
|
|
|
|
* Other Description:
|
|
|
|
|
|
*************************************/
|
|
|
|
|
|
SINT32 MergeAIAndSATarget(TARGET_OBJECT* ptTargetArray,SINT32 nTotalCnt);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************
|
|
|
|
|
|
* Method: DetSkyLineFilter()
|
|
|
|
|
|
* Function Description: 基于天地线标定信息的低空非识别目标过滤
|
|
|
|
|
|
* CreateData: 2025/3/13
|
|
|
|
|
|
* Input Param: TARGET_OBJECT * ptTargetArray:经过小面检测与AI融合的数组
|
|
|
|
|
|
* Input Param: SINT32 nObjsCnt:数组的个数
|
|
|
|
|
|
* Input Param: GLB_PARAMETERS * p_GLB_stPara
|
|
|
|
|
|
* Output Param:
|
|
|
|
|
|
* Return: SINT32:被抑制的小面目标个数
|
|
|
|
|
|
* Call Relation:
|
|
|
|
|
|
* Other Description:
|
|
|
|
|
|
*************************************/
|
|
|
|
|
|
SINT32 DetSkyLineFilter(TARGET_OBJECT* ptTargetArray, SINT32 nObjsCnt, GLB_PARAMETERS* p_GLB_stPara);
|