用labelme软件 批量制作数据集(并划分数据集训练集)

首先单张制作的方法:

1.首先激活labelme环境

conda activate label#我label安装到label环境中,label是环境的名称

2.找到labelme安装路径下的script,找到labelme_json_to_dataset.exe所在目录。

cd F:\Anacondapy3.5\envs\label\Scripts  

3.输入

python labelme_json_to_dataset.exe C:\Users\Terry\Desktop\1123123\\11011000001320000005-1-20201012133705-23892182849.json
C:\Users\Terry\Desktop\1123123\\11011000001320000005-1-20201012133705-23892182849.json

上面为文件的路径。不懂绝对路径相对路径请看我另一篇博文。
在这里插入图片描述

在这里插入图片描述
我们打开是没有yaml文件,只有4个文件。
解决无yaml问题:
https://blog.csdn.net/winter616/article/details/104426111/

批量制作:

使用脚本的方式
1创建一个py文件(我的是1234.py)
输入如下 :

import os
path = 'C:/Users/Terry/Desktop/shuichi/zhai\\'  # path是你存放json的路径
json_file = os.listdir(path)
for file in json_file:
    os.system("python F:/Anacondapy3.5/envs/label/Scripts/labelme_json_to_dataset.exe %s"%(path + file))

2.在命令行,打开 labelme环境

3打开1234.py所在目录。然后在命令行输入

python  1234.py

在这里插入图片描述

在这里插入图片描述

移动图片到指定文件夹

import os
import cv2 as cv
path="C:/Users/Terry/Desktop/shuichi/zhai"
if not os.path.exists(os.path.join(path,"IMAGE_picture")):
    os.mkdir(path+"./IMAGE_picture")#./IMAGE_picture如果是这样则会创建一个zhai文件夹下的mulu
    os.mkdir(path+"./LABEL_picture")

IMAGE_picture_path=os.path.join(path,"IMAGE_picture")
LABEL_picture_PATH=os.path.join(path,"LABEL_picture")
imgs_name = os.listdir(path)
print(imgs_name)
STR=0
for imgname in imgs_name:

    STR=str(STR)
    imgs_path=os.path.join(path,imgname)
    img_path = os.path.join(imgs_path, "img.png")
    label_path=os.path.join(imgs_path, "label.png")
    label=cv.imread(label_path)
    image=cv.imread(img_path)
    cv.imwrite(IMAGE_picture_path+"./image"+STR+".png",image)
    cv.imwrite(LABEL_picture_PATH + "./label" +STR +".png", label)
    STR = int(STR)
    STR=STR+1

"""
    print(label_path)
    src = cv.imread(label_path)
    cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE)
    cv.imshow('input_image', src)
    cv.waitKey(0)
"""

制作训练集数据集:
把生成的两个文件,放在一个文件夹里,我这里是13123
在这里插入图片描述

import codecs
import os
import random
import shutil
from PIL import Image

train_ratio = 4.0 / 5
all_file_dir = 'C:/Users/Terry/Desktop/13123'
class_list = [c for c in os.listdir(all_file_dir) if
              os.path.isdir(os.path.join(all_file_dir, c)) and not c.endswith('Set') and not c.startswith('.')]

# 用于返回文件夹的名称
class_list.sort()  # 排序
print(class_list)

##############################创建文件夹######################################
train_image_dir = os.path.join(all_file_dir, "trainImageSet")  # 这一行是路径的拼接trainImageSet放在all_file_dir路径下
if not os.path.exists(train_image_dir):  # 查看文件是否存在
    os.makedirs(train_image_dir)
train_image_img_dir = os.path.join(train_image_dir, "image")  # 这一行是路径的拼接trainImageSet放在all_file_dir路径下
train_image_label_dir = os.path.join(train_image_dir, "label")
if not (os.path.exists(train_image_img_dir) or os.path.exists(train_image_label_dir)):  # 查看文件是否存在
    os.makedirs(train_image_img_dir)
    os.makedirs(train_image_label_dir)

eval_image_dir = os.path.join(all_file_dir, "evalImageSet")
if not os.path.exists(eval_image_dir):
    os.makedirs(eval_image_dir)

eval_image_label_dir = os.path.join(eval_image_dir, "label")
eval_image_img_dir = os.path.join(eval_image_dir, "image")
if not (os.path.exists(eval_image_label_dir) or os.path.exists(eval_image_img_dir)):
    os.makedirs(eval_image_label_dir)
    os.makedirs(eval_image_img_dir)


#######创建train  ,eval文件分别在trainImageSet,evalImageSet目录下###########################
train_file = codecs.open(os.path.join(train_image_dir, "train.txt"), 'w')  # 打开文件,w为只读
eval_file = codecs.open(os.path.join(eval_image_dir, "eval.txt"), 'w')


################移动图片#####################################
image_path_pre = os.path.join(all_file_dir, class_list[0])#保存原图像的路径
image_list = [c for c in os.listdir(os.path.join(all_file_dir,class_list[0]))]##所有图片的名字
image_list.sort() ##排序
label_path_pre = os.path.join(all_file_dir, class_list[1])#保存原label的路径
label_list = [c for c in os.listdir(os.path.join(all_file_dir,class_list[1]))]##所有label的名字
label_list.sort() #排序
if (len(label_list)==len(image_list)):
    list = [(image_list[i]+" "+label_list[i]) for i in range(0,len(label_list))]

for file in list:
    B=file.split()[0]

    if random.uniform(0, 1) <= train_ratio:
        shutil.copyfile(os.path.join(image_path_pre, file.split()[0]),
                        os.path.join(train_image_img_dir, file.split()[0]))  # 复制一个文件到另一个文件中
        shutil.copyfile(os.path.join(label_path_pre, file.split()[1]),
                        os.path.join(train_image_label_dir, file.split()[1]))

        train_file.write("{0}  {1}\n".format(os.path.join("trainImageSet\image", file.split()[0]), os.path.join("trainImageSet\label", file.split()[1])))
    else:
        shutil.copyfile(os.path.join(image_path_pre, file.split()[0]),
                        os.path.join(eval_image_img_dir, file.split()[0]))

        shutil.copyfile(os.path.join(label_path_pre, file.split()[1]),
                        os.path.join(eval_image_label_dir, file.split()[1]))
        eval_file.write("{0}  {1}\n".format(os.path.join("evalImageSet\image", file.split()[0]), os.path.join("evalImageSet\label", file.split()[1])))


train_file.close()
eval_file.close()

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ALZFterry/article/details/109336054