简介
在计算机视觉和 NLP 项目中,数据标注往往是最耗时的一环。Label Studio 是目前最流行的开源数据标注工具之一,它界面友好、配置灵活,支持图像、文本、音频等多种数据格式。
本文将介绍如何使用 Docker 部署 Label Studio,涵盖从个人快速测试到基于数据库的生产环境两种方案,并教你如何直接读取本地硬盘上的大量图片。
方案一:快速启动(适合个人测试)
如果你只是想快速体验一下,或者标注的数据量很小(几百张图片),直接使用 Docker 命令行启动是最简单的方式。
1. 启动命令
确保你已安装 Docker,然后在终端运行:
docker run -it -p 8080:8080 \
-v $(pwd)/mydata:/label-studio/data \
heartexlabs/label-studio:latest
2. 参数解析
-p 8080:8080: 将容器的 8080 端口映射到电脑的 8080 端口。-v $(pwd)/mydata:/label-studio/data: (非常重要) 数据持久化挂载。- Label Studio 默认将数据存储在容器内的 SQLite 数据库中。
- 如果不加这一行,当你关闭或重启容器时,所有的账号信息和标注数据都会丢失。
- 加上这一行后,所有数据会保存在你当前目录下的
mydata文件夹里。
启动后,访问浏览器 http://localhost:8080 注册账号即可使用。
方案二:生产环境部署(Docker Compose + PostgreSQL)
如果你是团队协作,或者数据量达到数万级别,Label Studio 默认的 SQLite 数据库会变卡甚至崩溃。强烈建议使用 PostgreSQL 作为后端数据库。
我们需要使用 Docker Compose 来编排 Label Studio 和 PostgreSQL 两个容器。
1. 创建 docker-compose.yml
新建一个文件夹,在其中创建文件 docker-compose.yml,填入以下内容:
version: "3.9"
services:
app:
image: heartexlabs/label-studio:latest
restart: always
ports:
- "8080:8080"
environment:
- DJANGO_DB=default
- POSTGRES_NAME=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=labelstudio_secret # 建议修改此密码
- POSTGRES_HOST=db
- POSTGRES_PORT=5432
- LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK=true # 生产环境建议开启,禁止陌生人随意注册
volumes:
- ./ls_data:/label-studio/data
depends_on:
- db
db:
image: postgres:13-alpine
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=labelstudio_secret # 必须与上面保持一致
- POSTGRES_DB=postgres
volumes:
- ./postgres_data:/var/lib/postgresql/data
2. 启动服务
在包含该文件的目录下运行:
docker-compose up -d
这样你就拥有了一个高性能、数据独立存储的标注平台。
进阶技巧:无需上传,直接读取本地图片
在实际项目中,图片集可能高达几百 GB。如果通过浏览器一张张上传到 Label Studio 数据库,不仅慢,还会导致数据库体积爆炸。
我们可以通过配置,让 Label Studio 直接读取服务器/本地硬盘上的文件夹, 或者七牛等对象存储。
1. 修改启动命令
我们需要给容器添加一个环境变量 LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true,并将图片目录挂载进去。
如果是 Docker Run 方式:
docker run -it -p 8080:8080 \
-v $(pwd)/mydata:/label-studio/data \
-v /path/to/your/images:/label-studio/files \
-e LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true \
heartexlabs/label-studio:latest
(注意将 /path/to/your/images 替换为你电脑上真实的图片文件夹路径)
如果是 Docker Compose 方式:
在 docker-compose.yml 的 app 服务下添加:
environment:
- LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true
# ... 其他变量保持不变
volumes:
- ./ls_data:/label-studio/data
- /path/to/your/images:/label-studio/files # 挂载图片目录
2. 在网页端配置连接
- 启动服务并登录 Label Studio。
- 进入项目,点击 Settings -> Cloud Storage。
- 点击 Add Source Storage。
- Storage Type 选择 Local files。
- Absolute local path 填入容器内的路径(例如
/label-studio/files)。 - 开启 Treat every bucket object as a source file。
- 点击 Sync。
现在,Label Studio 就会直接索引你硬盘上的图片,而不需要物理复制文件。