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

目录

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

在这里插入图片描述

相关推荐

  1. 目标检测算法:原理、挑战应用

    2024-07-18 19:52:02       26 阅读
  2. 目标检测算法

    2024-07-18 19:52:02       23 阅读
  3. 目标检测算法

    2024-07-18 19:52:02       17 阅读
  4. 目标检测算法

    2024-07-18 19:52:02       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 19:52:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 19:52:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 19:52:02       58 阅读
  4. Python语言-面向对象

    2024-07-18 19:52:02       69 阅读

热门阅读

  1. 正则表达式

    2024-07-18 19:52:02       19 阅读
  2. 框架

    框架

    2024-07-18 19:52:02      19 阅读
  3. opencv—常用函数学习_“干货“_5

    2024-07-18 19:52:02       24 阅读
  4. 光伏储能剑指何方

    2024-07-18 19:52:02       20 阅读