Label Studio 数据标注完全指南:4步从本地部署到导出标注数据
【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio
Label Studio 是一个开源的多模态数据标注工具:图像、文本、音频、视频、时间序列共用一套 XML 配置完成标注,输出统一格式的结果 JSON。适合想为自己的模型项目快速搭一条数据生产链路的开发者和数据工程师。
选型边界:先看它适不适合你
| 适合 | 不适合 |
|---|---|
| 图像/文本/音频/视频/时间序列的标注任务生产 | 纯离线、命令行式的批处理工具(它是"服务 + 数据库"形态) |
| 需要标准化结果直接喂训练流水线(JSON、COCO 等格式导出) | 一次性几十条数据的临时标注(Excel 更快) |
| 想接模型做预标注、跑主动学习闭环 | 千人级多组织协作的企业管理(那是 LSE 企业版范畴) |
| 需要 Webhook 把标注事件推给下游系统 | 只想要托管 SaaS、不想自己运维 |
🚀 用 docker-compose 10分钟跑起来
生产形态就是仓库根目录的docker-compose.yml:nginx + app + PostgreSQL 三个容器一起拉起来,数据统一落在./mydata卷里。
git clone https://gitcode.com/GitHub_Trending/la/label-studio cd label-studio docker-compose up -d首次启动会构建镜像并自动执行数据库迁移,docker-compose ps看到三个服务都是 Up 后,浏览器打开localhost:8080,注册第一个账号即可(它是唯一的管理员)。compose 文件里端口映射是8080:8085(主应用)和8081:8086(nginx 管理端口),8080 被占用就改冒号前面的宿主端口。
其他两种方式各一句话:pip install label-studio后执行label-studio start,适合临时体验;源码开发模式则在仓库内pip install依赖后执行python label_studio/manage.py migrate和runserver,适合改代码的贡献者。
核心工作流走查:跑完一个图像目标检测任务
以"标注 500 张街景图里的车辆"为主线,全程四步。
第 1 步,建项目并贴入标注配置。项目页面创建项目,在 Label Interface 里贴入下面这段 XML(仓库里label_studio/annotation_templates/computer-vision/下每个子目录都是一个现成模板,比如object-detection-with-bounding-boxes):
<View> <Image name="image" value="$image" zoomControlValue="true"/> <RectangleLabels name="tag" toName="image"> <Label value="Car" background="green"/> <Label value="Bus" background="blue"/> <Label value="Pedestrian" background="red"/> </RectangleLabels> </View>这段 XML 就是标注界面的全部定义,解析逻辑在label_studio/core/label_config.py。改标签、换控件,改 XML 就行,不用写一行前端代码。
第 2 步,导入数据。在 Import 页粘贴一个 JSON 列表,每个对象就是一个任务,$image指向的键会渲染到<Image>上:
[ {"image": "http://localhost:8080/media/images/street_0001.jpg"}, {"image": "http://localhost:8080/media/images/street_0002.jpg"} ]数据量大时不要走粘贴,直接接对象存储:label_studio/io_storages/下实现了 S3、GCS、Azure Blob、本地文件系统四种 IO Storage,配置后任务自动从存储拉取,文件不落库。
第 3 步,标注。打开任务后画框、选标签、点 Save,结果以result数组(含type、value、origin)的形式挂在任务上。
第 4 步,导出。项目页 Export 选 JSON 或 COCO,result里的坐标就是归一化的 x/y 加宽高,可直接进目标检测训练脚本。团队模式下任务状态(未标注/已标注/被拒)由label_studio/fsm/里的状态机统一流转。
深潜 XML 标注配置:Label Studio 的灵魂
整套系统里你最常打交道的是 XML 标签,规则只有三条:数据标签用value="$键名"绑定任务字段,标注标签用toName指回数据标签,<View>里声明的控件就是界面。以文本 NER 为例,最小可用配置:
<View> <Text name="text" value="$text"/> <Labels name="labels" toName="text"> <Label value="PERSON"/> <Label value="ORG"/> </Labels> </View>常用控件按数据形态选:文本用Choices/Pairwise/Taxonomy做分类,用Labels做序列标注;音频用Audio+TimeSeriesLabels;视频用Video+ 逐帧矩形。控件全集在docs/source/tags/下有逐个文档,配置校验失败时编辑器会直接给出报错位置。
⚙️ 关键配置速查
| 配置项 | 作用 | 默认值 |
|---|---|---|
POSTGRE_HOST/POSTGRE_PORT | 数据库地址 | compose 中为db/5432 |
POSTGRE_NAME/POSTGRE_USER/POSTGRE_PASSWORD | 库名、用户、密码 | postgres/postgres/ 空 |
LOCAL_FILES_SERVING_ENABLED | 是否允许服务端回源本地文件 | False |
LOCAL_FILES_DOCUMENT_ROOT | 本地文件回源的根目录 | 未设置时自动探测 |
LABEL_STUDIO_HOST | 对外访问地址或子路径 | 空 |
ALLOWED_HOSTS | 允许访问的主机名 | * |
环境变量统一带LABEL_STUDIO_前缀写法,去掉前缀的历史写法(如LOCAL_FILES_DOCUMENT_ROOT)依然有效。
🔌 接入现有工作流
三件事点到为止:
API:全量 REST 接口(/api/projects/、/api/tasks/、/api/import/、/api/export/等),用 Token 认证,批量导入导出直接脚本化;官方 Python SDK 包名为label-studio-sdk。
ML 后端预标注:给一个能返回预测结果的模型服务 URL,在项目的 Machine Learning 里接入即可(后端模型定义见label_studio/ml/models.py,核心字段就是url、title、timeout)。预测会自动出现在标注框里,标注员只做修正,这是主动学习闭环的起点:
curl -X POST http://localhost:8080/api/ml/machines/ \ -H "Authorization: Token <你的token>" \ -d '{"url": "http://your-model-server:8000", "title": "vehicle-detector", "timeout": 15}'Webhook:事件定义在label_studio/webhooks/models.py,常用事件有TASKS_CREATED、ANNOTATION_CREATED、ANNOTATION_UPDATED、ANNOTATIONS_DELETED;可挂到组织级(全部项目)或项目级,支持最多 10 个自定义请求头,连续投递失败达到阈值会自动停用。典型用法:ANNOTATION_CREATED打到你的训练队列入口。
🛠️ 踩坑与排障
| 症状 | 原因 | 解法 |
|---|---|---|
| 8080 打不开页面 | 首次构建未完成,或宿主端口被占 | docker-compose ps确认三服务 Up;冲突时改8080:8085的前半部分 |
| 标注界面图片显示 404 | 数据里的图片 URL 是本地路径,服务端未开启本地回源 | 设LOCAL_FILES_SERVING_ENABLED=true,并把LOCAL_FILES_DOCUMENT_ROOT指到真实数据目录;推荐图片直接放对象存储 |
| 部署到服务器后浏览器访问失败 | 没设置对外访问地址 | 配置LABEL_STUDIO_HOST为公网/内网访问地址 |
| Webhook 过一阵就不推送了 | 连续失败达到阈值后被自动禁用 | 查接收端状态,修复后在项目设置里重新启用该 webhook |
| ML 后端连上后预测一直报错 | 模型服务不可达或timeout太小 | 确认服务地址在 app 容器内可访问,调大timeout字段 |
上手检查清单
docker-compose up -d三个服务全部 Up,localhost:8080 能登录- 建了一个真实项目,至少完成一条标注并保存
- 导出 JSON 并人工核对过
result字段的标签与坐标 - (可选)接入一个 ML 后端,标注界面能看到预标注
- (可选)配一个
ANNOTATION_CREATEDwebhook,本地能收到推送
部署只是开始,真正拉开差距的是标注规范、质检流程和预标注模型的迭代节奏——这三样才是 Label Studio 帮你省下的人工成本所在。
【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考