---
name: damage-grounding
description: 汽车旧伤视觉定位标注。用于 damage_grounding 能力：读取 damage-detector 生成的 workspace/damages.json，对每处损伤在时间窗口内调用豆包 grounding 获取 0-1000 bbox，并在图片上绘制红色标注框，输出 workspace/grounding.json 和 marked_frames；前置条件是已有 taskId 和 damages.json。
license: MIT
metadata:
  version: "1.0.0"
  category: vehicle-inspection
  skillType: compute-entry
  aliases: ["damage_grounding"]
  tags: ["vehicle", "grounding", "bbox", "doubao", "旧伤定位", "标注"]
---

# 旧伤视觉定位标注

前置条件：已完成 `video-frame-extractor` 和 `damage-detector`，workspace 中存在 `damages.json`。

```json
{
  "name": "damage-grounding",
  "input": {
    "taskId": "order_10001",
    "groundingWindow": 2
  }
}
```

## 工作流程

1. 读取 `damages.json` 的损伤列表和 `video_info.json` 的帧列表。
2. 对每处损伤选择 `timeSecond ± groundingWindow` 秒内的帧。
3. 固定使用豆包/火山方舟模型进行 grounding，解析 `<bbox>x1 y1 x2 y2</bbox>`。
4. 将 0-1000 归一化 bbox 转成像素坐标，在图片上绘制红色标注框。
5. 写入 `workspace/grounding.json` 和 `marked_frames/`。

## 输入

- `taskId`: 必填。
- `groundingWindow`: 可选，默认 `2` 秒。
- `groundingResults`: 可选，外部豆包 grounding 结果；传入后本技能只解析 bbox 并画框。

## 输出

返回 `totalDamages` 和 `totalMarked`。

## 重要约束

- 需要 Node.js 18+。
- 共享 workspace 根目录优先读取 `VEHICLE_SCRATCH_WORKSPACE_ROOT`，其次兼容 `RZYX_AI_WORKSPACE_ROOT`，否则使用 `RZYX_AI_DATA_DIR/workspace/vehicle-scratch-inspection`。
- 本技能固定用于豆包 grounding；其他模型可用于检测，但 grounding 阶段按豆包输出格式解析。
- bbox 坐标是 0-1000 归一化坐标，最终同时保存 normalized 和 pixel 两种坐标。
- 标注优先使用 `sharp`，未安装时回退 `ffmpeg drawbox`；两者都不可用时生成 SVG 标注占位，保证 `grounding.json` 仍可被后续报告读取。
- 不使用百度 OCR API。
- 用中文回答所有内容。
