一 前言
本文将针对以下几个问题讲述关于label studio的使用
- 如何使用label studio 进行标注
- 如何通过API推送原始数据到lable studio
- 如何导出标注后的数据
- webhook
二 label studio 是什么?
Label Studio 是一款开源数据标记工具,在一个平台上支持多个项目、用户和数据类型。它允许您执行以下操作:
使用多种数据格式执行不同类型的标记。
将 Label Studio 与机器学习模型集成,为标签 (预标签) 提供预测,或执行持续主动学习。
label studio 项目列表界面:
项目下数据管理器界面:
标注中界面:
三 如何使用label studio 进行标注
安装label studio
label studio 支持多种安装方法 label studio install
使用 pip 安装
使用 Docker 安装
在 Ubuntu 上安装
从源代码安装
使用 Anaconda 安装
使用docker 安装的具体步骤如下:
docker run -it -p 8080:8080 -v ${PWD}/mydata:/label-studio/data heartexlabs/label-studio:latest label-studio --log-level DEBUG
${PWD}是一个环境变量,代表当前命令提示符(或终端)所在的目录。因此,${PWD}/mydata指的是当前目录下的mydata文件夹。
执行完上述命令后:打开http://localhost:8080即可看见label studio 的登录界面
添加用户
您还可以在启动 Label Studio 时从命令行创建帐户。
label-studio start --username <username> --password <password> [--user-token <token-at-least-5-chars>]
note!: --user-token参数是可选的。如果您未设置用户令牌,则会自动为用户生成一个。使用用户令牌进行 API 访问。令牌的最小长度为 5 个字符。
四 如何通过API推送原始数据到lable studio
项目设置工作流程
启动 Label Studio并创建帐户后,创建一个项目以开始标记您的数据。
创建项目
将数据导入Label Studio。
导入数据后,您就可以为您的项目设置标签界面。
创建项目
curl -H Content-Type:application/json -H 'Authorization: Token abc123' -X POST 'https://localhost:8080/api/projects' --data '{"title": "My project", "label_config": "<View></View>"}'
请求body例子:
{
"title": "My project",
"description": "My first project",
"label_config": "<View>[...]</View>",
"expert_instruction": "Label all cats",
"show_instruction": true,
"show_skip_button": true,
"enable_empty_annotation": true,
"show_annotation_history": true,
"reveal_preannotations_interactively": true,
"show_collab_predictions": true,
"maximum_annotations": 0,
"color": "#FFFFFF",
"control_weights": {...}
}
label_config: XML格式的标签配置
enable_empty_annotation:是否允许空标注
show_annotation_history: 显示历史标注
maximum_annotations: 最大注解数 (0表示不受限制)
将数据导入Label Studio。
curl -H 'Content-Type: application/json' -H 'Authorization: Token abc123' \
-X POST 'https://localhost:8080/api/projects/1/import' --data '[{"text": "xxx"}]'
其中的数据data 的数据的在下图中红框中的内容显示
设置标签界面 (即1中的XML格式的标签配置)
{
"header": "This is a different header for each task",
"textlabel": "This is the text that needs to be labeled"
}
使用以下标签配置引用数据字段:
<View>
<Header value="$header"></Header>
<Text name="text" value="$textlabel"></Text>
<Choices name="sentiment" toName="text" choice="single" showInLine="true">
<Choice value="Positive"/>
<Choice value="Negative"/>
<Choice value="Neutral"/>
</Choices>
</View>
然后你的标签界面看起来就像这样:
五 如何导出标注后的数据
对于项目,单击导出。
选择可用的导出格式。
单击“导出”即可导出数据。
导出的JSON格式的数据如下:
[
{
"id": 31,
"annotations": [
{
"id": 8,
"completed_by": 1,
"result": [
{
"original_width": 1600,
"original_height": 900,
"image_rotation": 0,
"value": {
"x": 10.2701005025126,
"y": 15.7453936348409,
"width": 16.9597989949749,
"height": 11.892797319933,
"rotation": 0
},
"id": "QRSAtN_XA_",
"from_name": "rect",
"to_name": "image",
"type": "rectangle",
"origin": "manual"
},
{
"original_width": 1600,
"original_height": 900,
"image_rotation": 0,
"value": {
"x": 10.2701005025126,
"y": 15.7453936348409,
"width": 16.9597989949749,
"height": 11.892797319933,
"rotation": 0,
"labels": [
"air-conditioner"
]
},
"id": "QRSAtN_XA_",
"from_name": "type",
"to_name": "image",
"type": "labels",
"origin": "manual"
},
{
"original_width": 1600,
"original_height": 900,
"image_rotation": 0,
"value": {
"x": 53.9886934673367,
"y": 21.608040201005,
"width": 31.3756281407035,
"height": 23.4505862646566,
"rotation": 0
},
"id": "IvfCkIbfKZ",
"from_name": "rect",
"to_name": "image",
"type": "rectangle",
"origin": "manual"
},
{
"original_width": 1600,
"original_height": 900,
"image_rotation": 0,
"value": {
"x": 53.9886934673367,
"y": 21.608040201005,
"width": 31.3756281407035,
"height": 23.4505862646566,
"rotation": 0,
"labels": [
"air-conditioner"
]
},
"id": "IvfCkIbfKZ",
"from_name": "type",
"to_name": "image",
"type": "labels",
"origin": "manual"
},
{
"value": {
"choices": [
"floor1"
]
},
"id": "0M1Bg1LgCg",
"from_name": "air-conditioner-type",
"to_name": "image",
"type": "choices",
"origin": "manual"
},
{
"value": {
"choices": [
"equal"
]
},
"id": "1rbWIjMbpR",
"from_name": "air-conditioner-status",
"to_name": "image",
"type": "choices",
"origin": "manual"
}
],
"was_cancelled": false,
"ground_truth": false,
"created_at": "2024-10-27T07:08:20.384519Z",
"updated_at": "2024-10-27T07:08:35.372961Z",
"draft_created_at": "2024-10-27T07:08:14.239905Z",
"lead_time": 24.211,
"prediction": {
},
"result_count": 0,
"unique_id": "b19908b8-8029-4498-87ce-960669d5571a",
"import_id": null,
"last_action": null,
"task": 31,
"project": 3,
"updated_by": 1,
"parent_prediction": null,
"parent_annotation": null,
"last_created_by": null
}
],
"drafts": [],
"predictions": [],
"data": {
"url": "http://127.0.0.1:9000/label/image1027/cjy10_20240512_826.jpeg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=bPPKcyDb6oxhKobrSIeG%2F20241027%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20241027T070746Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=3088bba7920c4303df41bf0a9a6bb9e2e0d7d28eddce0c83239504977d3bc915",
"bucket_name": "label",
"name": "image1027/cjy10_20240512_826.jpeg",
"my_task_item_id": 76,
"create_time": 1730012866546
},
"meta": {
},
"created_at": "2024-10-27T07:07:46.657107Z",
"updated_at": "2024-10-27T07:08:36.639772Z",
"inner_id": 1,
"total_annotations": 1,
"cancelled_annotations": 0,
"total_predictions": 0,
"comment_count": 0,
"unresolved_comment_count": 0,
"last_comment_updated_at": null,
"project": 3,
"updated_by": 1,
"comment_authors": []
}
]
六 webhook
通过添加webhook, 设置action 使label studio 可以向第三方平台发送消息, 即可更新标注信息。
参考文章
label studio
label studio API文档
希望这边文章对您有所帮助!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。