labelme2yolo.py代码
时间: 2024-05-01 12:16:08 浏览: 160
以下是一个简单的 `labelme2yolo.py` 转换脚本:
```python
import glob
import os
import json
def labelme2yolo(json_file, output_dir):
with open(json_file, 'r') as f:
data = json.load(f)
width = data['imageWidth']
height = data['imageHeight']
annotations = data['shapes']
txt_file = os.path.splitext(os.path.basename(json_file))[0] + '.txt'
with open(os.path.join(output_dir, txt_file), 'w') as f:
for ann in annotations:
label = ann['label']
x1 = ann['points'][0][0] / width
y1 = ann['points'][0][1] / height
x2 = ann['points'][1][0] / width
y2 = ann['points'][1][1] / height
cx = (x1 + x2) / 2
cy = (y1 + y2) / 2
w = x2 - x1
h = y2 - y1
f.write(f'{label} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}\n')
if __name__ == '__main__':
input_dir = 'path/to/labelme/annotations'
output_dir = 'path/to/yolo/annotations'
os.makedirs(output_dir, exist_ok=True)
json_files = glob.glob(os.path.join(input_dir, '*.json'))
for json_file in json_files:
labelme2yolo(json_file, output_dir)
```
使用方法:
1. 将 `labelme2yolo.py` 保存到本地。
2. 修改脚本中的 `input_dir` 和 `output_dir`,分别为 `labelme` 标注文件所在目录和转换成 `yolo` 格式标注文件存放目录。
3. 运行脚本即可完成转换。
注意事项:
1. 脚本假设每个 `json` 文件中只包含一个图片的标注信息。
2. `labelme` 中的标注框是通过两个点确定的,因此需要计算中心点坐标和宽高。
3. 脚本中的标注框坐标和尺寸都是相对于整个图片的,因此需要将它们除以图片的宽和高才能得到相对比例。