leon 3 veckor sedan
förälder
incheckning
51b07cf447
3 ändrade filer med 39 tillägg och 85 borttagningar
  1. 29 0
      src/nodes/draw/drawNode.cpp
  2. 5 1
      src/nodes/rtmp/rtmpNode.cpp
  3. 5 84
      workspace/demo.json

+ 29 - 0
src/nodes/draw/drawNode.cpp

@@ -9,6 +9,13 @@
 namespace GNode
 {
 
+const std::vector<std::pair<int, int>> coco_pairs = {
+    {0, 1}, {0, 2}, {0, 11}, {0, 12}, {1, 3}, {2, 4},
+    {5, 6}, {5, 7}, {7, 9}, {6, 8}, {8, 10},
+    {11, 12}, {5, 11}, {6, 12},
+    {11, 13}, {13, 15}, {12, 14}, {14, 16}
+};
+
 static std::tuple<int, int, int> getFontSize(const std::string& text)
 {
     int baseline = 0;
@@ -126,6 +133,28 @@ void DrawNode::handle_data(std::shared_ptr<meta::MetaData>& meta_data)
         {
             overlay_mask(image, box.seg_mask, box.left, box.top, cv::Scalar(b, g, r), 0.6);
         }
+        if (!box.keypoints.empty())
+        {
+            for (const auto& point : box.keypoints)
+            {
+                std::tie(b, g, r) = random_color(box.class_id);
+                cv::circle(image, cv::Point(point.x, point.y), 5, cv::Scalar(b, g, r), -1);
+            }
+            for (const auto& pair : coco_pairs) 
+            {
+                int startIdx = pair.first;
+                int endIdx = pair.second;
+
+                if (startIdx < obj.keypoints.size() && endIdx < obj.keypoints.size()) 
+                {
+                    int x1 = (int)obj.keypoints[startIdx].x;
+                    int y1 = (int)obj.keypoints[startIdx].y;
+                    int x2 = (int)obj.keypoints[endIdx].x;
+                    int y2 = (int)obj.keypoints[endIdx].y;
+                    cv::line(image, cv::Point(x1, y1), cv::Point(x2, y2), cv::Scalar(255, 0, 0), 2);
+                }
+            }
+        }
     }
     meta_data->draw_image = image;
 }

+ 5 - 1
src/nodes/rtmp/rtmpNode.cpp

@@ -19,7 +19,11 @@ void RtmpNode::handle_data(std::shared_ptr<meta::MetaData>& meta_data)
             stop();
         }
     }
+
     writer_ << image;
 }
 
-}   // namespace GNode
+}   // namespace GNode
+
+
+// appsrc ! videoconvert ! x264enc tune=zerolatency bitrate=500 speed-preset=ultrafast ! h264parse ! flvmux streamable=true  ! queue ! rtmpsink location='rtmp://172.16.20.168:1935/live' sync=false async=false

+ 5 - 84
workspace/demo.json

@@ -1,89 +1,10 @@
 {
     "models": {
         "yolo_model_main": {
-            "model_path": "model/model1.engine",
-            "model_type": "YOLO11SEG",
+            "model_path": "model/yolo11lpose.engine",
+            "model_type": "YOLO11POSE",
             "names": [
-                "person",
-                "bicycle",
-                "car",
-                "motorcycle",
-                "airplane",
-                "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",
-                "couch",
-                "potted plant",
-                "bed",
-                "dining table",
-                "toilet",
-                "tv",
-                "laptop",
-                "mouse",
-                "remote",
-                "keyboard",
-                "cell phone",
-                "microwave",
-                "oven",
-                "toaster",
-                "sink",
-                "refrigerator",
-                "book",
-                "clock",
-                "vase",
-                "scissors",
-                "teddy bear",
-                "hair drier",
-                "toothbrush"
+                "person"
             ],
             "gpu_id": 1,
             "confidence_threshold": 0.25,
@@ -99,7 +20,7 @@
                     "node_id": "src_0",
                     "node_type": "Source",
                     "params": {
-                        "stream_url": "rtsp://admin:lww123456@172.16.22.16:554/Streaming/Channels/101",
+                        "stream_url": "rtsp://admin:lww123456@172.16.22.16:554/Streaming/Channels/201",
                         "gpu_id": 1,
                         "decode_type": "GPU",
                         "skip_frame": 1
@@ -135,7 +56,7 @@
                     "node_id": "rtmp_0",
                     "node_type": "Rtmp",
                     "params": {
-                        "gst_pipeline": "appsrc ! videoconvert ! x264enc tune=zerolatency bitrate=500 speed-preset=ultrafast ! video/x-h264, stream-format=byte-stream ! flvmux streamable=true ! rtmpsink location='rtmpUrl sync=false async=false'",
+                        "gst_pipeline": "appsrc ! videoconvert ! x264enc bitrate=6000 speed-preset=superfast key-int-max=30 ! h264parse ! flvmux streamable=true  ! queue ! rtmpsink location=rtmp://172.16.20.168:1935/live/123456 sync=false async=false",
                         "fps": 25
                     }
                 }