欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用VIA标注工具生成的json格式文件转换为png格式的数据标签

程序员文章站 2024-03-19 18:31:46
...

VGG Image Annotator (VIA)是一款快速,简单的目标检测标注工具,官方网址:VIA标注工具
这款标注工具将所有标注的图片信息存储在一个json文件中,做语义分割通常的标签需要png或者jpg格式的图片。因此需要把json文件转换成png格式。实现代码如下:
 

import os
import numpy as np
import cv2 as cv
import json
import skimage
dataset_dir="/home/fcc/*****_via_label"
subset="spalling"
json_path="spalling.json"
output_path = "/home/fcc/*****_via_label/spalling_label/"
dataset_dir = os.path.join(dataset_dir, subset)
# We mostly care about the x and y coordinates of each region
annotations = json.load(open(os.path.join(dataset_dir, json_path)))#加载json文件
#json文件中字典嵌套字典,字典嵌套列表。为了取到关键的x,y点的数据,得一一层把字典,列表剥开。
annotations = list(annotations.values())
annotations_point=annotations[1]
annotations_point=list(annotations_point.values())

annotations_point = [a for a in annotations_point if a['regions']]

for i in range(len(annotations_point)):#遍历每一张图的信息

    filename=annotations_point[i]['filename']
    mask = np.zeros([608, 608, 3],dtype=np.uint8)#设置输出图片维度大小
    for j in range(len(annotations_point[i]['regions'])):#一张图可能存在多个标注区域
#json文件中字典嵌套字典,字典嵌套列表。为了取到关键的x,y点的数据,得一一层把字典,列表剥开。
        point = annotations_point[i]['regions'][j].values()[0]
        point_x=point['all_points_x']#提取x点数据
        point_y=point['all_points_y']#提取y点数据
        rr, cc = skimage.draw.polygon(point_y, point_x)#绘制轮廓,得到轮廓内所有点的坐标
        mask[rr, cc, 0] = 255#填充颜色,255 0 0:蓝色;0 255 0:绿色;0 0 255:红色
    #cv.imshow("mask_"+filename,mask)#调试时显示查看
    #cv.waitKey(0)
    cv.imwrite(output_path+filename,mask)#保存png格式标签

输出结果示例如下:

使用VIA标注工具生成的json格式文件转换为png格式的数据标签使用VIA标注工具生成的json格式文件转换为png格式的数据标签