You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何可视化VIA标注JSON文件中的关键点?附读取代码与示例数据

实现VIA标注JSON中关键点的可视化

所需依赖

首先安装必要的Python库:

pip install opencv-python matplotlib glob2

完整代码实现

import os
import json
import cv2
import glob
import matplotlib.pyplot as plt

# 配置路径
JSON_PATH = '/JSON/json.json'
IMG_DIR = '/Dataset'  # 数据集根目录

# 构建文件名到完整路径的映射,方便快速查找
image_paths = glob.glob(os.path.join(IMG_DIR, '*.png'))
image_filename_map = {os.path.basename(path): path for path in image_paths}

# 加载JSON标注数据
with open(JSON_PATH, 'r', encoding='utf-8') as f:
    annotation_data = json.load(f)

# 遍历每张图片的标注信息
for img_metadata in annotation_data['_via_img_metadata'].values():
    img_filename = img_metadata['filename']
    keypoint_regions = img_metadata['regions']
    
    # 跳过无关键点标注的图片
    if not keypoint_regions:
        continue
    
    # 检查图片是否存在于数据集
    if img_filename not in image_filename_map:
        print(f"警告:未找到图片 {img_filename}")
        continue
    
    # 读取图片
    img_full_path = image_filename_map[img_filename]
    img = cv2.imread(img_full_path)
    # OpenCV默认BGR格式,转换为RGB用于matplotlib显示
    img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    
    # 绘制每个关键点
    for region in keypoint_regions:
        shape_attrs = region['shape_attributes']
        # 确保是点类型标注
        if shape_attrs['name'] == 'point':
            cx = shape_attrs['cx']
            cy = shape_attrs['cy']
            # 绘制红色实心圆(半径5,厚度-1表示填充)
            cv2.circle(img_rgb, (cx, cy), 5, (255, 0, 0), -1)
            # 可选:添加坐标文本标注
            cv2.putText(img_rgb, f"({cx},{cy})", (cx + 10, cy), 
                        cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 1)
    
    # 显示标注后的图片
    plt.figure(figsize=(12, 12))
    plt.imshow(img_rgb)
    plt.title(f"关键点标注:{img_filename}")
    plt.axis('off')
    plt.show()
    
    # 可选:保存标注后的图片到数据集目录
    save_filename = f"annotated_{img_filename}"
    save_path = os.path.join(IMG_DIR, save_filename)
    # 转换回BGR格式保存
    cv2.imwrite(save_path, cv2.cvtColor(img_rgb, cv2.COLOR_RGB2BGR))
    print(f"已保存标注图片:{save_path}")

代码说明

  1. 路径配置:修改JSON_PATH和IMG_DIR为你的实际路径。
  2. 图片映射:通过glob获取所有PNG图片,构建文件名到路径的字典,避免重复查找。
  3. 标注遍历:遍历_via_img_metadata下的每个图片条目,提取关键点坐标。
  4. 关键点绘制:使用OpenCV的circle函数绘制红色实心点,可选添加坐标文本。
  5. 结果展示与保存:用matplotlib显示图片,同时支持保存标注后的图片到本地。

注意事项

  • 确保JSON中的filename与数据集里的图片文件名完全一致(包括大小写)。
  • 若图片路径包含特殊字符,需确保编码正确(代码中已指定encoding='utf-8')。
  • 可根据需求调整关键点的颜色、大小、文本样式等参数。

内容的提问来源于stack exchange,提问作者Asifuzzaman Jishan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:50:30