8805b950
Liu Meng
物品遗留效果优化
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
#pragma once
#include "header.h"
#include "RegionSurveillanceProcess.h"
#include <fstream>
#include "Sort.h"
#include <map>
#define MAX_OBJ_COUNT 100
struct TaskTracker
{
int TaskID;
double ratioWidth;
double ratioHeight;
Sort tracker;
};
typedef struct VPT_Result
{
int objCount;
VPT_ObjInfo obj[MAX_OBJ_COUNT];
}VPT_Result;
class IRegionSurveillanceBase : public RegionSurveillanceProcess {
public:
IRegionSurveillanceBase();
// 模型初始化
virtual int rs_init(const rs_param & param) override;
// ROI区域初始化
virtual int rs_init_region(int numROI, region_info* region_infos, bool iflog) override;
//// 每一帧图像检测
int rs_detect(const sy_img &img_data, region_info* region_infos, int region_count, rs_result *result)override;
////计算方向和箭头绘制的两个端点
virtual int rs_get_arrowdir(const sy_point &p_roi0, const sy_point &p_roi1, const sy_point &dir) override;
protected:
void vibeMask(int num, sy_point *pPointList, bool *pRegion);
void printAlarmType(std::fstream *file, int style_human);
void AddTaskTracker(const int taskID, const double rWidth, const double rHeight);
/***************************************处理函数**********************************************************/
void AccessToRestrictedAreas(const VPT_Result & vptResult, const region_info* region_infos, rs_result *result); //进入禁区
void LeaveTheRestrictedAreas(const VPT_Result & vptResult, const region_info* region_infos, rs_result *result); //离开禁区
void OneWayCrossBorder(const VPT_Result & vptResult, const region_info* region_infos, rs_result *result); //单向越界
void TwoWayCrossBorder(const VPT_Result & vptResult, const region_info* region_infos, rs_result *result); //双向越界
void WanderMonitoring(const VPT_Result & vptResult, const region_info* region_infos, rs_result *result); //徘徊
void StayMonitoring(const VPT_Result & vptResult, const region_info* region_infos, rs_result *result); //丢包
/**********************************************************************************************************/
virtual int init(const rs_param & param) = 0; //回调子类初始化模块
virtual int detect(const sy_img &img_data, VPT_Result & vptResult) = 0; //回调子类获取人车物检测,头肩检测信息 //回调子类人车物检测或头肩检测
virtual void release() = 0; //回调子类用于释放
private:
void RSrelease();
protected:
struct TraceInfo
{
unsigned int id; //目标唯一id
unsigned int num; //目标轨迹长度
std::deque<sy_point> trace_obj; //目标轨迹点集合
};
std::vector<TraceInfo> vec_traceinfo;
struct StayInfo
{
long nFrameCurr; // 记录当前逗留帧数
int lastFrame; // 上次监测到逗留距离当前的帧数
};
std::map<unsigned int, std::map<unsigned int, StayInfo>> mp_stayinfo; //区域索引, 目标唯一id, 目标逗留帧数
int GlobelWidth = 0;
int GlobelHeight = 0;
TaskTracker taskTrackers;
sy_point pStart, pEnd; //by zl 用于存储可通行方向箭头的两个端点
int m_numROI = 0;
bool** pRegion;
int* pAlarmInfo;
private:
};
|