dataturks格式转sbd格式

该代码段创建了一个JSON数据集,用于训练深度学习模型。它读取多个源文件,处理图像边界框并计算面积,然后将信息整理成'images'和'annotations'列表,最后写入到'train.json'文件。数据集包含图像的尺寸信息、标注的边界框和类别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

def getbox(cnt):
    rect = cv2.minAreaRect(cnt) # 得到最小外接矩形的(中心(x,y), (宽,高), 旋转角度)
    box = cv2.boxPoints(rect) # 获取最小外接矩形的4个顶点坐标(ps: cv2.boxPoints(rect) for OpenCV 3.x)
    # box = np.int(box)
    return [int(np.min(box[:,0])),int(np.min(box[:,1])),int(np.max(box[:,0])),int(np.max(box[:,1]))]

imgname = 0
SbdDict = {}
ImagesList = []
AnnotationsList = []
imgids = 0
annotationids = 0
imgrootdir = '/home/lhq/segmentation/snake-master/data/sbd/img'
with open('ice cream.json') as f:
    datas = f.readlines()
    for data in datas:
        data = data.strip()
        Dict = json.loads(data)

        content = Dict['content'].split('___')[-1].split('.')[-1]
        content = str(imgname) + '.' + content
        imgname += 1
        Dict['content'] = content

        imgdict = {}
        imgdict['file_name'] = Dict['content']
        H,W,_ = cv2.imread(os.path.join(imgrootdir,Dict['content'])).shape
        imgdict['height'] = H
        imgdict['width'] = W
        imgdict['id'] = imgids
        ImagesList.append(imgdict)
        annotations = Dict['annotation']
        for annotation in annotations:
            annotationdict = {}
            segmentationlist = []
            points = annotation['points']
            for point in points:
                point[0] = int(point[0] * W)
                point[1] = int(point[1] * H)
                segmentationlist.append(point[0])
                segmentationlist.append(point[1])
            area = cv2.contourArea(np.array(points))
            annotationdict['segmentation'] = [segmentationlist]
            annotationdict['area'] = area
            annotationdict['image_id'] = imgids
            box = getbox(np.array(points))
            annotationdict['bbox'] = box
            annotationdict['iscrowd'] = 0
            annotationdict['id'] = annotationids
            annotationdict['category_id'] = 1
            annotationids += 1
            AnnotationsList.append(annotationdict)
        imgids += 1

with open('/home/lhq/centernettrain/icecream.json') as f:
    datas = f.readlines()
    for data in datas:
        data = data.strip()
        Dict = json.loads(data)

        content = Dict['content'].split('___xgbz_')[-1]
        Dict['content'] = content

        imgdict = {}
        imgdict['file_name'] = Dict['content']
        H,W,_ = cv2.imread(os.path.join(imgrootdir,Dict['content'])).shape
        imgdict['height'] = H
        imgdict['width'] = W
        imgdict['id'] = imgids
        ImagesList.append(imgdict)
        annotations = Dict['annotation']
        for annotation in annotations:
            annotationdict = {}
            segmentationlist = []
            points = annotation['points']
            for point in points:
                point[0] = int(point[0] * W)
                point[1] = int(point[1] * H)
                segmentationlist.append(point[0])
                segmentationlist.append(point[1])
            area = cv2.contourArea(np.array(points))
            annotationdict['segmentation'] = [segmentationlist]
            annotationdict['area'] = area
            annotationdict['image_id'] = imgids
            box = getbox(np.array(points))
            annotationdict['bbox'] = box
            annotationdict['iscrowd'] = 0
            annotationdict['id'] = annotationids
            annotationdict['category_id'] = 1
            annotationids += 1
            AnnotationsList.append(annotationdict)
        imgids += 1

with open('icecream_6_8.json') as f:
    datas = f.readlines()
    for data in datas:
        data = data.strip()
        Dict = json.loads(data)

        content = Dict['content'].split('___dataturks_')[-1]
        Dict['content'] = content

        imgdict = {}
        imgdict['file_name'] = Dict['content']
        H,W,_ = cv2.imread(os.path.join(imgrootdir,Dict['content'])).shape
        imgdict['height'] = H
        imgdict['width'] = W
        imgdict['id'] = imgids
        ImagesList.append(imgdict)
        annotations = Dict['annotation']
        for annotation in annotations:
            annotationdict = {}
            segmentationlist = []
            points = annotation['points']
            for point in points:
                point[0] = int(point[0] * W)
                point[1] = int(point[1] * H)
                segmentationlist.append(point[0])
                segmentationlist.append(point[1])
            area = cv2.contourArea(np.array(points))
            annotationdict['segmentation'] = [segmentationlist]
            annotationdict['area'] = area
            annotationdict['image_id'] = imgids
            box = getbox(np.array(points))
            annotationdict['bbox'] = box
            annotationdict['iscrowd'] = 0
            annotationdict['id'] = annotationids
            annotationdict['category_id'] = 1
            annotationids += 1
            AnnotationsList.append(annotationdict)
        imgids += 1

SbdDict['images'] = ImagesList
SbdDict['annotations'] = AnnotationsList
SbdDict['categories'] = [{'supercategory': 'none', 'id': 1, 'name': 'icecream'}]
with open('train.json','w') as fw:
    json.dump(SbdDict,fw)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值