VPTProcess.h 2.5 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: 人车物检测跟踪
	*************************************************************************/

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

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

	void AddTaskTracker(const int taskID);
	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;
};