写一个可以批量转化labelme标注后的json文件为yolo格式文件的程序
时间: 2023-12-14 20:37:30 浏览: 114
以下是一个可以实现将labelme标注后的json文件批量转化为yolo格式文件的Python程序:
```python
import json
import os
def convert(json_file_path, output_dir):
with open(json_file_path, 'r') as f:
data = json.load(f)
file_name = os.path.splitext(os.path.basename(json_file_path))[0] + '.txt'
output_file_path = os.path.join(output_dir, file_name)
with open(output_file_path, 'w') as f:
for shape in data['shapes']:
label = shape['label']
points = shape['points']
x1, y1 = points[0]
x2, y2 = points[1]
x_center = (x1 + x2) / 2
y_center = (y1 + y2) / 2
width = abs(x1 - x2)
height = abs(y1 - y2)
f.write(f"{label} {x_center} {y_center} {width} {height}\n")
if __name__ == '__main__':
json_dir = 'json_files'
output_dir = 'yolo_files'
if not os.path.exists(output_dir):
os.makedirs(output_dir)
for file_name in os.listdir(json_dir):
if file_name.endswith('.json'):
json_file_path = os.path.join(json_dir, file_name)
convert(json_file_path, output_dir)
```
以上程序将会把每一个json文件转化为一个同名的txt文件,存储在输出文件夹中。每一行txt文件表示一个标注框,内容格式为`<label> <x_center> <y_center> <width> <height>`,其中`<label>`表示标注对象的类别,`<x_center>`和`<y_center>`表示标注框中心点的坐标,`<width>`和`<height>`表示标注框的宽度和高度。
阅读全文