美文网首页
labelme数据集合并

labelme数据集合并

作者: 1037号森林里一段干木头 | 来源:发表于2021-08-27 11:50 被阅读0次

简介:在做标注的时候常常会分不同时间不同批次来标注数据,最后合并的时候,有的json标签文件和image文件相对路径不同,则直接把所有图片和标签复制在一起,用labelme打开会出错。

注:最终的文件图片名和json标签名一致,json文件的"imagePath"也与图片一致(json文件和image的相对路径关系可改--prePath)

合并数据集

import json
import os
import cv2 as cv
import shutil

def fromJsonGetImagePath(jsonPath):
    """
      return imageName
    """
    data = []
    with open(jsonPath, "r", encoding='utf-8') as f:
        jsonData = json.load(f)
        
        img_name = jsonData["imagePath"]
        img_name = img_name.rsplit("\\",1)[-1]
        
    return img_name
                
def changeJsonImagePath(jsonPath,imagePath):
    """
      return imageName
    """
    
    with open(jsonPath, "r", encoding='utf-8') as f:
        jsonData = json.load(f)
        
    jsonData["imagePath"] = imagePath
    with open(jsonPath,"w",encoding="utf-8") as fo:
        json.dump(jsonData,fo)

def getAllJsonFilePath(jsonFolder):
    jsonPathList = []
    for item in os.listdir(jsonFolder):
        if item.rsplit(".",1)[-1] != "json":
            continue
        jsonPathList.append(os.path.join(jsonFolder,item))
    return jsonPathList

不同批次的数据集合并

  • 找不同的文件夹中的所有json文件
  • 从json文件中找出图片名,获取对应的图片
  • 按一定命名规则复制到另一个文件夹
if __name__ == "__main__":
    rootPath = r"K:\imageData\SMTdataset\SMTData"
    imageFolder1 = rootPath + "\\image"#原始图片
    labelFolder1 = rootPath + "\\label6"#标准标注文件的存放路径,标准文件以json格式存储
    imageFolder2 = rootPath + "\\image2"#原始图片
    labelFolder2 = rootPath + "\\image2"#标准标注文件的存放路径,标准文件以json格式存储
    
    tempFolder = rootPath + "\\temp"
    dstImageFolder = tempFolder + "\\image"
    dstLabelFolder = tempFolder + "\\label"
    
    #修改json文件名,和位置后,需要把json里面的imagePath也做对应的修改
    prePath = "..\\\\image\\\\"#四条\会转为两条,\表示转义
    
    ZFILLN = 8#零填充数
    
    if not os.path.exists(dstImageFolder):
        try:
            os.makedirs(dstImageFolder)
        except:
            print("create {} failed!".format(dstImageFolder))
    if not os.path.exists(dstLabelFolder):
        try:
            os.makedirs(dstLabelFolder)
        except:
            print("create {} failed!".format(dstLabelFolder))
            
    labelPathLists1 = getAllJsonFilePath(labelFolder1)    
    labelPathLists2 = getAllJsonFilePath(labelFolder2)
    
    imagePathLists1 = [os.path.join(imageFolder1,fromJsonGetImagePath(labelPathLists1[i])) for i in range(len(labelPathLists1))]    
    imagePathLists2 = [os.path.join(imageFolder2,fromJsonGetImagePath(labelPathLists2[i])) for i in range(len(labelPathLists2))]
    
    for i in range(len(labelPathLists1)):
        dstLabelPath = os.path.join(dstLabelFolder,str(i).zfill(ZFILLN)+"."+labelPathLists1[i].rsplit(".",1)[-1])        
        dstImagePath = os.path.join(dstImageFolder,str(i).zfill(ZFILLN)+"."+imagePathLists1[i].rsplit(".",1)[-1])
        
        print("srcLabel: {} ----> dstLabel:{}".format(labelPathLists1[i],dstLabelPath))
        print("srcImage: {} ----> dstImage:{}".format(imagePathLists1[i],dstImagePath))
        shutil.copy(labelPathLists1[i],dstLabelPath)        
        shutil.copy(imagePathLists1[i],dstImagePath)
        dstImageName = dstImagePath.rsplit("\\",1)[-1]
        changeJsonImagePath(dstLabelPath,prePath + dstImageName)
        
    for j in range(len(labelPathLists2)):
        dstLabelPath = os.path.join(dstLabelFolder,str(i+j+1).zfill(ZFILLN)+"."+labelPathLists2[j].rsplit(".",1)[-1])        
        dstImagePath = os.path.join(dstImageFolder,str(i+j+1).zfill(ZFILLN)+"."+imagePathLists2[j].rsplit(".",1)[-1])
        
        print("srcLabel: {} ----> dstLabel:{}".format(labelPathLists2[j],dstLabelPath))
        print("srcImage: {} ----> dstImage:{}".format(imagePathLists2[j],dstImagePath))
        shutil.copy(labelPathLists2[j],dstLabelPath)        
        shutil.copy(imagePathLists2[j],dstImagePath)
        dstImageName = dstImagePath.rsplit("\\",1)[-1]
        changeJsonImagePath(dstLabelPath,prePath + dstImageName)
        
    
    
    

output:


    srcLabel: K:\imageData\SMTdataset\SMTData\label6\00000003.json ----> dstLabel:K:\imageData\SMTdataset\SMTData\temp\label\00000000.json
    srcImage: K:\imageData\SMTdataset\SMTData\image\00000003.bmp ----> dstImage:K:\imageData\SMTdataset\SMTData\temp\image\00000000.bmp
    srcLabel: K:\imageData\SMTdataset\SMTData\label6\00000004.json ----> dstLabel:K:\imageData\SMTdataset\SMTData\temp\label\00000001.json
    srcImage: K:\imageData\SMTdataset\SMTData\image\00000004.bmp ----> dstImage:K:\imageData\SMTdataset\SMTData\temp\image\00000001.bmp
    srcLabel: K:\imageData\SMTdataset\SMTData\label6\00000006.json ----> dstLabel:K:\imageData\SMTdataset\SMTData\temp\label\00000002.json
    srcImage: K:\imageData\SMTdataset\SMTData\image\00000006.bmp ----> dstImage:K:\imageData\SMTdataset\SMTData\temp\image\00000002.bmp
    srcLabel: K:\imageData\SMTdataset\SMTData\label6\00000007.json ----> dstLabel:K:\imageData\SMTdataset\SMTData\temp\label\00000003.json
    srcImage: K:\imageData\SMTdataset\SMTData\image\00000007.bmp ----> dstImage:K:\imageData\SMTdataset\SMTData\temp\image\00000003.bmp
    srcLabel: K:\imageData\SMTdataset\SMTData\label6\00000008.json ----> dstLabel:K:\imageData\SMTdataset\SMTData\temp\label\00000004.json
    srcImage: K:\imageData\SMTdataset\SMTData\image\00000008.bmp ----> dstImage:K:\imageData\SMTdataset\SMTData\temp\image\00000004.bmp
    srcLabel: K:\imageData\SMTdataset\SMTData\label6\00000009.json ----> dstLabel:K:\imageData\SMTdataset\SMTData\temp\label\00000005.json
    srcImage: K:\imageData\SMTdataset\SMTData\image\00000009.bmp ----> dstImage:K:\imageData\SMTdataset\SMTData\temp\image\00000005.bmp
    srcLabel: K:\imageData\SMTdataset\SMTData\label6\00000015.json ----> dstLabel:K:\imageData\SMTdataset\SMTData\temp\label\00000006.json
    srcImage: K:\imageData\SMTdataset\SMTData\image\00000015.bmp ----> dstImage:K:\imageData\SMTdataset\SMTData\temp\image\00000006.bmp
    srcLabel: K:\imageData\SMTdataset\SMTData\label6\00000016.json ----> dstLabel:K:\imageData\SMTdataset\SMTData\temp\label\00000007.json
    srcImage: K:\imageData\SMTdataset\SMTData\image\00000016.bmp ----> dstImage:K:\imageData\SMTdataset\SMTData\temp\image\00000007.bmp
    srcLabel: K:\imageData\SMTdataset\SMTData\label6\00000017.json ----> dstLabel:K:\imageData\SMTdataset\SMTData\temp\label\00000008.json
    srcImage: K:\imageData\SMTdataset\SMTData\image\00000017.bmp ----> dstImage:K:\imageData\SMTdataset\SMTData\temp\image\00000008.bmp
    srcLabel: K:\imageData\SMTdataset\SMTData\label6\00000018.json ----> dstLabel:K:\imageData\SMTdataset\SMTData\temp\label\00000009.json
    srcImage: K:\imageData\SMTdataset\SMTData\image\00000018.bmp ----> dstImage:K:\imageData\SMTdataset\SMTData\temp\image\00000009.bmp

相关文章

  • 第一次语义分割实践

    一. 制作自己的数据集 (1)安装labelme,然后在终端运行labelme,选择图像: 使用 对图像目标区域...

  • labelme数据集合并

    简介:在做标注的时候常常会分不同时间不同批次来标注数据,最后合并的时候,有的json标签文件和image文件相对路...

  • SAS中的数据清洗

    1.数据合并 (1)利用set语句纵向合并 data数据集; set数据集1(数据集选项)数据集2(数据集选项...

  • labelme数据集制作成coco数据集

    1.labelme制作样本生成每个图像的json文件 2.将生成的json文件和原始图像jpg,放入同一个文件夹中...

  • 《利用python进行数据分析》第七章读书笔记:数据规整化

    数据规整划:清理、转换、合并、重塑 一、合并数据集 1.1 数据库风格的DataFrame合并&索引上的合并 顾名...

  • Pandas-高级操作知识点总结

    本文的Pandas知识点包括:1、合并数据集2、重塑和轴向旋转3、数据转换4、数据聚合 1、合并数据集 Panda...

  • labelme:图像数据标注

    labelme:图像数据标注 导读 深度学习第一步就是制作数据集,手动去标注一些数据。本文将介绍一个用于图像数据标...

  • Detectron2 maskRCNN训练自己的数据集

    摘要:使用Detectron2 来训练一个mask RCNN实例分割的模型。数据集用labelme标注,最后转为c...

  • R语言数据操作

    列合并 行合并 数据排序 两数据的交集,并集,补集 交集 并集 判断不同 判断是否相同 行名重复解决办法 处理一些...

  • 数据集合并和批次效应

    战拖打卡3今天的任务是多数据集的合并和批次效应的移除。 数据集合并 方法 rbind 行合并 cbind 列合并 ...

网友评论

      本文标题:labelme数据集合并

      本文链接:https://www.haomeiwen.com/subject/qslmiltx.html