快速入门
5 分钟内快速上手 Mini-ImagePipe。
最简示例
cpp
#include "pipeline.h"
#include "operators/gaussian_blur.h"
int main() {
using namespace mini_image_pipe;
// 创建流水线
Pipeline pipeline;
// 添加算子
auto blur = std::make_shared<GaussianBlurOperator>(GaussianKernelSize::KERNEL_5x5);
int node = pipeline.addOperator("Blur", blur);
// 执行 (假设已有输入数据)
// pipeline.setInput(node, d_input, width, height, channels);
// pipeline.execute();
// void* output = pipeline.getOutput(node);
return 0;
}完整流水线示例
cpp
#include "pipeline.h"
#include "operators/resize.h"
#include "operators/color_convert.h"
#include "operators/gaussian_blur.h"
#include "operators/sobel.h"
#include <iostream>
using namespace mini_image_pipe;
int main() {
// 1. 配置流水线
PipelineConfig config;
config.numStreams = 4;
Pipeline pipeline(config);
// 2. 创建算子
auto resize = std::make_shared<ResizeOperator>(320, 240);
auto gray = std::make_shared<ColorConvertOperator>(ColorConversionType::RGB_TO_GRAY);
auto blur = std::make_shared<GaussianBlurOperator>(GaussianKernelSize::KERNEL_5x5);
auto sobel = std::make_shared<SobelOperator>();
// 3. 构建 DAG
int n1 = pipeline.addOperator("Resize", resize);
int n2 = pipeline.addOperator("Gray", gray);
int n3 = pipeline.addOperator("Blur", blur);
int n4 = pipeline.addOperator("Sobel", sobel);
pipeline.connect(n1, n2); // Resize → Gray
pipeline.connect(n2, n3); // Gray → Blur
pipeline.connect(n3, n4); // Blur → Sobel
// 4. 准备输入 (示例: 分配设备内存)
int width = 1920, height = 1080, channels = 3;
size_t inputSize = width * height * channels * sizeof(uint8_t);
void* d_input;
cudaMalloc(&d_input, inputSize);
// 5. 执行
pipeline.setInput(n1, d_input, width, height, channels);
cudaError_t err = pipeline.execute();
if (err != cudaSuccess) {
std::cerr << "流水线执行失败: " << cudaGetErrorString(err) << std::endl;
return 1;
}
// 6. 获取输出
void* output = pipeline.getOutput(n4);
std::cout << "流水线执行成功!" << std::endl;
// 清理
cudaFree(d_input);
return 0;
}构建和运行
bash
# 构建
cmake --preset release
cmake --build --preset release
# 运行程序
./build/your_program