#include "nodes/base/base.hpp" #include "nodes/stream/streamNode.hpp" #include "nodes/infer/inferNode.hpp" #include "nodes/draw/drawNode.hpp" #include "nodes/httpPush/httpPush.hpp" int main() { // create trt model std::vector names = { "person", "bicycle", "car", "motorbike", "aeroplane", "bus", "train", "truck", "boat", "traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "sofa", "pottedplant", "bed", "diningtable", "toilet", "tvmonitor", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear", "hair drier", "toothbrush" }; std::shared_ptr model = load("model/yolov8.engine", ModelType::YOLO11, names, 0, 0.5, 0.45); std::shared_ptr src_node0 = std::make_shared("src0", "rtsp://admin:lww123456@172.16.22.16:554/Streaming/Channels/101", 0, DecodeType::GPU); src_node0->set_skip_frame(10); std::shared_ptr src_node1 = std::make_shared("src1", "rtsp://admin:lww123456@172.16.22.16:554/Streaming/Channels/201", 0, DecodeType::GPU); src_node1->set_skip_frame(10); std::shared_ptr src_node2 = std::make_shared("src2", "rtsp://admin:lww123456@172.16.22.16:554/Streaming/Channels/301", 0, DecodeType::GPU); src_node2->set_skip_frame(10); std::shared_ptr infer_node = std::make_shared("infer"); infer_node->set_model_instance(model); std::shared_ptr draw_node = std::make_shared("draw"); std::shared_ptr push_node = std::make_shared("push", "172.16.20.168", 8080, "/push"); Node::LinkNode(src_node0, infer_node); Node::LinkNode(src_node1, infer_node); Node::LinkNode(src_node2, infer_node); Node::LinkNode(infer_node, draw_node); Node::LinkNode(draw_node, push_node); push_node->start(); draw_node->start(); infer_node->start(); src_node0->start(); src_node1->start(); src_node2->start(); getchar(); return 0; } // TODO:创建pipeline类,能够打印pipeline的结构、状态、启动、停止、重启、添加节点、删除节点、连接节点、断开节点 // TODO: 硬解码 // TODO: 模型多路复用 // TODO: 通过配置文件创建 pipeline // TODO: 多种推理框架支持 opencv tensorrt onnxruntime ... // TODO:日志系统 // TODO: 结果推送接口 http mqtt ... // TODO: 电子围栏