深入解析:如何通过Python脚本将LabelMe标注格式转换为YOLO格式并进行验证
在计算机视觉领域,标注格式的转换是一个经常会遇到的问题。不同的标注格式有不同的应用场景和优势,能够灵活地进行转换是非常重要的技能。在这篇文章中,我们将详细介绍如何通过Python脚本将LabelMe标注格式转换为YOLO格式,并通过图像可视化对转换结果进行验证。这不仅可以帮助我们更好地理解标注格式之间的关系,还能提升我们的数据处理能力。
LabelMe和YOLO标注格式简介
在开始具体的代码实现之前,我们先了解一下LabelMe和YOLO标注格式的基本概念。
LabelMe标注格式
LabelMe是一个开源的图像标注工具,广泛应用于计算机视觉的数据集标注。LabelMe使用JSON文件存储标注信息,每个JSON文件对应一张图像,文件中包含图像的元数据和标注信息。标注信息主要包括标注的形状、位置和类别等。一个典型的LabelMe标注文件的结构如下:
{
"version": "4.5.6",
"flags": {
},
"shapes": [
{
"label": "cat",
"points": [[10, 20], [30, 40]],
"group_id": null,
"shape_type": "rectangle",
"flags": {
}
}
],
"imagePath": "image1.jpg",
"imageData": null,
"imageHeight": 600,
"imageWidth": 800
}
YOLO标注格式
YOLO(You Only Look Once)是一种实时目标检测系统,因其高效的检测速度和较高的准确率而被广泛应用。YOLO标注格式使用文本文件存储标注信息,每个文件对应一张图像,文件中每一行代表一个目标的标注。每行的数据包括:
- 类别ID
- 中心点x坐标(相对于图像宽度的比例)
- 中心点y坐标(相对于图像高度的比例)
- 检测框宽度(相对于图像宽度的比例)
- 检测框高度(相对于图像高度的比例)
例如,一个YOLO标注文件的内容如下:
0 0.5 0.5 0.2 0.3
1 0.3 0.6 0.1 0.2
将LabelMe标注格式转换为YOLO标注格式
接下来,我们将介绍如何通过Python脚本将LabelMe标注格式转换为YOLO标注格式。我们会逐步解释脚本中的关键部分,并添加必要的异常处理,以确保代码的鲁棒性和容错性。
导入必要的库
首先,我们需要导入一些必要的库,包括json
、os
、PIL
(用于图像处理)和matplotlib
(用于图像可视化)。
import json
import os
from os.path import join
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib.patches as patches
定义转换函数
接下来,我们定义一个函数labelme_to_yolo
,用于将LabelMe标注格式转换为YOLO标注格式。
def labelme_to_yolo(labelme_dataset_path):
data_files_dir = join(labelme_dataset_path, 'DataFiles')
annotations_dir = join(labelme_dataset_path, 'Annotations')
yolo_labels_dir = join(labelme_dataset_path, 'YOLO_labels')
if not os.path.exists(yolo_labels_dir):
os.makedirs(yolo_labels_dir)
# 遍历Annotations文件夹中的所有JSON文件
for json_file in os.listdir(annotations_dir):
if json_file.endswith('.json'):
json_path = join(annotations_dir, json_file)
try:
with open(json_path, 'r') as file:
data = json.load(file)
# 获取对应的图片文件
image_file = data['imagePath']
image_path = join(data_files_dir, image_file)
# 读取图片尺寸
with Image.open(image_path) as img:
img_width, img_height = img.size
# 创建对应的YOLO格式标注文件
yolo_file_path = join(yolo_labels_dir, json_file.replace('.json', '.txt'))
with open(yolo_file_path
标签:Python,YOLO,json,path,格式,LabelMe,标注
From: https://blog.csdn.net/m0_57781768/article/details/139740556