1.labelme制作样本生成每个图像的json文件
2.将生成的json文件和原始图像jpg,放入同一个文件夹中(…\labelme-master\examples\instance_segmentation\data_annotated)也就是input_dir
3."…\labelme-master\examples\instance_segmentation"中修改labels.txt文件,保留__ignore__类别(否则会报错,源代码中可以修改也可以)。
4.打开终端并切换路径至…\labelme-master\examples\instance_segmentation,运行如下代码
python labelme2coco.py data_annotated output_dir --labels labels.txt
5.运行后会生成output_dir文件夹
此文件内包含JPEGImages文件夹(包含了原始图像)、Visulaization文件夹以及annotations.json
运行coco_txt.py 将生成对象图片的txt图像信息保存至JPEGImages
from __future__ import print_function
import os, sys, zipfile
import json
def convert(size, box):
dw = 1. / (size[0])
dh = 1. / (size[1])
x = box[0] + box[2] / 2.0
y = box[1] + box[3] / 2.0
w = box[2]
h = box[3]
x = x * dw
w = w * dw
y = y * dh
h = h * dh
return (x, y, w, h)
json_file = 'annotations.json' # # Object Instance 类型的标注
data = json.load(open(json_file, 'r'))
ana_txt_save_path = "save_path" # 保存的路径
if not os.path.exists(ana_txt_save_path):
os.makedirs(ana_txt_save_path)
for img in data['images']:
# print(img["file_name"])
filename = img["file_name"]
img_width = img["width"]
img_height = img["height"]
# print(img["height"])
# print(img["width"])
img_id = img["id"]
ana_txt_name = filename.split(".")[0] + ".txt" # 对应的txt名字,与jpg一致
print(ana_txt_name.replace('\\', '/'))
with open(os.path.join(ana_txt_save_path, ana_txt_name).replace('\\', '/'), 'w') as f_txt:
# f_txt = open()
for ann in data['annotations']:
if ann['image_id'] == img_id:
# annotation.append(ann)
# print(ann["category_id"], ann["bbox"])
box = convert((img_width, img_height), ann["bbox"])
f_txt.write("%s %s %s %s %s\n" % (ann["category_id"], box[0], box[1], box[2], box[3]))
f_txt.close()
使用train_val_txt.py生成train和val的绝对路径,该文件只是生成了train.txt,需要将train.txt中的txt改为jpg,因为针对的是image,这个是根据网上教程来的,其实是可以直接一步到位的。再在train.txt中选取部分作为val.txt的内容。新建labels文件夹,并将JPEGImages文件夹中的txt文件导入其中。到此coco数据集制作完毕。