我这次的项目收集到的数据集是固定摄像头在不同时候拍摄的照片,场景变化不大,主要检测物也变化不大,除了刮风和植被生长会影响标记轮廓。几百张图片手工标记会有很多重复工作,而且图片像素也没有发生改变,那我们标记的点坐标应该也是大差不差的,想能不能直接复制我们给第一批图片打的标签呢?
使用labelme标记图片后,点击保存,会生成一个同名的JSON格式文件,记录你刚才标记的信息。内容包含有"version", "flags", "shapes"(存储标签的label名和点坐标)。本来想能不能直接复制呢?后面发现还有"imagePath"和 "imageData"的信息,path直接改为图片名称就好,但是Data却是一大串人类无法理解的长字符,后面查询的这串data数据是根据原图编码的,那直接根据相应的要求修改就好了
from labelme import utils
import numpy as np
from PIL import Image
import json
with open('0401.json','r',encoding='utf8')as fp:#复制的原始图片的JSON文件
json_data = json.load(fp)
#我的图片已经按顺序重新用数字编号命名了,所以能用数字循环找到图片,可根据自己情况修改
for i in range(402,601):
name = '%04d' % i+".png"
img=Image.open('F:/600张图/401-600/'+name)#给哪些图片自动打标签
arr=np.asarray(img)
data=utils.img_arr_to_b64(arr).decode('utf-8')
json_data["imageData"]=data
json_data["imagePath"]=name
filename="new/"+'%04d' % i+".json"#标签存储的位置
with open(filename,'w',encoding='utf-8') as f:
json.dump(json_data, f,ensure_ascii=False)
print(name+' success')