# 4-2 图像标注实战(Label Studio)
## 学习目标
1. 掌握 Label Studio 的安装、启动与界面使用
2. 学会配置三种图像标注类型(分类、目标检测、语义分割)
3. 独立完成边界框、多边形、关键点的标注
4. 理解 VOC / YOLO / COCO 三种导出格式的区别
---
## 1. Label Studio 简介
### 1.1 一句话定义
**Label Studio**:一个开源的、**多模态**数据标注平台,支持图像、文本、语音、视频等几乎所有数据类型的标注与团队协作。
### 1.2 为什么选它
我们这门课统一用 Label Studio 的原因:
| 需求 | Label Studio 对应能力 |
|------|---------------------|
| 多种数据类型 | 图像 / 文本 / 语音 / 视频 / 时序,一站式 |
| 不用写代码 | 通过 XML 标签可视化配置标注界面 |
| 团队协作 | 内置成员管理、角色权限、任务分配 |
| 格式灵活 | 内置 YOLO、COCO、VOC、JSON、CSV 导出 |
| 本地部署 | 数据不出学校,开源免费 |
```
传统方案(多工具切换):
图像 → LabelImg
文本 → Doccano
语音 → Audacity / ELAN
协作 → Excel 邮件
Label Studio 一站式:
图像 / 文本 / 语音 / 协作 → Label Studio
```
### 1.3 与其他工具的对比
| 工具 | 类型 | 适用场景 | 本课程 |
|------|------|---------|--------|
| **Label Studio** | 开源/多模态 | 课程学习 / 中小团队 / 综合项目 | 主选 |
| LabelImg | 开源/图像 | 极简目标检测 | 仅做对比 |
| CVAT | 开源/图像视频 | 大型分割、视频跟踪 | 了解 |
| Doccano | 开源/文本 | 简单文本分类 | 已弃用 |
| Scale AI | 商业 | 企业级标注 | 了解 |
---
## 2. Label Studio 安装与启动
### 2.1 环境要求
- Python 3.8 及以上
- 浏览器(Chrome / Edge / Firefox)
- 建议 8G 以上内存
### 2.2 pip 安装(推荐)
```bash
# 在命令行中执行
pip install label-studio
# 启动 Label Studio
label-studio
```
启动后命令行会显示:
```
[INFO] Label Studio is running at http://localhost:8080
[INFO] Open it in your browser to start labeling
```
### 2.3 第一次打开
1. 浏览器访问 `http://localhost:8080`
2. 第一次进入需要 **Sign Up** 注册管理员账号(用你的邮箱 + 密码)
3. 注册后自动登录到主界面
```
┌────────────────────────────────────────────────────────┐
│ Label Studio │
│ Sign Up │
├────────────────────────────────────────────────────────┤
│ │
│ Email: [___________________________] │
│ Username: [___________________________] │
│ Password: [___________________________] │
│ │
│ [ Create Account ] │
│ │
└────────────────────────────────────────────────────────┘
```
### 2.4 安装常见问题
| 问题 | 解决 |
|------|------|
| 端口 8080 被占用 | `label-studio --port 8001` |
| 启动报错找不到模块 | `pip install --upgrade label-studio` |
| 中文乱码 | 系统区域设置改为 UTF-8 |
| 浏览器无法打开 | 检查防火墙、放行端口 |
---
## 3. 主界面导览
登录后看到的主界面:
```
┌──────────────────────────────────────────────────────────────┐
│ [Label Studio] Projects Members Settings [用户头像] │
├──────────────────────────────────────────────────────────────┤
│ │
│ My Projects │
│ │
│ ┌────────────────────────────────────────────────┐ │
│ │ + Create Project │ │
│ └────────────────────────────────────────────────┘ │
│ │
│ 没有任何项目,点上面按钮开始 │
│ │
└──────────────────────────────────────────────────────────────┘
```
**主要功能区**:
- **Projects**:项目列表,每个项目对应一个标注任务
- **Members**:成员管理(管理员可见)
- **Settings**:个人设置
---
## 4. 创建第一个项目:图像分类
### 4.1 任务说明
**任务**:对 10 张动物图片进行分类,类别有:cat / dog / bird
### 4.2 创建项目
1. 点击 `+ Create Project`
2. 填写:
- **Project Name**:`animal_classification`
- **Description**:动物图片三分类
3. 点击 `Save`
### 4.3 配置标注界面
进入项目后,先点 `Settings` → `Labeling Interface` → `Code`:
```xml
```
**逐行解释**:
```
← 整个标注界面的根标签
← 显示图像($image 是任务数据里的字段名)
← 单选/多选控件
← 一个选项
```
**关键参数**:
- `toName="image"`:告诉 Label Studio,这个控件是对上面 `Image` 控件的结果
- `choice="single"`:单选(可选 `single-radio`、`multiple`)
保存后点 `Label All Tasks` 就能看到标注界面。
### 4.4 导入数据
在项目页 → `Settings` → `Data Import`:
**方式 A:上传本地文件**
```
1. 准备文件夹
images/
├── cat_001.jpg
├── cat_002.jpg
├── dog_001.jpg
└── bird_001.jpg
2. 拖拽到上传区域
或点击 Upload Files 选中文件夹
```
**方式 B:上传 CSV / JSONL(推荐,标签稳定)**
`tasks.csv`:
```csv
image
images/cat_001.jpg
images/cat_002.jpg
images/dog_001.jpg
images/bird_001.jpg
```
**方式 C:粘贴 URL**
```csv
image
https://example.com/cat_001.jpg
https://example.com/dog_001.jpg
```
上传完后点 `Save` → 任务列表里就会看到每一张图对应一行任务。
### 4.5 开始标注
1. 点击 `Label All Tasks`
2. 进入标注界面:
- 上面是图片
- 下面是三个单选按钮
3. 选中正确类别
4. 点击右下角 `Submit` 进入下一张
5. 全部完成后回到项目页,可以看到完成进度
```
┌──────────────────────────────────────────────────┐
│ Project: animal_classification │
├──────────────────────────────────────────────────┤
│ Tasks: 10 total / 7 done / 3 skipped │
│ Progress: ████████████░░░░░░ 70% │
└──────────────────────────────────────────────────┘
```
### 4.6 导出数据
项目页 → `Export`:
- 格式选 `JSON`
- 下载得到 `project-1-at-2024-05-20.json`
导出内容示例:
```json
[
{
"id": 1,
"data": {"image": "images/cat_001.jpg"},
"annotations": [{
"result": [{
"from_name": "label",
"to_name": "image",
"type": "choices",
"value": {"choices": ["cat"]}
}]
}]
}
]
```
---
## 5. 创建第二个项目:目标检测(边界框)
### 5.1 任务说明
**任务**:对 10 张街景图进行目标检测,标出每张图中的 `person`、`car`、`bicycle`
### 5.2 项目配置 XML
```xml
```
**新增标签**:
- ``:矩形框 + 标签(Label Studio 专门用于目标检测)
- `