zoukankan      html  css  js  c++  java
  • darknet标签转化为COCO标签

    import sys
    import json
    import cv2
    import os
    import shutil
    
    dataset = { "info": {
                "description": "XXX in COCO dataset.", 
                "url": "", 
                "version": "1.0", 
                "year": , 
                "contributor": "aimhabo", 
                "date_created": "2019-03-25"}, 
                "images":[],
                "annotations":[],
                "categories": [
                {"supercategory:": "person", "id": 1, "name": "person"},
                {"supercategory:": "car", "id": 2, "name": "car"},
                {"supercategory:": "truck", "id": 3, "name": "truck"},
                {"supercategory:": "bus", "id": 4, "name": "bus"}
                ]
    }
    
    datapath = "scripts/images"
    annopath = "scripts/labels"
    trainsetfile = "scripts/trainimage.list"
    outputpath = "scripts"
    phase = "XXXTrainCOCO"
    classes = {"background": 0, "person": 1, "car": 2, "truck": 3, "bus": 4}
    
    with open(trainsetfile) as f:
        count = 1
        cnt = 0
        annoid = 0
        for line in f:
            cnt += 1
            line = line.strip()
    
            name,ext = os.path.basename(line).split('.')
            
            imagepath = os.path.join(datapath, name + ".jpg")
            # no obstacle currently drop it
            txtpath = os.path.join(annopath, name + ".txt")
            if not os.path.exists(txtpath):
                print txtpath
                continue
    
            im = cv2.imread(imagepath)
                
            height, width, channels = im.shape
    
            if cnt % 1000 == 0:
                print cnt
                    
            dataset["images"].append({"license": 5, "file_name": line, "coco_url": "local", "height": height, "width": width, "flickr_url": "local", "id": cnt})
            with open(txtpath) as annof:
                annos = annof.readlines()
            
            for ii, anno in enumerate(annos):
                parts = anno.strip().split(' ')
                if len(parts) is not 5:
                    continue
                class_id = int(parts[0])
                x = float(parts[1])
                y = float(parts[2])
                w = float(parts[3])
                h = float(parts[4])
                if parts[0].find("group") == -1:
                    iscrowd = 0
                else:
                    iscrowd = 1
    
                annoid = annoid + 1
    
                class_id += 1 # start from 1 instead of 0
                x1 = int((x-w/2)*width)
                y1 = int((y-h/2)*height)
                wid = int(w*width)
                hei = int(h*height)
                
                dataset["annotations"].append({
                    "segmentation": [],
                    "iscrowd": iscrowd,
                    "area": wid * hei,
                    "image_id": cnt,
                    "bbox": [x1, y1, wid, hei],
                    "category_id": class_id,
                    "id": annoid
                })
            count += 1
    
    json_name = os.path.join(outputpath, "{}.json".format(phase))
    
    with open(json_name, 'w') as f:
        json.dump(dataset, f)
  • 相关阅读:
    eIQ WSL下工具及环境配置
    WSL配置高翔vslam环境配置流水账
    机器学习原理/模型/应用
    Spring+Quartz(定时任务)
    vim常用操作
    Linux使用ssh公钥实现免密码登录Linux
    svn常用操作
    Jquery Html方法失效的问题
    运算符&&与||的用法
    CSS强制不换行[转帖]
  • 原文地址:https://www.cnblogs.com/aimhabo/p/10974218.html
Copyright © 2011-2022 走看看