一 前言
本文將針對以下幾個問題講述關於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文件
希望這邊文章對您有所幫助!