流水线视频识别
支持功能
- opencv 软解码
- nvcuvid 硬解码
- yolo 检测、关键点模型识别
- depth-adnything 深度模型识别
- bytetrack 目标追踪
- 结果绘制
- 识别后的视频保存
- 识别结果http推送
- 逻辑判断节点
使用示例
void test_yolo()
{
OverflowStrategy stage = OverflowStrategy::Block;
int max_size = 100;
// std::vector<std::string> names = { "person", "clothes", "vest" };
std::vector<std::string> names = { "person", "car", "close", "open" };
// std::shared_ptr<GNode::StreamNode> src_node0 = std::make_shared<GNode::StreamNode>("src0", "rtsp://admin:lww123456@172.16.22.16:554/Streaming/Channels/201", 0, GNode::DecodeType::GPU);
std::shared_ptr<GNode::StreamNode> src_node0 = std::make_shared<GNode::StreamNode>("src0", "carperson.mp4", 0, GNode::DecodeType::GPU);
src_node0->set_skip_frame(1);
std::shared_ptr<Infer> yolo_model = load("model/carperson.engine", ModelType::YOLOV5, names, 0, 0.25, 0.45);
std::shared_ptr<GNode::InferNode> infer_node = std::make_shared<GNode::InferNode>("yolov5");
infer_node->set_model_instance(yolo_model, ModelType::YOLO11);
std::shared_ptr<GNode::TrackNode> track_node = std::make_shared<GNode::TrackNode>("tracker", "person", 30, 30);
std::shared_ptr<GNode::DrawNode> draw_node = std::make_shared<GNode::DrawNode>("draw_track");
std::shared_ptr<GNode::RecordNode> record_node = std::make_shared<GNode::RecordNode>("record");
record_node->set_record_path("result/result.mp4");
record_node->set_fps(25);
record_node->set_fourcc(cv::VideoWriter::fourcc('X', '2', '6', '4'));
GNode::LinkNode(src_node0, infer_node, max_size, stage);
GNode::LinkNode(infer_node, track_node, max_size, stage);
GNode::LinkNode(track_node, draw_node, max_size, stage);
GNode::LinkNode(draw_node, record_node, max_size, stage);
record_node->start();
draw_node->start();
track_node->start();
infer_node->start();
src_node0->start();
getchar();
}