在深度学习进行图像识别,物体检测,语义分割,实例分割时,需要使用已经标注好的数据集来训练模型。
可以使用常用的标注软件或在线标注平台来进行图像数据集的标注。通常标注后的格式为XML格式(VOC XML),或JSON格式(VGG JSON,COCO JSON),但是训练阶段(尤其是语义分割)时有时候使用图片格式更为方便。
导出为VGG JSON格式如下:
使用PIL将语义分割标注后的JSON格式转换为图片格式
代码如下:
代码语言:python代码运行次数:0复制from PIL import Image,ImageDraw
import json
import os
def json2jpg(annosFile,imgsDir,masksDir,colorMap,isAlpha,backgroundColor):
f=open(annosFile,'r')
annos=json.load(f)
f.close()
for file,anno in annos.items():
print(file)
#读取原始图像大小
rawFile=os.path.join(imgsDir,anno['filename'])
rawImg=Image.open(rawFile)
#新建同样大小画布,jpg格式还是png格式
mode='RGBA' if isAlpha else 'RGB'
ext='.png' if isAlpha else '.jpg'
maskImg=Image.new(mode,rawImg.size,backgroundColor)
draw=ImageDraw.Draw(maskImg)
for index,region in anno['regions'].items():
print(index)
x=region['shape_attributes']['all_points_x']
y=region['shape_attributes']['all_points_y']
label=region['region_attributes']['label']
x=map(int,x)
y=map(int,y)
#使用标注类别对应的颜色标注每一个标注区域
draw.polygon(list(zip(x,y)),fill=colorsMap.get(label,backgroundColor))
maskFile=os.path.join(masksDir,os.path.splitext(anno['filename'])[0])
maskImg.save(maskFile ext)
if __name__=='__main__':
#定义各个标注类别对应的颜色
colorsMap={'foreground':'#00ff00','body':'yellow'}
json2jpg('labels.json','pics/','masks/',colorsMap,True,'black')
同理对于COCO JSON等其他JSON格式,以及XML格式都可以利用PIL转换为掩膜图片。