Blame view

src/MSRegionSurveilance/MSRegionSurveilanceBase.h 3.2 KB
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:
  	
  	
  };