前面已经写过一篇了,但是那个程序存在问题:必须要手动输入你的标签,而且又受到依赖包的限制,很不方便。再加上现在我对数据有了新的需求,所以再总结一篇。
参考博文代码:目标检测前奏:labelme的矩形框标记好数据以后,转成COCO格式
根据自己需求,加进了别的功能:随机分json注释为训练集和验证集,对应其图像也分为训练集和验证集。
import os
import sys
import json
import cv2
import base64
import numpy as np
import glob
import PIL
from PIL import Image, ImageDraw
from sklearn.model_selection import train_test_split
import shutil
def base64_cv2(base64_str):
"""
base64转cv2
"""
imgString = base64.b64decode(base64_str)
# nparr = np.fromstring(imgString, np.uint8)
nparr = np.frombuffer(imgString, np.uint8) # fromstring有弃用命令警告,替换为frombuffer
image = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
return image
class MyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
elif isinstance(obj, np.floating):
return float(obj)
elif isinstance(obj, np.ndarray):
return obj.tolist()
else:
return super(MyEncoder, self).default(obj)
class labelme2coco(object):
def __init__(self,labelme_json,save_json_path):
"""
:param labelme_json: 所有labelme的json文件路径组成的列表
:param save_json_path: json保存位置