- 创建基本项目结构和目录 - 添加CMake构建系统 - 实现基础的配置解析功能 - 添加YOLO推理框架支持 - 集成RTSP和视频流处理功能 - 添加性能监控和日志系统
101 lines
3.4 KiB
C++
101 lines
3.4 KiB
C++
#include <gtest/gtest.h>
|
|
#include "pipeline/common/config_parser.hpp"
|
|
|
|
using namespace pipeline;
|
|
|
|
// 测试配置数据结构的默认值
|
|
TEST(ConfigParserTest, DefaultValues) {
|
|
// 测试InputSourceConfig默认值
|
|
InputSourceConfig input_source;
|
|
EXPECT_EQ(input_source.buffer_size, 30);
|
|
EXPECT_TRUE(input_source.type.empty());
|
|
EXPECT_TRUE(input_source.name.empty());
|
|
EXPECT_TRUE(input_source.url.empty());
|
|
|
|
// 测试InputConfig默认值
|
|
InputConfig input;
|
|
EXPECT_EQ(input.max_batch_size, 4);
|
|
EXPECT_TRUE(input.sources.empty());
|
|
|
|
// 测试ModelConfig默认值
|
|
ModelConfig model;
|
|
EXPECT_TRUE(model.engine_path.empty());
|
|
EXPECT_EQ(model.input_shape, std::vector<int>({3, 640, 640}));
|
|
EXPECT_EQ(model.precision, "FP16");
|
|
EXPECT_FLOAT_EQ(model.threshold.conf, 0.5f);
|
|
EXPECT_FLOAT_EQ(model.threshold.nms, 0.45f);
|
|
EXPECT_EQ(model.gpu_id, 0);
|
|
|
|
// 测试RenderConfig默认值
|
|
RenderConfig render;
|
|
EXPECT_TRUE(render.draw_fps);
|
|
EXPECT_TRUE(render.class_colors.empty());
|
|
EXPECT_EQ(render.line_thickness, 2);
|
|
EXPECT_FLOAT_EQ(render.font_scale, 0.5f);
|
|
|
|
// 测试OutputTargetConfig默认值
|
|
OutputTargetConfig output_target;
|
|
EXPECT_TRUE(output_target.type.empty());
|
|
EXPECT_TRUE(output_target.name.empty());
|
|
EXPECT_TRUE(output_target.path.empty());
|
|
EXPECT_EQ(output_target.fps, 30);
|
|
EXPECT_EQ(output_target.codec, "h264");
|
|
EXPECT_EQ(output_target.bitrate, 4000000);
|
|
|
|
// 测试LogConfig默认值
|
|
LogConfig log;
|
|
EXPECT_EQ(log.level, "info");
|
|
EXPECT_EQ(log.save_path, "logs/");
|
|
}
|
|
|
|
// 测试配置数据结构的赋值
|
|
TEST(ConfigParserTest, Assignment) {
|
|
// 测试InputSourceConfig赋值
|
|
InputSourceConfig input_source;
|
|
input_source.type = "rtsp";
|
|
input_source.name = "camera1";
|
|
input_source.url = "rtsp://example.com";
|
|
input_source.buffer_size = 50;
|
|
|
|
EXPECT_EQ(input_source.type, "rtsp");
|
|
EXPECT_EQ(input_source.name, "camera1");
|
|
EXPECT_EQ(input_source.url, "rtsp://example.com");
|
|
EXPECT_EQ(input_source.buffer_size, 50);
|
|
|
|
// 测试完整Pipeline配置
|
|
PipelineConfig config;
|
|
|
|
// 设置输入配置
|
|
config.input.max_batch_size = 8;
|
|
config.input.sources.push_back(input_source);
|
|
|
|
// 设置推理配置
|
|
config.inference.engine_path = "/path/to/model.engine";
|
|
config.inference.precision = "FP32";
|
|
config.inference.threshold.conf = 0.6f;
|
|
|
|
// 设置渲染配置
|
|
config.render.draw_fps = false;
|
|
config.render.line_thickness = 3;
|
|
|
|
// 验证设置的值
|
|
EXPECT_EQ(config.input.max_batch_size, 8);
|
|
EXPECT_EQ(config.input.sources.size(), 1);
|
|
EXPECT_EQ(config.inference.engine_path, "/path/to/model.engine");
|
|
EXPECT_EQ(config.inference.precision, "FP32");
|
|
EXPECT_FLOAT_EQ(config.inference.threshold.conf, 0.6f);
|
|
EXPECT_FALSE(config.render.draw_fps);
|
|
EXPECT_EQ(config.render.line_thickness, 3);
|
|
}
|
|
|
|
// 测试颜色配置
|
|
TEST(ConfigParserTest, ColorConfig) {
|
|
RenderConfig render;
|
|
render.class_colors["person"] = cv::Scalar(255, 0, 0); // BGR
|
|
render.class_colors["car"] = cv::Scalar(0, 255, 0);
|
|
|
|
EXPECT_EQ(render.class_colors.size(), 2);
|
|
EXPECT_EQ(render.class_colors["person"], cv::Scalar(255, 0, 0));
|
|
EXPECT_EQ(render.class_colors["car"], cv::Scalar(0, 255, 0));
|
|
}
|