main.cpp 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #include "nodes/base/base.hpp"
  2. #include "nodes/stream/streamNode.hpp"
  3. #include "nodes/infer/inferNode.hpp"
  4. #include "nodes/draw/drawNode.hpp"
  5. #include "nodes/track/trackNode.hpp"
  6. #include "nodes/analyze/analyzeNode.hpp"
  7. #include "nodes/httpPush/httpPush.hpp"
  8. #include "nodes/record/recordNode.hpp"
  9. #include "plog/Log.h"
  10. #include "plog/Initializers/RollingFileInitializer.h"
  11. void run_from_json()
  12. {
  13. }
  14. void test_depth()
  15. {
  16. 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);
  17. src_node0->set_skip_frame(1);
  18. std::shared_ptr<Infer> depth_model = load("model/depth.engine", ModelType::DEPTH_ANYTHING, {}, 0, 0.25, 0.45);
  19. std::shared_ptr<GNode::InferNode> infer_node = std::make_shared<GNode::InferNode>("depth");
  20. infer_node->set_model_instance(depth_model, ModelType::DEPTH_ANYTHING);
  21. std::shared_ptr<GNode::DrawNode> draw_node = std::make_shared<GNode::DrawNode>("draw");
  22. std::shared_ptr<GNode::HttpPushNode> push_node = std::make_shared<GNode::HttpPushNode>("push", "172.16.20.168", 8080, "/push");
  23. GNode::LinkNode(src_node0, infer_node);
  24. GNode::LinkNode(infer_node, draw_node);
  25. GNode::LinkNode(draw_node, push_node);
  26. push_node->start();
  27. draw_node->start();
  28. infer_node->start();
  29. src_node0->start();
  30. std::this_thread::sleep_for(std::chrono::seconds(10));
  31. }
  32. void test_yolo()
  33. {
  34. OverflowStrategy stage = OverflowStrategy::BlockTimeout;
  35. int max_size = 100;
  36. // std::vector<std::string> names = { "person", "clothes", "vest" };
  37. std::vector<std::string> names = { "person", "car", "close", "open" };
  38. // 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);
  39. std::shared_ptr<GNode::StreamNode> src_node0 = std::make_shared<GNode::StreamNode>("src0", "carperson.mp4", 1, GNode::DecodeType::GPU);
  40. src_node0->set_skip_frame(1);
  41. std::shared_ptr<Infer> yolo_model = load("model/carperson.engine", ModelType::YOLO11, names, 1, 0.25, 0.45);
  42. std::shared_ptr<GNode::InferNode> infer_node = std::make_shared<GNode::InferNode>("carperson_model");
  43. infer_node->set_model_instance(yolo_model, ModelType::YOLO11, 1);
  44. std::shared_ptr<GNode::TrackNode> track_node = std::make_shared<GNode::TrackNode>("tracker", "person", 30, 30);
  45. std::shared_ptr<GNode::AnalyzeNode> analyze_node = std::make_shared<GNode::AnalyzeNode>("analyze");
  46. std::shared_ptr<GNode::DrawNode> draw_node = std::make_shared<GNode::DrawNode>("draw");
  47. std::shared_ptr<GNode::RecordNode> record_node = std::make_shared<GNode::RecordNode>("record");
  48. record_node->set_record_path("result/result.mp4");
  49. record_node->set_fps(25);
  50. record_node->set_fourcc(cv::VideoWriter::fourcc('m', 'p', '4', 'v'));
  51. GNode::LinkNode(src_node0, infer_node, max_size, stage);
  52. GNode::LinkNode(infer_node, track_node, max_size, stage);
  53. GNode::LinkNode(track_node, analyze_node, max_size, stage);
  54. GNode::LinkNode(analyze_node, draw_node, max_size, stage);
  55. GNode::LinkNode(draw_node, record_node, max_size, stage);
  56. record_node->start();
  57. draw_node->start();
  58. analyze_node->start();
  59. track_node->start();
  60. infer_node->start();
  61. src_node0->start();
  62. getchar();
  63. }
  64. void test_multi()
  65. {
  66. std::vector<std::string> names = { "person", "clothes", "vest" };
  67. std::shared_ptr<GNode::StreamNode> src_node0 = std::make_shared<GNode::StreamNode>("src0", "rtsp://admin:lww123456@172.16.22.16:554/Streaming/Channels/101", 0, GNode::DecodeType::GPU);
  68. src_node0->set_skip_frame(10);
  69. std::shared_ptr<GNode::StreamNode> src_node1 = std::make_shared<GNode::StreamNode>("src1", "rtsp://admin:lww123456@172.16.22.16:554/Streaming/Channels/201", 0, GNode::DecodeType::GPU);
  70. src_node1->set_skip_frame(10);
  71. std::shared_ptr<GNode::StreamNode> src_node2 = std::make_shared<GNode::StreamNode>("src2", "rtsp://admin:lww123456@172.16.22.16:554/Streaming/Channels/301", 0, GNode::DecodeType::GPU);
  72. src_node2->set_skip_frame(10);
  73. std::shared_ptr<Infer> yolo_model = load("model/yolo11s.engine", ModelType::YOLO11, names, 1, 0.25, 0.45);
  74. std::shared_ptr<GNode::InferNode> infer_node1 = std::make_shared<GNode::InferNode>("yolo11");
  75. infer_node1->set_model_instance(yolo_model, ModelType::YOLO11, 1);
  76. std::shared_ptr<Infer> depth_model = load("model/depth.engine", ModelType::DEPTH_ANYTHING, {}, 1, 0.25, 0.45);
  77. std::shared_ptr<GNode::InferNode> infer_node2 = std::make_shared<GNode::InferNode>("depth");
  78. infer_node2->set_model_instance(depth_model, ModelType::DEPTH_ANYTHING, 1);
  79. std::shared_ptr<GNode::DrawNode> draw_node = std::make_shared<GNode::DrawNode>("draw");
  80. std::shared_ptr<GNode::HttpPushNode> push_node = std::make_shared<GNode::HttpPushNode>("push", "172.16.20.168", 8080, "/push");
  81. GNode::LinkNode(src_node0, infer_node1);
  82. GNode::LinkNode(src_node1, infer_node1);
  83. GNode::LinkNode(src_node2, infer_node1);
  84. GNode::LinkNode(infer_node1, infer_node2);
  85. GNode::LinkNode(infer_node2, draw_node);
  86. GNode::LinkNode(draw_node, push_node);
  87. push_node->start();
  88. draw_node->start();
  89. infer_node1->start();
  90. infer_node2->start();
  91. src_node0->start();
  92. src_node1->start();
  93. src_node2->start();
  94. getchar();
  95. }
  96. int main()
  97. {
  98. plog::init(plog::info, "log/vsp.log", 1000000, 5);
  99. PLOGI.printf("Start pipepline test_yolo");
  100. test_yolo();
  101. return 0;
  102. }
  103. // TODO
  104. // 硬解码、软解码 完成 软解使用opencv + ffmpeg,硬解使用nvcodec + ffmpeg
  105. // 模型复用 完成,基类加锁保证一致性
  106. // 画图节点 完成
  107. // 推送节点 基本完成
  108. // 日志 完成
  109. // 分析节点
  110. // YOLO11 seg
  111. // 通过配置文件创建 pipeline
  112. // 置信度阈值修改
  113. // 设置电子围栏