VIA(VGG Image Annotator)标注数据转化为coco format的代码

本文介绍如何将VGGImageAnnotator(VIA)标注的数据转换为COCO格式,适用于mmdetection等框架。通过解析两个json文件并进行格式转换,实现数据的无缝对接。


VGG Image Annotator (VIA)一款开源的图像标注工具,由Visual Geometry Group开发。可以在线和离线使用,可标注矩形、圆、椭圆、多边形、点和线。标注完成后,可以导出为csv和json文件格式。

mmdetection等框架中有的不支持VIA标注的数据,就需要写一个转化的代码

其实就是两个json文件的转化,两种标注格式读入后就是两个dict格式的数据,我们要做的就是一层一层把dict拨开,放入coco format的dict中。

首先可以先格式化输出一下两个json文件,比较差别,需要安装一个包

yum install -y jq

然后

cat a.json | jq

然后就可以写转化的代码了,这里提供我写的版本,亲测好用。
中间有一些小逻辑可以忽略(自己用了,就不改了)

import json
import os
import cv2
import numpy as np

def _get_bbox(all_points_x, all_points_y):

	min_x , max_x = min(all_points_x), max(all_points_x)
	min_y , max_y = min(all_points_y), max(all_points_y)
	bbox = [min_x, min_y, max_x - min_x, max_y - min_y]
	return bbox

def _get_mask(all_points_x, all_points_y):
	min_x , max_x = min(all_points_x), max(all_points_x)
	min_y , max_y = min(all_points_y), max(all_points_y)
	for zz in range(len(all_points_x)): #find the biggest in list
		if(all_points_x[zz] == max_x):
			break
	left_lines = []
	right_lines = []
	mask = []
	for zzz in range(len(all_points_x)): # draw lines
		if zzz != zz :
			if all_points_y[zzz] < all_points_y[zz]:
				angle = abs(all_points_x[zzz] - all_points_x[zz])/abs(all_points_y[zzz] - all_points_y[zz] + 1e-7)
				#print('left',angle)
				left_lines.append([angle,all_points_x[zzz],all_points_y[zzz]])
			else:
				angle = abs(all_points_x[z
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值