VPTProcess.h 3.24 KB
/*******************************************************************************************
* Version: VPT_x64_V2.0.0_20170705
* CopyRight: �п�Ժ�Զ����о���ģʽʶ��ʵ����ͼ����Ƶ��
* UpdateDate: 20170705
* Content: �˳��������
********************************************************************************************/
#pragma once
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include "utools.h"
#include <vector>
#include <map>
#include "common.h"

#include "./sort/Sort.h" //tracker

using namespace std;


struct TaskTracker
{
    int TaskID;
    double ratioWidth;
    double ratioHeight;
    Sort tracker;
    unsigned int lastFrameIndex;

	vector< vector <float>> lastDetectResult;
	vector<int> lastDeleteObjectID;
};

struct DataInfo {
	int task_id {-1};
	sy_img img;
	unsigned long long frameIndex;
};

struct VPTProcessResult {
	int task_id {-1};
	VPT_Result vptResult;
	vector<int> vecDeleteObj;
	vector<VPT_Result> vecUnUsedResult;
	unsigned long long ts;
};


class VPTProcess
{
public:
	VPTProcess(/* args */);
	~VPTProcess();

	/*************************************************************************
	* PURPOSE: 初始化
	* PARAM:
	[in] vparam		参数
	* RETURN:	handle
	* NOTES:
	*************************************************************************/
	int init(int gpuid, int max_batch_size);

	/*************************************************************************
	* PURPOSE: 人车物检测跟踪
	* PARAM:
	[in] handle		    - 处理句柄
	[in] rgb		    - 图片数据(3通道BGR数据 cv::Mat格式)
	[in] width		    - 图片宽度
	[in] height		    - 图片高度
	[in] result		    - 搜索结果,在外部申请足够内存
	[in] deleteObjectID - 删除的轨迹ID号
	[out] traffic	- 交通流量结果结构体 内存在外部申请,大小与初始化时流量监测线个数相同,设置为NULL时不返回
	* RETURN:	-1:图像错误; 其他:检测到的个数
	* NOTES:
	*************************************************************************/
	int process(sy_img * batch_img, int batchsize, vector<unsigned long long> vec_frameIndex, vector<VPT_Result>& result, vector<vector<int>>& deleteObjectID, vector<vector<VPT_Result>>& unUsedResult);

	vector<VPTProcessResult> process(vector<DataInfo> vec_data);

	/*************************************************************************
	* PURPOSE: 资源释放
	* PARAM:
	[in] handle		- 处理句柄
	* RETURN:	NULL
	* NOTES:
	*************************************************************************/
	void release();



	void AddTaskTracker(const int taskID, const double rWidth, const double rHeight);
	void FinishTaskTracker(const int taskID);
	void PauseTaskTracker(const int taskID);
	void RestartTaskTraker(const int taskID);
	void DrawTracker(const int taskID, cv::Mat *img);

private:
	void config_fpn_param(ctools_init_params& param, int batch_size);
	void config_yolo_param(ctools_init_params& param, int batch_size);
	void check_VPT_Result(VPT_Result & vResult);

private:
	int m_max_batch_size {20};

	void* det_handle {nullptr};
	vector<TaskTracker> taskTrackers;
	map<int, TaskTracker> m_taskTrackerMap;
};