main.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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/httpPush/httpPush.hpp"
  6. void test_depth()
  7. {
  8. std::shared_ptr<Node::StreamNode> src_node0 = std::make_shared<Node::StreamNode>("src0", "rtsp://admin:lww123456@172.16.22.16:554/Streaming/Channels/201", 0, Node::DecodeType::GPU);
  9. src_node0->set_skip_frame(10);
  10. std::shared_ptr<Infer> depth_model = load("model/depth.engine", ModelType::DEPTH_ANYTHING, {}, 0, 0.25, 0.45);
  11. std::shared_ptr<Node::InferNode> infer_node = std::make_shared<Node::InferNode>("depth");
  12. infer_node->set_model_instance(depth_model, ModelType::DEPTH_ANYTHING);
  13. std::shared_ptr<Node::DrawNode> draw_node = std::make_shared<Node::DrawNode>("draw");
  14. std::shared_ptr<Node::HttpPushNode> push_node = std::make_shared<Node::HttpPushNode>("push", "172.16.20.168", 8080, "/push");
  15. Node::LinkNode(src_node0, infer_node);
  16. Node::LinkNode(infer_node, draw_node);
  17. Node::LinkNode(draw_node, push_node);
  18. push_node->start();
  19. draw_node->start();
  20. infer_node->start();
  21. src_node0->start();
  22. getchar();
  23. }
  24. void test_yolo()
  25. {
  26. std::vector<std::string> names = { "person", "clothes", "vest" };
  27. std::shared_ptr<Node::StreamNode> src_node0 = std::make_shared<Node::StreamNode>("src0", "rtsp://admin:lww123456@172.16.22.16:554/Streaming/Channels/201", 0, Node::DecodeType::GPU);
  28. src_node0->set_skip_frame(10);
  29. std::shared_ptr<Infer> yolo_model = load("model/yolo11s.engine", ModelType::YOLO11, names, 0, 0.25, 0.45);
  30. std::shared_ptr<Node::InferNode> infer_node = std::make_shared<Node::InferNode>("yolo11");
  31. infer_node->set_model_instance(yolo_model, ModelType::YOLO11);
  32. std::shared_ptr<Node::DrawNode> draw_node = std::make_shared<Node::DrawNode>("draw");
  33. std::shared_ptr<Node::HttpPushNode> push_node = std::make_shared<Node::HttpPushNode>("push", "172.16.20.168", 8080, "/push");
  34. Node::LinkNode(src_node0, infer_node);
  35. Node::LinkNode(infer_node, draw_node);
  36. Node::LinkNode(draw_node, push_node);
  37. push_node->start();
  38. draw_node->start();
  39. infer_node->start();
  40. src_node0->start();
  41. getchar();
  42. }
  43. void test_multi()
  44. {
  45. std::vector<std::string> names = { "person", "clothes", "vest" };
  46. std::shared_ptr<Node::StreamNode> src_node0 = std::make_shared<Node::StreamNode>("src0", "rtsp://admin:lww123456@172.16.22.16:554/Streaming/Channels/101", 0, Node::DecodeType::GPU);
  47. src_node0->set_skip_frame(10);
  48. std::shared_ptr<Node::StreamNode> src_node1 = std::make_shared<Node::StreamNode>("src1", "rtsp://admin:lww123456@172.16.22.16:554/Streaming/Channels/201", 0, Node::DecodeType::GPU);
  49. src_node1->set_skip_frame(10);
  50. std::shared_ptr<Node::StreamNode> src_node2 = std::make_shared<Node::StreamNode>("src2", "rtsp://admin:lww123456@172.16.22.16:554/Streaming/Channels/301", 0, Node::DecodeType::GPU);
  51. src_node2->set_skip_frame(10);
  52. std::shared_ptr<Infer> yolo_model = load("model/yolo11s.engine", ModelType::YOLO11, names, 0, 0.25, 0.45);
  53. std::shared_ptr<Node::InferNode> infer_node1 = std::make_shared<Node::InferNode>("yolo11");
  54. infer_node1->set_model_instance(yolo_model, ModelType::YOLO11);
  55. std::shared_ptr<Infer> depth_model = load("model/depth.engine", ModelType::DEPTH_ANYTHING, {}, 0, 0.25, 0.45);
  56. std::shared_ptr<Node::InferNode> infer_node2 = std::make_shared<Node::InferNode>("depth");
  57. infer_node2->set_model_instance(depth_model, ModelType::DEPTH_ANYTHING);
  58. std::shared_ptr<Node::DrawNode> draw_node = std::make_shared<Node::DrawNode>("draw");
  59. std::shared_ptr<Node::HttpPushNode> push_node = std::make_shared<Node::HttpPushNode>("push", "172.16.20.168", 8080, "/push");
  60. Node::LinkNode(src_node0, infer_node1);
  61. Node::LinkNode(src_node1, infer_node1);
  62. Node::LinkNode(src_node2, infer_node1);
  63. Node::LinkNode(infer_node1, infer_node2);
  64. Node::LinkNode(infer_node2, draw_node);
  65. Node::LinkNode(draw_node, push_node);
  66. push_node->start();
  67. draw_node->start();
  68. infer_node1->start();
  69. infer_node2->start();
  70. src_node0->start();
  71. src_node1->start();
  72. src_node2->start();
  73. getchar();
  74. }
  75. int main()
  76. {
  77. test_multi();
  78. return 0;
  79. }
  80. // TODO
  81. // 硬解码、软解码 完成 软解使用opencv + ffmpeg,硬解使用nvcodec + ffmpeg
  82. // 模型复用 完成,基类加锁保证一致性
  83. // 画图节点 完成
  84. // 推送节点 基本完成
  85. // 分析节点
  86. // depth-anything 进行中
  87. // YOLO11 seg
  88. // 通过配置文件创建 pipeline
  89. // 日志
  90. // 设置电子围栏
  91. python3 detect.py --weights carperson/carperson.pt --source carperson/carperson.mp4