yolov8标注labelimg
时间: 2025-05-11 12:23:35 浏览: 25
### 如何使用 LabelImg 进行 YOLOv8 数据集的标注
LabelImg 是一款广泛使用的图像标注工具,支持多种格式导出标注文件。对于 YOLOv8 的数据集准备,可以通过以下方法完成标注工作。
#### 安装 LabelImg 工具
首先需要安装 LabelImg 工具。推荐通过 `pip` 或者源码编译的方式进行安装。以下是 pip 安装命令:
```bash
pip install labelimg
```
如果希望通过 Anaconda 环境管理依赖项,则可以按照以下方式进行安装:
```bash
conda install pyqt=5
conda install -c anaconda lxml
pip install labelimg
```
启动工具时运行以下命令即可打开图形界面:
```bash
labelimg
```
---
#### 使用 LabelImg 创建标注
1. **加载图片**
打开 LabelImg 后,点击左上角菜单栏中的 “Open Dir”,选择包含待标注图片的目录;再点击 “Change Save Dir” 设置保存标注文件的位置[^2]。
2. **设置标签列表**
在顶部菜单中找到并点击 “Pref”(Preferences),弹出配置窗口后勾选 “Create PASCAL VOC .xml”。接着切换到 “Labels” 部分,手动输入目标类别的名称,或者导入预先写好的 `.names` 文件作为标签集合[^3]。
3. **绘制边界框**
对每一张图片逐一操作:先用鼠标拖拽画矩形区域覆盖感兴趣的目标对象,随后从下拉菜单里挑选对应的类别名赋予该 bounding box。完成后按快捷键 Ctrl+S 存储当前进度至本地磁盘为 XML 格式的描述文档。
4. **转换成 YOLO 格式**
默认情况下,LabelImg 输出的是 Pascal VOC 格式的 xml 文件。为了适配 YOLOv8 输入需求,需借助额外脚本来实现批量转化任务。下面给出一段 Python 脚本用于自动化此过程:
```python
import os
from xml.etree import ElementTree as ET
def convert(size, box):
dw = 1./size[0]
dh = 1./size[1]
x = (box[0] + box[1])/2.0
y = (box[2] + box[3])/2.0
w = abs(box[1] - box[0])
h = abs(box[3] - box[2])
x = round(x*dw, 6)
w = round(w*dw, 6)
y = round(y*dh, 6)
h = round(h*dh, 6)
return (x,y,w,h)
def main():
classes = ["your_class_name"] # 替换为你自己的分类名字
for file in os.listdir("./Annotations"):
if not file.endswith(".xml"): continue
tree = ET.parse(f"./Annotations/{file}")
root = tree.getroot()
size = root.find('size')
width = int(size.find('width').text)
height = int(size.find('height').text)
filename = f"{os.path.splitext(file)[0]}.txt"
with open(os.path.join("labels", filename), 'w') as out_file:
for obj in root.iter('object'):
cls = obj.find('name').text
if cls not in classes: continue
bndbox = obj.find('bndbox')
bbox = (
float(bndbox.find('xmin').text),
float(bndbox.find('xmax').text),
float(bndbox.find('ymin').text),
float(bndbox.find('ymax').text))
bb = convert((width,height),bbox)
class_id = classes.index(cls)
out_str = f"{class_id} {bb[0]} {bb[1]} {bb[2]} {bb[3]}"
out_file.write(out_str+'\n')
if __name__ == "__main__":
main()
```
上述代码会读取所有的 XML 文件并将它们转化为 YOLO 文本格式存储于指定路径下的 labels 文件夹之中。
---
#### 注意事项
- 如果仅有一个类别,可以在偏好设置中启用默认标签选项来减少重复劳动量。
- 记得调整上面提到的 `classes` 列表以匹配实际项目里的物体种类定义情况。
- 当前示例假设所有原始标注位于 Annotations 目录而最终结果应放置在 labels 下面,请依据个人环境做相应修改。
阅读全文
相关推荐


















