一项利用 GLM-V 原生 grounding 能力实现坐标转换、边界框可视化等功能的技能。GLM-V 原生 grounding 可定位任意……
GLMV- Grounding Skill. 提取和可视化GLM-V生成的地面定位结果. 取决于用户的提示,模型输出中的地面坐标可能以不同的形式出现,包括2D是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
提取并可视化 GLM-V 生成的 grounding 结果。根据用户提示的不同,模型输出中的 grounding 坐标可能以多种形式呈现,包括:2D 边界框(bounding box)、目标检测 JSON(Objects Detection JSON)、2D 关键点(points)、3D 边界框(3D bounding box)以及目标跟踪 JSON(target-tracking JSON)。
注意:GLM-V 输出的坐标为归一化相对坐标,其计算方式为:使用图像宽度 W 和高度 H 将像素坐标 x_pixel 和 y_pixel 归一化至范围 [0, 1000],即:
x = round(x_pixel / W * 1000),y = round(y_pixel / H * 1000)。
像素坐标系原点位于图像左上角。
注意:若用户提示未明确指定 grounding 格式(例如仅表述为“找到 xxx 的位置”或“在 xxx 周围画一个框”),则默认按2D 边界框处理。
{"0": [{"label": ..., "bbox_2d": ...}, ...], ...}。需配置环境变量 ZHIPU_API_KEY 才可调用 GLM-V API。
python scripts/config_setup.py setup --api-key YOUR_KEY
ZHIPU_API_KEY(必需)。GLM_GROUNDING_TIMEOUT(可选,默认值为 60 秒)。ZHIPU_API_KEY 环境变量。使用前请先安装依赖:
pip install -r scripts/requirements.txt
本技能主要使用的 Python 包:
requestsPillowopencv-pythonnumpymatplotlibdecord视频可视化所需的系统级依赖:
ffmpeg输入(图像或视频 + 提示语) | ▼ 运行 glm_grounding_cli.py 获取 grounding 结果(自然语言形式) | ▼ 返回结果(grounding 结果、带标注的图像或视频)
python scripts/glm_grounding_cli.py --image-url "URL provided by user" --prompt "description of target for grounding"
python scripts/glm_grounding_cli.py --video-url /path/to/image.jpg --prompt "description of target for tracking" --visualize --visualization-dir "./vis"
收到用户的 grounding 请求后,您的直接回复应为包含 grounding 坐标的自然语言。其中坐标 $x$ 和 $y$ 是范围在 [0, 1000] 内的相对值,计算公式如下:
$$ x = \text{round}(x_{\text{pixel}} / W \times 1000) \\ y = \text{round}(y_{\text{pixel}} / H \times 1000) $$
其中 $x_{\text{pixel}}, y_{\text{pixel}}$ 表示以图像左上角为原点 (0, 0) 的像素坐标,$W$ 和 $H$ 分别为图像宽和高。
除非另有说明,grounding 结果应采用以下 Python 数据格式:
[[x1, y1, x2, y2], ...],提取结果为边界框列表,每个框含 4 个坐标值[[x, y], ...],提取结果为关键点列表,每个点含 2 个坐标值[[x1, y1], [x2, y2], ...],提取结果为多边形顶点坐标列表,每个顶点含 2 个坐标值[{"bbox_3d": [x_center, y_center, z_center, x_size, y_size, z_size, roll, pitch, yaw], "label": "category"}, ...],提取结果为 JSON 列表,每个对象包含类别标签及一个含 9 个参数的 3D 边界框(注:实际为 9 个字段,含中心坐标、尺寸、欧拉角共 9 维)[{'label': 'category', 'bbox_2d': [x1, y1, x2, y2]}, ...],提取结果为 JSON 列表,每个对象包含类别标签及一个 2D 边界框{0: [{'label': 'car-1', 'bbox_2d': [1,2,3,4]}, {'label': 'car-2', 'bbox_2d': [2,3,4,5]}], 1: [{'label': 'car-2', 'bbox_2d': [4,5,6,7]}, {'label': 'person-1', 'bbox_2d': [10,20,30,40]}]},提取结果为 JSON 对象,其键为视频帧索引,值为 JSON 对象列表,每个对象包含类别标签及一个 2D 边界框
# 1. 用户 grounding 请求及您的回复
image=https://example.com/image.jpg
prompt="Please box all people wearing Santa hats in the image and tell me their coordinates. Use red boxes, line thickness 3, and label format 'SantaHat-i'."
# 2. 获取 grounding 结果
python scripts/glm_grounding_cli.py --image-url $image --prompt $prompt --visualize --visualization-dir "./vis"
# {
# "ok": True,
# "grounding_result": [[100, 200, 300, 400], [500, 600, 700, 800]],
# "visualizations_result": (
# {"visualized_image": "./vis/image_vis.jpg"}
# ),
# "raw_result": "1. Person 1: box [100, 200, 300, 400]\n2. Person 2: box [500, 600, 700, 800]. The box format is [x1, y1, x2, y2], where (x1, y1) is the top-left corner and (x2, y2) is the bottom-right corner.",
# "error": None,
# "source": source,
# }
| 函数 | 用途 |
|---|---|
parse_coordinates_from_response(response_str, coords_type='bbox', init_context_window=2000, max_context_window=-1) |
从模型响应中解析并提取全部坐标结果(支持 2D bbox、point、polygon) |
parse_3d_boxes_from_response(response_str, max_context_window=-1) |
从模型响应中解析并提取全部 3D 边界框及对应标签(支持严格匹配与宽松匹配) |
parse_detection_from_response(response_str, max_context_window=-1) |
从模型响应中解析并提取全部 2D 目标检测结果(Objects Detection JSON 格式) |
parse_mot_from_response(response_str, max_context_window=-1) |
从模型响应中解析并提取全部视频目标跟踪结果(Video Objects Tracking JSON 格式) |
visualize_boxes(img_path=None, img_bytes=None, boxes=[], labels=None, renormalize=False, save_path=None, return_b64=False, save_optimized=True, **kwargs) |
在图像上绘制带标签的 2D 边界框,支持自定义颜色与线宽 |
visualize_points(img_path=None, img_bytes=None, points=[], labels=None, renormalize=False, diameters=None, save_path=None, return_b64=False, save_optimized=True, distinct_colors=False, colors=None) |
在图像上绘制带标签的关键点,支持自定义尺寸与颜色 |
visualize_3d_boxes_glmv_simple(image_path, cam_params, bbox_3d_list, image_bytes=None, coord_format='xyzwhlpyr', save_path=None, save_optimized=False, return_b64=False, **kwargs) |
基于相机内参,在图像上绘制投影后的 3D 边界框(支持旋转及多种坐标格式) |
visualize_mot(video_path=None, video_bytes=None, mot_js=None, renormalize=False, save_path=None, return_b64=False, distinct_colors=True, **kwargs) |
在视频每一帧上绘制 Video Objects Tracking 边界框及对应标签 |
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章