{ "name": "std_workshoe_detection_stream", "description": "1080p 劳保鞋检测流程,包含人员检测、人员跟踪、劳保鞋规则判断、画面叠加与视频发布。", "source": "configs/full_pipeline_1080p_test_alarm.json", "slots": { "inputs": [ {"name": "video_input_main", "type": "video_source", "required": true, "description": "主视频输入"} ], "services": [], "outputs": [ {"name": "stream_output_main", "type": "stream_publish", "required": true, "description": "主视频输出"} ] }, "template": { "executor": { "batch_size": 2, "run_budget": 6 }, "nodes": [ { "id": "input_rtsp_main", "type": "input_rtsp", "role": "source", "enable": true, "url": "${slot:video_input_main.url}", "fps": 30, "width": 1920, "height": 1080, "use_ffmpeg": true, "use_mpp": false, "force_tcp": true, "reconnect_sec": 5, "reconnect_backoff_max_sec": 30 }, { "id": "preprocess_rgb", "type": "preprocess", "role": "filter", "enable": true, "cpu_affinity": [ 2 ], "dst_w": 1920, "dst_h": 1080, "dst_format": "rgb", "dst_packed": true, "resize_mode": "stretch", "keep_ratio": false, "rga_gate": "workshoe_detection_pipeline_rga", "use_rga": true }, { "id": "detect_person", "type": "ai_yolo", "role": "filter", "enable": true, "cpu_affinity": [ 5 ], "use_rga": true, "rga_gate": "workshoe_detection_pipeline_rga", "rga_max_inflight": 4, "dst_packed": true, "use_dma_input": true, "infer_fps": 2, "infer_phase_ms": 0, "model_path": "./models/object_det_yolov8n_coco_640_rk3588.rknn", "model_version": "v8", "model_w": 640, "model_h": 640, "num_classes": 80, "conf": 0.35, "nms": 0.45, "class_filter": [ 0 ], "bbox_expand": { "enable": true, "class_id": 0, "left": 0.06, "right": 0.06, "top": 0.04, "bottom": 0.16 }, "debug": { "stats": false, "stats_interval": 30, "detections": false } }, { "id": "track_person", "type": "tracker", "role": "filter", "enable": true, "cpu_affinity": [ 5 ], "mode": "bytetrack_lite", "per_class": true, "track_classes": [ 0 ], "ignore_classes": [], "high_th": 0.55, "low_th": 0.1, "iou_th": 0.3, "max_age_ms": 900, "min_hits": 1, "max_tracks": 128 }, { "id": "detect_shoe", "type": "ai_shoe_det", "role": "filter", "enable": true, "cpu_affinity": [ 6 ], "use_rga": true, "rga_gate": "workshoe_detection_pipeline_rga", "rga_max_inflight": 4, "dst_packed": true, "use_dma_input": false, "infer_fps": 2, "infer_phase_ms": 150, "model_path": "./models/shoe_det_yolov8s_workshoe_640_rk3588.rknn", "model_w": 640, "model_h": 640, "conf": 0.22, "nms": 0.45, "v8_box_format": "cxcywh", "append_detections": true, "dynamic_roi": { "enable": true, "person_class_id": 0, "shoe_class_id": 1, "debug_roi_class_id": -1, "max_rois": 3, "min_person_height": 60, "max_box_area_ratio": 0.6, "y_offset": 0.7, "width_scale": 1.6, "height_scale": 0.4 } }, { "id": "rule_shoe_association", "type": "logic_gate", "role": "filter", "enable": true, "cpu_affinity": [ 6 ], "mode": "person_shoe_check", "debug": false, "person_shoe_check": { "person_class": 0, "shoe_class": 1, "violation_class": 2, "min_person_score": 0.3, "min_shoe_score": 0.22, "foot_region": { "y_offset": 0.7, "width_scale": 1.6, "height_scale": 0.4 }, "min_shoe_height_ratio": 0.08, "min_shoe_area_ratio": 0.012, "max_shoe_height_ratio": 0.14, "max_shoe_width_ratio": 0.38, "max_shoe_area_ratio": 0.05, "max_shoe_roi_width_ratio": 0.45, "max_shoe_roi_height_ratio": 0.35, "max_shoe_roi_area_ratio": 0.1 } }, { "id": "rule_shoe_color", "type": "logic_gate", "role": "filter", "enable": true, "cpu_affinity": [ 6 ], "mode": "ppe_boots_check", "anchor_class": 0, "boots_class": 1, "violation_class": 2, "debug": false, "color_check": { "enable": true } }, { "id": "render_osd", "type": "osd", "role": "filter", "enable": true, "cpu_affinity": [ 7 ], "draw_bbox": true, "draw_text": true, "line_width": 2.0, "font_scale": 1.0, "use_rga_bbox": false, "labels": [ "person", "shoe", "non_black_shoe" ] }, { "id": "prepare_publish", "type": "preprocess", "role": "filter", "enable": true, "cpu_affinity": [ 7 ], "dst_w": 1920, "dst_h": 1080, "dst_format": "nv12", "resize_mode": "stretch", "rga_gate": "workshoe_detection_pipeline_rga", "use_rga": true }, { "id": "publish_stream", "type": "publish", "role": "sink", "enable": true, "cpu_affinity": [ 3 ], "queue": { "size": 2, "policy": "drop_oldest" }, "codec": "h264", "fps": 30, "gop": 60, "bitrate_kbps": 4000, "mpp_output_timeout_ms": 50, "mpp_packet_wait_ms": 10, "use_mpp": true, "use_ffmpeg_mux": true, "outputs": [ { "proto": "hls", "path": "${slot:stream_output_main.publish_hls_path}", "segment_sec": 2 }, { "proto": "rtsp_server", "port": "${slot:stream_output_main.publish_rtsp_port}", "path": "${slot:stream_output_main.publish_rtsp_path}" } ] } ], "edges": [ [ "input_rtsp_main", "preprocess_rgb" ], [ "preprocess_rgb", "detect_person" ], [ "detect_person", "track_person" ], [ "track_person", "detect_shoe" ], [ "detect_shoe", "rule_shoe_association" ], [ "rule_shoe_association", "rule_shoe_color" ], [ "rule_shoe_color", "render_osd" ], [ "render_osd", "prepare_publish" ], [ "prepare_publish", "publish_stream" ] ] } }