目标检测算法与应用算法 DS集成 接口相关_v0.1

发布于:2024-07-19 ⋅ 阅读:(147) ⋅ 点赞:(0)

目录

0. 目标GPS信息、速度、加速度、航向角信息的输出

接口示例:

// 道路信息配置(GPS信息配置)
struct GPSPosition
{
  double longitude; //经度
  double latitude;  //纬度
  float altitude;  //高度
};

struct Point
{
  uint16_t x;  //像素x
  uint16_t y;  //像素y
};

struct Row
{
  std::vector<GPSPosition> gps;	//多个点位经纬度信息
  std::vector<Point> pos;	// 多个点位像素位置
};
std::vector<Row> rows;

为vector rows赋值示例:

// 长度为3认为标定了3行信息
vector<Row> rows(3); 
int len_rows = rows.size();  // 3
// 第一行信息认为三个点赋值 
rows[0].gps[0].longitude = 100.0281330;
rows[0].gps[0].latitude = 100.5329955;
rows[0].gps[0].altitude = 886.4188;
rows[0].pos[0].x = 0;
rows[0].pos[0].y = 0;
rows[0].gps[1].longitude = 150.0281382;
rows[0].gps[1].latitude = 100.5329584;
rows[0].gps[1].altitude = 886.3948;
rows[0].pos[1].x = 50;
rows[0].pos[1].y = 0;
rows[0].gps[2].longitude = 200.0281402;
rows[0].gps[2].latitude = 100.5329200;
rows[0].gps[2].altitude = 886.3948;
rows[0].pos[2].x = 100;
rows[0].pos[2].y = 0;
// 第二行信息认为两个点赋值
rows[1].gps[0].longitude = 100.0281330;
rows[1].gps[0].latitude = 150.5328777;
rows[1].gps[0].altitude = 883.0678;
rows[1].pos[0].x = 0;
rows[1].pos[0].y =45;
rows[1].gps[1].longitude = 100.0276137;
rows[1].gps[1].latitude = 153.5328084;
rows[1].gps[1].altitude = 883.3948;
rows[1].pos[1].x = 100;
rows[1].pos[1].y = 50;
// 第三行信息认为三个点赋值
rows[2].gps[0].longitude = 100.0281330;
rows[2].gps[0].latitude = 203.5327223;
rows[2].gps[0].altitude = 878.6568;
rows[2].pos[0].x = 0;
rows[2].pos[0].y = 100;
rows[2].gps[1].longitude = 150.0281382;
rows[2].gps[1].latitude = 203.5326848;
rows[2].gps[1].altitude = 878.8278;
rows[2].pos[1].x = 50;
rows[2].pos[1].y = 100;
rows[2].gps[2].longitude = 200.0281402;
rows[2].gps[2].latitude = 200.5326465;
rows[2].gps[2].altitude = 878.9038;
rows[2].pos[2].x = 100;
rows[2].pos[2].y = 100;

1. 目标检测算法接口

1.1 模型相关

​ 模型相关文件及其对应的目标类型。

如下文件:

best.wts
best.cfg
best.engine
labels.txt

其中,labels.txt内容对应模型文件的分类类型,示例如下:

car
truck
bus
elec
bike
pedes
tricycle
coni
warm

1.2 检测结果相关

【注】:跟模型文件一起写死在算法内部。

检测结果涉及目标输出信息和目标所属类别置信度信息。

//目标分类数
static constexpr int CLASS_NUM = 9;

//输入图像宽高
static constexpr int INPUT_H = 960;  
static constexpr int INPUT_W = 960;

//目标框
struct Box 
	{
	uint16_t x;
	uint16_t y;
	uint16_t w;
	uint16_t h;
	};
		
//目标置信度
pre-cluster-threshold=0.25

// 
//nms-iou-threshold=0.45

2. 应用算法接口

2.0 每帧图像的目标信息如下:

vector<TargetAttribute>;

2.1 bool cross_line; //跨线(变道压线检测)

输入:每帧的目标信息 和 如下结构体的标定信息

// 跨线检测对应标定线结构体定义,可能需要考虑线段id,涉及多条线段需要跨线检测的时候
struct Point
{
	uint16_t x;  //像素x
	uint16_t y;  //像素y
};
struct Line
{
	uint8_t line_id;			//线段id
	bool is_able;				//使能
	vector<Point> line_info;	//线段信息,长度等于2
};
vector <Line> line; 

输出:当前帧图像的目标信息。增加了对应目标信息的TriggerEvent事件结果。

2.2 bool break_in; //闯入(目标闯入)

输入:每帧的目标信息 和 如下结构体的标定信息

//目标闯入的标定区间struct定义
struct Point
{
	uint16_t x;  //像素x
	uint16_t y;  //像素y
};

struct Region
{
	uint8_t region_id;			//区域id
	bool is_able;				//使能
	vector<Point> region_info;	//区域信息,长度大于等于3
};
vector <Region> region;

输出:当前帧图像的目标信息。增加了对应目标信息的事件结果。

2.3 bool stay; //停留(目标违停)

输入:每帧的目标信息 和 如下结构体的标定信息

//目标闯入的标定区间struct定义
struct Point
{
	uint16_t x;  //像素x
	uint16_t y;  //像素y
};

struct Region
{
	uint8_t region_id;			//区域id
	bool is_able;				//使能
	vector<Point> region_info;	//区域信息,长度大于等于3
};
vector <Region> region;

输出:当前帧图像的目标信息。增加了对应目标信息的事件结果。

2.4 bool left_behind; //遗留物(道路遗留、抛散、异常)

输入:每帧的目标信息 和 如下结构体的标定信息

//目标停留的标定区间struct定义
struct Point
{
	uint16_t x;  //像素x
	uint16_t y;  //像素y
};

struct Region
{
	uint8_t region_id;
	bool is_able;				//使能
	vector<Point> region_info; //长度大于等于3
};
vector <Region> region;

输出:当前帧图像的目标信息。增加了对应目标信息的事件结果。

2.5 bool retrograde; //逆行(目标逆行)

输入:每帧的目标信息 和 如下结构体的标定信息

//目标停留的标定区间struct定义
struct Point
{
	uint16_t x;  //像素x
	uint16_t y;  //像素y
};

struct Region
{
	uint8_t region_id;
	bool is_able;				//使能
	vector<Point> region_info; 	//长度大于等于3
	vector<Point> right_direction;//正确方向,长度等于2,两点确定方向向量,[起点, 终点]
};
vector <Region> region;

输出:当前帧图像的目标信息。增加了对应目标信息的事件结果。

2.6 目标占道(占用公交车道、应急车道… …)

输入:每帧的目标信息 和 如下结构体的标定信息

//目标停留的标定区间struct定义
struct Point
{
	uint16_t x;  //像素x
	uint16_t y;  //像素y
};

struct Region
{
	uint8_t region_id;			//区域id
	bool is_able;				//使能
	vector<Point> region_info; 	//长度大于等于3
};
vector <Region> region;

输出:当前帧图像的目标信息。增加了对应目标信息的事件结果。

2.7 流量统计

参见 2.1 跨线检测 。

2.8 车辆行驶车道

依赖车道识别算法 或 标定车道信息

2.9 车身颜色识别

输入: 一帧图像的Mat信息 和 每帧的目标信息

// 一帧图像的信息,类型为Mat
Mat frames;

// 每帧的目标信息,如下:
vector<TargetAttribute> objs;

输出:当前帧图像的目标信息。增加了对应目标信息的事件结果。

2.10 车牌识别

3 道路信息

3.1 车道占用率

3.2 车道空间占用率

3.3 车道车辆数

3.4 是否拥堵

3.5 车道排队车辆数

3.6 车辆排队长度

3.7 队首队尾车辆位置

3.8 车头间距

3.9 车头时距

3.10 车流平均速度

3.11 车辆缓行

3.12 超高速

3.13 超低速

3.14

在这里插入图片描述