Browse Source

update analyze

leon 2 weeks ago
parent
commit
41c92d1c2c
3 changed files with 49 additions and 4 deletions
  1. 1 2
      src/main.cpp
  2. 37 2
      src/nodes/analyze/analyzeNode.cpp
  3. 11 0
      src/nodes/base/base.hpp

+ 1 - 2
src/main.cpp

@@ -43,11 +43,10 @@ int main(int argc , char* argv[])
 // 推送节点         基本完成
 // 日志             完成
 // YOLO11 seg       完成
+// 通过配置文件创建 pipeline 完成
 
 
 // 分析节点         
-
-// 通过配置文件创建 pipeline
 // 置信度阈值修改
 // 设置电子围栏
 // 数据传输过程中使用显存指针

+ 37 - 2
src/nodes/analyze/analyzeNode.cpp

@@ -9,11 +9,46 @@ namespace GNode
 
 void AnalyzeNode::handle_data(std::shared_ptr<meta::BaseData>& meta_data)
 {
+    if (config_data_ == nullptr) 
+    {
+        PLOGE.printf("AnalyzeNode : [%s] config data is null", name_.c_str());
+        return;
+    }
+    if (config_data_->data_name != "AnalyzeConfigData") 
+    {
+        PLOGE.printf("AnalyzeNode : [%s] Invalid config data %s", name_.c_str(), config_data_->data_name.c_str());
+        return;
+    }
+
+    auto config_data = std::dynamic_pointer_cast<meta::AnalyzeConfigData>(config_data_);
+    std::vector<std::string> task_names = config_data->task_names;
+    if (task_names.empty()) 
+    {
+        PLOGE.printf("AnalyzeNode : [%s] No task names provided", name_.c_str());
+        return;
+    }
+
     auto frame_data = std::dynamic_pointer_cast<meta::FrameData>(meta_data);
     int width = frame_data->image.cols;
     int height = frame_data->image.rows;
-    auto res = person_cross_line(frame_data->track_boxes, cv::Point(0, 0), cv::Point(width, height));
-    frame_data->result = res;
+
+    for (const auto& task_name : task_names) 
+    {
+        if (task_name == "cross_line") 
+        {
+            if (frame_data->track_boxes.empty()) 
+            {
+                PLOGE.printf("AnalyzeNode : [%s] No track boxes available for cross_line task", name_.c_str());
+                continue;
+            }
+            auto res = person_cross_line(frame_data->track_boxes, cv::Point(0, 0), cv::Point(width, height));
+            frame_data->result.insert(frame_data->result.end(), res.begin(), res.end());
+        } 
+        else 
+        {
+            PLOGE.printf("AnalyzeNode : [%s] Unknown task name %s", name_.c_str(), task_name.c_str());
+        }
+    }
 }
 
 

+ 11 - 0
src/nodes/base/base.hpp

@@ -101,6 +101,17 @@ public:
         return name_;
     }
 
+    inline bool set_config_data(std::shared_ptr<meta::BaseData> config_data)
+    {
+        if (config_data == nullptr || config_data->get_type() != meta::DataType::CONFIG) 
+        {
+            PLOGE.printf("Node : [%s] set_config_data failed, invalid config data", name_.c_str());
+            return false;
+        }
+        config_data_ = config_data;
+        return true;
+    }
+
 protected:
     std::string name_;
     NODE_TYPE type_;