[
    {
        "id": "pose_yolo_fix_tab",
        "type": "tab",
        "label": "YOLO Pose",
        "disabled": false,
        "info": ""
    },
    {
        "id": "tab1",
        "type": "tab",
        "label": "S100 Pose Detection",
        "info": "S100人体检测和跟踪(YOLO Pose) - 一键启动"
    },
    {
        "id": "group_env_fix",
        "type": "group",
        "z": "pose_yolo_fix_tab",
        "name": "环境准备",
        "style": {
            "fill": "#fff9c4",
            "fill-opacity": "0.6",
            "label": true
        },
        "nodes": [
            "inject_update_fix",
            "smart_update_fix",
            "change_notify_fix",
            "audio_notify_fix"
        ],
        "x": 94,
        "y": 99,
        "w": 652,
        "h": 82
    },
    {
        "id": "group_ctrl_fix",
        "type": "group",
        "z": "pose_yolo_fix_tab",
        "name": "核心控制",
        "style": {
            "fill": "#e3f3d3",
            "fill-opacity": "0.6",
            "label": true
        },
        "nodes": [
            "inject_usb_fix",
            "inject_mipi_fix",
            "exec_init_fix",
            "change_config_fix",
            "node_execute_fix",
            "inject_stop_fix",
            "debug_log_fix"
        ],
        "x": 94,
        "y": 219,
        "w": 1012,
        "h": 182
    },
    {
        "id": "group_viz_fix",
        "type": "group",
        "z": "pose_yolo_fix_tab",
        "name": "可视化",
        "style": {
            "fill": "#d1e7f5",
            "fill-opacity": "0.6",
            "label": true
        },
        "nodes": [
            "inject_browser_fix",
            "open_browser_fix",
            "delay_preview_fix",
            "set_ws_fix",
            "video_preview_fix"
        ],
        "x": 94,
        "y": 459,
        "w": 412,
        "h": 169.5
    },
    {
        "id": "inject_update_fix",
        "type": "inject",
        "z": "pose_yolo_fix_tab",
        "g": "group_env_fix",
        "name": "检查更新",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 200,
        "y": 140,
        "wires": [
            [
                "smart_update_fix"
            ]
        ]
    },
    {
        "id": "smart_update_fix",
        "type": "rdk-tools smartupdate",
        "z": "pose_yolo_fix_tab",
        "g": "group_env_fix",
        "name": "",
        "x": 360,
        "y": 140,
        "wires": [
            [
                "change_notify_fix"
            ],
            []
        ]
    },
    {
        "id": "change_notify_fix",
        "type": "change",
        "z": "pose_yolo_fix_tab",
        "g": "group_env_fix",
        "name": "提示内容",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "环境检查完成",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 520,
        "y": 140,
        "wires": [
            [
                "audio_notify_fix"
            ]
        ]
    },
    {
        "id": "audio_notify_fix",
        "type": "rdk-tools texttoaudio",
        "z": "pose_yolo_fix_tab",
        "g": "group_env_fix",
        "name": "",
        "x": 650,
        "y": 140,
        "wires": []
    },
    {
        "id": "inject_usb_fix",
        "type": "inject",
        "z": "pose_yolo_fix_tab",
        "g": "group_ctrl_fix",
        "name": "启动 (USB摄像头)",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "camera",
                "v": "usb",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 230,
        "y": 260,
        "wires": [
            [
                "exec_init_fix"
            ]
        ]
    },
    {
        "id": "inject_mipi_fix",
        "type": "inject",
        "z": "pose_yolo_fix_tab",
        "g": "group_ctrl_fix",
        "name": "启动 (MIPI摄像头)",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "camera",
                "v": "mipi",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 230,
        "y": 300,
        "wires": [
            [
                "exec_init_fix"
            ]
        ]
    },
    {
        "id": "exec_init_fix",
        "type": "exec",
        "z": "pose_yolo_fix_tab",
        "g": "group_ctrl_fix",
        "command": "cp -r /opt/tros/humble/lib/mono2d_body_detection/config/ . || true",
        "addpay": false,
        "append": "",
        "useSpawn": false,
        "timer": "",
        "oldrc": false,
        "name": "初始化配置 (CP)",
        "x": 440,
        "y": 280,
        "wires": [
            [
                "change_config_fix",
                "delay_preview_fix"
            ],
            [],
            []
        ]
    },
    {
        "id": "change_config_fix",
        "type": "change",
        "z": "pose_yolo_fix_tab",
        "g": "group_ctrl_fix",
        "name": "配置流参数",
        "rules": [
            {
                "t": "set",
                "p": "launch",
                "pt": "msg",
                "to": "mono2d_body_detection mono2d_body_detection.launch.py kps_model_type:=1 kps_model_file_name:=config/yolo11x_pose_nashe_640x640_nv12.hbm",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "insert",
                "pt": "msg",
                "to": "$join(['export CAM_TYPE=', msg.camera])",
                "tot": "jsonata"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 650,
        "y": 280,
        "wires": [
            [
                "node_execute_fix"
            ]
        ]
    },
    {
        "id": "node_execute_fix",
        "type": "rdk-tools checkexecute",
        "z": "pose_yolo_fix_tab",
        "g": "group_ctrl_fix",
        "name": "执行检测",
        "x": 840,
        "y": 320,
        "wires": [
            [
                "debug_log_fix"
            ],
            [
                "debug_log_fix"
            ]
        ]
    },
    {
        "id": "inject_stop_fix",
        "type": "inject",
        "z": "pose_yolo_fix_tab",
        "g": "group_ctrl_fix",
        "name": "关闭服务",
        "props": [
            {
                "p": "kill",
                "v": "",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 200,
        "y": 360,
        "wires": [
            [
                "node_execute_fix"
            ]
        ]
    },
    {
        "id": "debug_log_fix",
        "type": "debug",
        "z": "pose_yolo_fix_tab",
        "g": "group_ctrl_fix",
        "name": "系统日志",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1000,
        "y": 320,
        "wires": []
    },
    {
        "id": "inject_browser_fix",
        "type": "inject",
        "z": "pose_yolo_fix_tab",
        "g": "group_viz_fix",
        "name": "打开浏览器",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "http://{host}:8000",
        "payloadType": "str",
        "x": 200,
        "y": 500,
        "wires": [
            [
                "open_browser_fix"
            ]
        ]
    },
    {
        "id": "open_browser_fix",
        "type": "rdk-tools openurl",
        "z": "pose_yolo_fix_tab",
        "g": "group_viz_fix",
        "name": "",
        "x": 380,
        "y": 500,
        "wires": []
    },
    {
        "id": "delay_preview_fix",
        "type": "delay",
        "z": "pose_yolo_fix_tab",
        "g": "group_viz_fix",
        "name": "",
        "pauseType": "delay",
        "timeout": "5",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "allowrate": false,
        "outputs": 1,
        "x": 220,
        "y": 540,
        "wires": [
            [
                "set_ws_fix"
            ]
        ]
    },
    {
        "id": "set_ws_fix",
        "type": "change",
        "z": "pose_yolo_fix_tab",
        "g": "group_viz_fix",
        "name": "设定视频流",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "ws://{host}:8000",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 370,
        "y": 540,
        "wires": [
            [
                "video_preview_fix"
            ]
        ]
    },
    {
        "id": "video_preview_fix",
        "type": "rdk-tools videows",
        "z": "pose_yolo_fix_tab",
        "g": "group_viz_fix",
        "name": "Web预览",
        "fps": "10",
        "width": "480",
        "active": true,
        "x": 400,
        "y": 580,
        "wires": [
            [],
            [],
            []
        ]
    },
    {
        "id": "inject_mipi_start",
        "type": "inject",
        "z": "tab1",
        "name": "MIPI摄像头检测",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "topic": "mipi_detection",
        "payload": "start",
        "payloadType": "str",
        "x": 140,
        "y": 100,
        "wires": [
            [
                "exec_mipi_detection"
            ]
        ]
    },
    {
        "id": "exec_mipi_detection",
        "type": "exec",
        "z": "tab1",
        "command": "cd /tmp && source /opt/tros/humble/setup.bash && cp -r /opt/tros/humble/lib/mono2d_body_detection/config/ . 2>/dev/null || true && export CAM_TYPE=mipi && echo \"启动MIPI摄像头人体检测...\" && ros2 launch mono2d_body_detection mono2d_body_detection.launch.py kps_model_type:=1 kps_image_width:=1920 kps_image_height:=1080 kps_model_file_name:=config/yolo11x_pose_nashe_640x640_nv12.hbm",
        "addpay": false,
        "append": "",
        "useSpawn": false,
        "timer": "120",
        "oldrc": false,
        "name": "MIPI检测启动器",
        "x": 380,
        "y": 100,
        "wires": [
            [
                "debug_mipi_output"
            ],
            [
                "debug_mipi_error"
            ],
            []
        ]
    },
    {
        "id": "inject_usb_start",
        "type": "inject",
        "z": "tab1",
        "name": "USB摄像头检测",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "topic": "usb_detection",
        "payload": "start",
        "payloadType": "str",
        "x": 140,
        "y": 160,
        "wires": [
            [
                "exec_usb_detection"
            ]
        ]
    },
    {
        "id": "exec_usb_detection",
        "type": "exec",
        "z": "tab1",
        "command": "cd /tmp && source /opt/tros/humble/setup.bash && cp -r /opt/tros/humble/lib/mono2d_body_detection/config/ . 2>/dev/null || true && export CAM_TYPE=usb && echo \"启动USB摄像头人体检测...\" && ros2 launch mono2d_body_detection mono2d_body_detection.launch.py kps_model_type:=1 kps_image_width:=1920 kps_image_height:=1080 kps_model_file_name:=config/yolo11x_pose_nashe_640x640_nv12.hbm",
        "addpay": false,
        "append": "",
        "useSpawn": false,
        "timer": "120",
        "oldrc": false,
        "name": "USB检测启动器",
        "x": 380,
        "y": 160,
        "wires": [
            [
                "debug_usb_output"
            ],
            [
                "debug_usb_error"
            ],
            []
        ]
    },
    {
        "id": "inject_fb_start",
        "type": "inject",
        "z": "tab1",
        "name": "本地图片检测",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "topic": "fb_detection",
        "payload": "start",
        "payloadType": "str",
        "x": 140,
        "y": 220,
        "wires": [
            [
                "exec_fb_detection"
            ]
        ]
    },
    {
        "id": "exec_fb_detection",
        "type": "exec",
        "z": "tab1",
        "command": "cd /tmp && source /opt/tros/humble/setup.bash && cp -r /opt/tros/humble/lib/mono2d_body_detection/config/ . 2>/dev/null || true && cp -r /opt/tros/humble/lib/dnn_node_example/config/ . 2>/dev/null || true && export CAM_TYPE=fb && echo \"启动本地图片人体检测...\" && ros2 launch mono2d_body_detection mono2d_body_detection.launch.py publish_image_source:=config/person_body.jpg publish_image_format:=jpg kps_model_type:=1 kps_image_width:=640 kps_image_height:=640 kps_model_file_name:=config/yolo11x_pose_nashe_640x640_nv12.hbm",
        "addpay": false,
        "append": "",
        "useSpawn": false,
        "timer": "60",
        "oldrc": false,
        "name": "本地图片检测器",
        "x": 380,
        "y": 220,
        "wires": [
            [
                "debug_fb_output"
            ],
            [
                "debug_fb_error"
            ],
            []
        ]
    },
    {
        "id": "inject_browser",
        "type": "inject",
        "z": "tab1",
        "name": "打开可视化页面",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "http://{host}:8000",
        "payloadType": "str",
        "x": 140,
        "y": 300,
        "wires": [
            []
        ]
    },
    {
        "id": "inject_stop",
        "type": "inject",
        "z": "tab1",
        "name": "停止所有服务",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "topic": "stop",
        "payload": "stop",
        "payloadType": "str",
        "x": 140,
        "y": 360,
        "wires": [
            [
                "exec_stop_all"
            ]
        ]
    },
    {
        "id": "exec_stop_all",
        "type": "exec",
        "z": "tab1",
        "command": "sudo pkill -9 -f hobot_usb_cam; sudo pkill -9 -f hobot_dosod; sudo pkill -9 -f hobot_codec_republish; sudo pkill -9 -f websocket; sudo pkill -9 -f python3; sudo pkill -9 -f \"ros2 launch\"; sudo pkill -9 -f \"ros2 run\"; sleep 2; sudo rm -rf /dev/shm/*; ros2 daemon stop 2>/dev/null; sleep 1; echo \"✓ 服务已彻底停止，资源已释放\"",
        "addpay": false,
        "append": "",
        "useSpawn": false,
        "timer": "10",
        "oldrc": false,
        "name": "停止所有服务",
        "x": 380,
        "y": 360,
        "wires": [
            [
                "debug_stop_info"
            ],
            [],
            []
        ]
    },
    {
        "id": "debug_mipi_output",
        "type": "debug",
        "z": "tab1",
        "name": "MIPI检测输出",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 650,
        "y": 80,
        "wires": []
    },
    {
        "id": "debug_mipi_error",
        "type": "debug",
        "z": "tab1",
        "name": "MIPI错误信息",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 650,
        "y": 120,
        "wires": []
    },
    {
        "id": "debug_usb_output",
        "type": "debug",
        "z": "tab1",
        "name": "USB检测输出",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 650,
        "y": 140,
        "wires": []
    },
    {
        "id": "debug_usb_error",
        "type": "debug",
        "z": "tab1",
        "name": "USB错误信息",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 650,
        "y": 180,
        "wires": []
    },
    {
        "id": "debug_fb_output",
        "type": "debug",
        "z": "tab1",
        "name": "本地检测输出",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 650,
        "y": 200,
        "wires": []
    },
    {
        "id": "debug_fb_error",
        "type": "debug",
        "z": "tab1",
        "name": "本地检测错误",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 650,
        "y": 240,
        "wires": []
    },
    {
        "id": "debug_stop_info",
        "type": "debug",
        "z": "tab1",
        "name": "停止服务状态",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 640,
        "y": 360,
        "wires": []
    },
    {
        "id": "6b3de4eb567acbd1",
        "type": "global-config",
        "env": [],
        "modules": {
            "node-red-node-rdk-tools": "0.0.27"
        }
    }
]