博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据转labelme,labelme转VOC,labelme转COCO
阅读量:2050 次
发布时间:2019-04-28

本文共 13118 字,大约阅读时间需要 43 分钟。

自己的转labelme 

# -*- coding:utf-8 -*-import argparseimport jsonimport osimport os.path as ospimport warningsimport copyimport numpy as npimport PIL.Imagefrom skimage import ioimport yamlimport cv2import copydef mkdir_os(path):    if not os.path.exists(path):        os.makedirs(path)#https://blog.csdn.net/u010103202/article/details/81635436#labelme标注的数据分析#https://blog.csdn.net/wc781708249/article/details/79595174#数据先转换成lableme,然后调用labelme的函数转换为VOC#https://github.com/wkentaro/labelme/tree/master/examples/semantic_segmentationori_path = "./luosi_phone_seg_20191008"save_path = "./seg_groundtruth"json_path = "./labelme_json"gray_path = "./JPEGImages_gray"mkdir_os(save_path)mkdir_os(json_path)mkdir_os(gray_path)#path = "luosi_phone_seg_20191008_20191012_185541.json"path = "luosi_phone_seg_20191008_20191014_194416.json"data = []with open(path) as f:    for line in f:        data.append(json.loads(line))num = 0lendata_num = 0count = len(data)file_error = open('error_null_json_biaozhu.txt',"wr")train_txt = open('train.txt',"wr")test_txt = open('test.txt',"wr")for lab in range(count):    num += 1    #print num,"/",count    onedate = data[lab]    name = onedate["url_image"]    name = str(name).split("/")[-1]    print(name)    # if len(onedate["result"])<2:    #     print name    #     continue    # X1 = onedate["result"][0]["data"]    # Y1 = onedate["result"][1]["data"]    # assert len(X1)==len(Y1),"error len"    img = cv2.imread(os.path.join(ori_path,name))    tempimg = copy.deepcopy(img)    grayimg = copy.deepcopy(img)    hh,ww,c = img.shape    point_size = 1    point_color = (0, 0, 255)    thickness = 4    # VID_20190924_143239_000511_img_good_931_735_1111_895    if(len(onedate["result"])==0):        print(name)        file_error.write(name)        file_error.write("\n")        continue    if name == "VID_20190924_145531_000961_img_bad_791_480_1006_675.jpg":        a = 1    if 'data' in onedate["result"] or 'data' in onedate["result"][0]:        for key in range(len(onedate["result"])):            ndata = onedate["result"][key]["data"]            for k in range(len(ndata)/2):                cv2.circle(img, (ndata[2*k],ndata[2*k+1]), point_size, point_color, thickness)        grayimg=cv2.cvtColor(grayimg,cv2.COLOR_BGR2GRAY)        cv2.imwrite(os.path.join(gray_path,name),grayimg)        cv2.imwrite(os.path.join(save_path,name),img)    else:        print(name)        file_error.write(name)        file_error.write("\n")        continue    json_jpg={}    json_jpg["imagePath"] = str(os.path.join(ori_path,name))    json_jpg["imageData"] = None    shapes=[]    #if name=="VID_20190924_142716_000261_img_good_670_716_772_813.jpg":    #    sss=1    #VID_20190924_145903    #VID_20190924_145950    for key in range(len(onedate["result"])):        ndata = onedate["result"][key]["data"]        points=[]        if len(ndata)< 6:            lendata_num += 1            continue        else:            for k in range(len(ndata)/2):                cv2.circle(img, (ndata[2*k],ndata[2*k+1]), point_size, point_color, thickness)                points.append([ndata[2*k],ndata[2*k+1]])        one_shape = {}        one_shape["line_color"] = None        one_shape["shape_type"] = "polygon"        one_shape["points"] = points        one_shape["flags"] = {}        one_shape["fill_color"] = None        one_shape["label"] = "luosi"        shapes.append(one_shape)    json_jpg["shapes"] = shapes    json_jpg["version"] = "3.16.7"    json_jpg["flags"] = {}    json_jpg["fillColor"] = [                                255,                                 0,                                 0,                                 128                            ]    json_jpg["lineColor"] = [                                0,                                 255,                                 0,                                 128                            ]    json_jpg["imageWidth"] = ww    json_jpg["imageHeight"] = hh    jsonData = json.dumps(json_jpg, indent=4)    jsonname = name.split(".")[0]    jsonname = jsonname+".json"    fileObject = open(os.path.join(json_path,jsonname), 'w')    #cv2.imwrite(os.path.join(json_path,name),tempimg)    fileObject.write(jsonData)    fileObject.close()    txtname = name.split(".")[0]    if "VID_20190924_145903" in txtname or "VID_20190924_145950" in txtname:        test_txt.write(txtname)        test_txt.write("\n")    else:        train_txt.write(txtname)        train_txt.write("\n")print("lendata_num:",lendata_num)file_error.close()test_txt.close()train_txt.close()

labelme转voc

#!/usr/bin/env pythonfrom __future__ import print_functionimport argparseimport globimport jsonimport osimport os.path as ospimport sysimport numpy as npimport PIL.Imageimport labelmedef mkdir_os(path):    if not os.path.exists(path):        os.makedirs(path)def main():    # parser = argparse.ArgumentParser(    #     formatter_class=argparse.ArgumentDefaultsHelpFormatter    # )    # parser.add_argument('input_dir', help='input annotated directory', default='./labelme_json')    # parser.add_argument('output_dir', help='output dataset directory', default='./voc_json')    # parser.add_argument('--labels', help='labels file', default='labels.txt', required=True)    # args = parser.parse_args()    # if osp.exists(args.output_dir):    #     print('Output directory already exists:', args.output_dir)    #     sys.exit(1)    input_dir = './labelme_json'    output_dir = './voc_json'        mkdir_os(output_dir)    mkdir_os(osp.join(output_dir, 'JPEGImages'))    mkdir_os(osp.join(output_dir, 'SegmentationClass'))    mkdir_os(osp.join(output_dir, 'SegmentationClassPNG'))    mkdir_os(osp.join(output_dir, 'SegmentationClassVisualization'))    print('Creating dataset:', output_dir)    class_names = []    class_name_to_id = {}    for i, line in enumerate(open('labels.txt').readlines()):        class_id = i - 1  # starts with -1        class_name = line.strip()        class_name_to_id[class_name] = class_id        if class_id == -1:            assert class_name == '__ignore__'            continue        elif class_id == 0:            assert class_name == '_background_'        class_names.append(class_name)    class_names = tuple(class_names)    print('class_names:', class_names)    out_class_names_file = osp.join(output_dir, 'class_names.txt')    with open(out_class_names_file, 'w') as f:        f.writelines('\n'.join(class_names))    print('Saved class_names:', out_class_names_file)    colormap = labelme.utils.label_colormap(255)    for label_file in glob.glob(osp.join(input_dir, '*.json')):        print('Generating dataset from:', label_file)        with open(label_file) as f:            base = osp.splitext(osp.basename(label_file))[0]            out_img_file = osp.join(                output_dir, 'JPEGImages', base + '.jpg')            out_lbl_file = osp.join(                output_dir, 'SegmentationClassPNG', base + '.npy')            #SegmentationClassPNG            #SegmentationClass            # out_lbl_file = osp.join(            #     output_dir, 'SegmentationClass', base + '.png')            out_png_file = osp.join(                output_dir, 'SegmentationClass', base + '.png')            out_viz_file = osp.join(                output_dir,                'SegmentationClassVisualization',                base + '.jpg',            )            data = json.load(f)            #保存出错:VID_20190924_142150_000251_img_good_891_387_976_475                        #img_file = osp.join(osp.dirname(label_file), data['imagePath'])            img = np.asarray(PIL.Image.open(data['imagePath']))            PIL.Image.fromarray(img).save(out_img_file)            lbl = labelme.utils.shapes_to_label(                img_shape=img.shape,                shapes=data['shapes'],                label_name_to_value=class_name_to_id,            )            labelme.utils.lblsave(out_png_file, lbl)            np.save(out_lbl_file, lbl)            viz = labelme.utils.draw_label(                lbl, img, class_names, colormap=colormap)            PIL.Image.fromarray(viz).save(out_viz_file)if __name__ == '__main__':    main()

labelme转coco

# -*- coding: utf-8 -*-import osimport jsonimport numpy as npimport globimport shutilfrom sklearn.model_selection import train_test_splitnp.random.seed(41)import cv2#0为背景classname_to_id = {"luosi": 1}class Lableme2CoCo:    def __init__(self):        self.images = []        self.annotations = []        self.categories = []        self.img_id = 0        self.ann_id = 0    def save_coco_json(self, instance, save_path):        import io        #json.dump(instance, io.open(save_path, 'w', encoding='utf-8'), ensure_ascii=False, indent=1)  # indent=2 更加美观显示        with io.open(save_path, 'w', encoding="utf-8") as outfile:            my_json_str = json.dumps(instance, ensure_ascii=False, indent=1)            if isinstance(my_json_str, str):                my_json_str = my_json_str.decode("utf-8")            outfile.write(my_json_str)    # 由json文件构建COCO    def to_coco(self, json_path_list):        self._init_categories()        for json_path in json_path_list:            obj = self.read_jsonfile(json_path)            self.images.append(self._image(obj, json_path))            shapes = obj['shapes']            for shape in shapes:                annotation = self._annotation(shape)                self.annotations.append(annotation)                self.ann_id += 1            self.img_id += 1        instance = {}        instance['info'] = 'spytensor created'        instance['license'] = ['license']        instance['images'] = self.images        instance['annotations'] = self.annotations        instance['categories'] = self.categories        return instance    # 构建类别    def _init_categories(self):        for k, v in classname_to_id.items():            category = {}            category['id'] = v            category['name'] = k            self.categories.append(category)    # 构建COCO的image字段    def _image(self, obj, path):        image = {}        from labelme import utils        #img_x = utils.img_b64_to_arr(obj['imageData'])        img_x = cv2.imread(str(obj['imagePath']))        img_x = cv2.cvtColor(img_x, cv2.COLOR_BGR2RGB)        h, w = img_x.shape[:-1]        image['height'] = h        image['width'] = w        image['id'] = self.img_id        image['file_name'] = os.path.basename(path).replace(".json", ".jpg")        return image    # 构建COCO的annotation字段    def _annotation(self, shape):        label = shape['label']        points = shape['points']        annotation = {}        annotation['id'] = self.ann_id        annotation['image_id'] = self.img_id        annotation['category_id'] = int(classname_to_id[label])        annotation['segmentation'] = [np.asarray(points).flatten().tolist()]        annotation['bbox'] = self._get_box(points)        annotation['iscrowd'] = 0        annotation['area'] = 1.0        return annotation    # 读取json文件,返回一个json对象    def read_jsonfile(self, path):        import io        #with io.open(path, "r", encoding='utf-8') as f:        with open(path, "r") as f:            return json.load(f)    # COCO的格式: [x1,y1,w,h] 对应COCO的bbox格式    def _get_box(self, points):        min_x = min_y = np.inf        max_x = max_y = 0        for x, y in points:            min_x = min(min_x, x)            min_y = min(min_y, y)            max_x = max(max_x, x)            max_y = max(max_y, y)        return [min_x, min_y, max_x - min_x, max_y - min_y]if __name__ == '__main__':    labelme_path = "labelme_json/"    saved_coco_path = "./"    # 创建文件    if not os.path.exists("%scoco/annotations/"%saved_coco_path):        os.makedirs("%scoco/annotations/"%saved_coco_path)    if not os.path.exists("%scoco/images/train2017/"%saved_coco_path):        os.makedirs("%scoco/images/train2017"%saved_coco_path)    if not os.path.exists("%scoco/images/val2017/"%saved_coco_path):        os.makedirs("%scoco/images/val2017"%saved_coco_path)    # 获取images目录下所有的joson文件列表    json_list_path = glob.glob(labelme_path + "/*.json")    # 数据划分,这里没有区分val2017和tran2017目录,所有图片都放在images目录下    train_path, val_path = train_test_split(json_list_path, test_size=0)    val_path = train_path    train_path = []    print("train_n:", len(train_path), 'val_n:', len(val_path))    # 把训练集转化为COCO的json格式    if len(train_path):        l2c_train = Lableme2CoCo()        train_instance = l2c_train.to_coco(train_path)        l2c_train.save_coco_json(train_instance, '%scoco/annotations/instances_train2017.json'%saved_coco_path)        for file in train_path:            name = file.split('/')[-1]            name = "./images_shachepian/train2017/" + name            shutil.copy(name.replace("json","jpg"),"%scoco/images/train2017/"%saved_coco_path)    if len(val_path):        # 把验证集转化为COCO的json格式        l2c_val = Lableme2CoCo()        val_instance = l2c_val.to_coco(val_path)        l2c_val.save_coco_json(val_instance, '%scoco/annotations/instances_val2017.json'%saved_coco_path)        for file in val_path:            name = file.split('/')[-1]            name = "./images_shachepian/val2017/" + name            shutil.copy(name.replace("json","jpg"),"%scoco/images/val2017/"%saved_coco_path)

 

你可能感兴趣的文章
【selenium】selenium ide的安装过程
查看>>
【手机自动化测试】monkey测试
查看>>
【英语】软件开发常用英语词汇
查看>>
Fiddler 抓包工具总结
查看>>
【雅思】雅思需要购买和准备的学习资料
查看>>
【雅思】雅思写作作业(1)
查看>>
【雅思】【大作文】【审题作业】关于同不同意的审题作业(重点)
查看>>
【Loadrunner】通过loadrunner录制时候有事件但是白页无法出来登录页怎么办?
查看>>
【Python】Python 读取csv的某行或某列数据
查看>>
【Loadrunner】平台1.9环境APP成功录制并调试成功后的脚本备份
查看>>
【Loadrunner】性能测试:通过服务器日志获取性能需求
查看>>
【Python】sasa版:文件中csv读取在写入csv读取的数据和执行是否成功。
查看>>
【loadrunner】【scorm学习】demo/test域上进行scorm脚本录制及回放成功脚本备份
查看>>
【Loadrunner】使用LoadRunner上传及下载文件
查看>>
【Loadrunner】使用LR录制HTTPS协议的三种方法
查看>>
【Python+Selenium】猪猪练习成功版:csv文件的输入和输出(运行环境:python3.5版本)...
查看>>
【python】BeautifulSoup的应用
查看>>
【Python】接口自动化测试-Fidder的使用(未完待续……)
查看>>
【Python】自动化测试框架-共通方法汇总
查看>>
【Python】if相关知识点
查看>>