label-studio的使用教程(導入本地路徑)

文章目錄

      • 1. 準備環境
      • 2. 腳本啟動
        • 2.1 Windows
        • 2.2 Linux
      • 3. 安裝label-studio機器學習后端
        • 3.1 pip安裝(推薦)
        • 3.2 GitHub倉庫安裝
      • 4. 后端配置
        • 4.1 yolo環境
        • 4.2 引入后端模型
        • 4.3 修改腳本
        • 4.4 啟動后端
      • 5. 標注工程
        • 5.1 創建工程
        • 5.2 配置圖片路徑
        • 5.3 配置工程類型標簽
        • 5.4 配置模型
        • 5.5 標注
        • 5.6 批注
        • 5.7 導出
      • 6. 重命名文件

1. 準備環境

首先創建一個虛擬環境:

conda create -n label_studio python=3.12
conda activate label_studio

然后使用pip安裝label-studio

pip install label-studio

然后可以打開label-studio了:

label-studio start

終端中應該能看到如下的內容:

在這里插入圖片描述

并且會自動打開瀏覽器,并進入到如下的頁面(如果沒有自動打開,可以自己打開瀏覽器,然后輸入http://localhost:8080進行訪問):

在這里插入圖片描述

2. 腳本啟動

為了每次都能夠一鍵啟動,而不是在終端內輸入很多條命令,可以將相關的命令封裝成腳本。

2.1 Windows

新建一個bat腳本,比如命名為load_label_studio.bat,然后復制一下的一下的內容,并且,必須確保這個腳本中的編碼是GB2312!否則將無法啟動。

@echo off:: 打印信息
echo 開始啟動 label-studio :: 配置區域
set CONDA_ENV=label_studio
set ROOT_DIR=C:\\dl\\datasets:: 激活conda環境
echo.
echo [1/3] 正在激活 Conda 環境 %CONDA_ENV%
call conda activate %CONDA_ENV%:: 檢查激活是否成功
if %errorlevel% neq 0 (echo.echo 激活 Conda 環境 %CONDA_ENV% 失敗!echo 請檢查是否沒有創建這個環境pauseexit /b
):: 配置環境變量
echo.
echo [2/3] 配置 label-studio 的環境變量
set LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true
set LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=%ROOT_DIR%
set DATA_UPLOAD_MAX_NUMBER_FILES=2000:: 啟動 label-studio
echo.
echo [3/3] 啟動 label-studio
label-studio start:: 檢查是否成功啟動
if %errorlevel% neq 0 (echo.echo 啟動 label-studio 失敗!echo 請檢查安裝情況,或者是否調用錯誤!
) else (echo.echo label-studio 運行成功echo 可通過地址直接訪問: http://localhost:8080
):: 保持命令行窗口打開
pause

腳本的一些說明:

  1. 腳本中默認你已經在系統設置中配置了conda的環境變量!
  2. 配置區域中的CONDA_ENV是使用label-studio的python環境
  3. 配置區域中的ROOT_DIR是本地文件的默認文件夾
  4. 這里啟動的label-studio都是按照默認參數進行啟動,如果需要綁定某個ip,指定某個端口,需要修改一下label-studio start
2.2 Linux

暫無待補充

3. 安裝label-studio機器學習后端

有兩種安裝方法,推薦使用第一種。

3.1 pip安裝(推薦)
pip install label-studio-ml
3.2 GitHub倉庫安裝

在合適的目錄下打開終端:

conda activate label_studio
git clone https://github.com/heartexlabs/label-studio-ml-backend 
cd label-studio-ml-backend 
pip install -U -e .

但是有可能會出現如下的報錯:

Installing collected packages: label-studio-sdk, label-studio-ml━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0/2 [label-studio-sdk]  DEPRECATION: Legacy editable install of label-studio-ml==2.0.1.dev0 from file:///E:/Code/VsCode/python/label-studio-ml-backend-master (setup.py develop) is deprecated. pip 25.3 will enforce this behaviour change. A possible replacement is to add a pyproject.toml or enable --use-pep517, and use setuptools >= 64. If the resulting installation is not behaving as expected, try using --config-settings editable_mode=compat. Please consult the setuptools documentation for more information. Discussion can be found at https://github.com/pypa/pip/issues/11457Running setup.py develop for label-studio-ml
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
label-studio 1.18.0 requires label-studio-sdk==1.0.12, but you have label-studio-sdk 1.0.18.dev0 which is incompatible.

這里我們只需要關注這里要求什么版本的label-studio-sdk,然后再使用pip命令裝一下就可以了:

pip install label-studio-sdk==1.0.12

當然,為了使用自己的pt模型,還是需要安裝torchonnx等這些,這里以cpu的為例:

conda activate label_studio
pip3 install torch torchvision torchaudio  # https://pytorch.org/get-started/locally/ 直接參考官網的安裝方法pip install onnx

4. 后端配置

這里我們需要使用自己已經訓練好的yolo模型,所以還需要額外的配置。

4.1 yolo環境

首先需要安裝yolo的環境,需要安裝ultralytics

conda activate label_studio
pip install ultralytics 
4.2 引入后端模型

首先在合適的位置創建一個目錄,專門用來存放backend的相關東西,比如c:\dl\label_studio_backend,那么在這里打開終端,開始進行操作。

conda activate label_studio
label-studio-ml create ml_backend_test1

在這里插入圖片描述

發現這里就創建了一個ml_backend_test1的目錄,然后我們需要進入這個目錄下進行文件的修改。

在這里插入圖片描述

將我們的訓練好的模型best.pt放到目錄中,然后需要對這個model.py進行修改。

4.3 修改腳本

對于model.py進行修改,參考:

from typing import List, Dict, Optional
from label_studio_ml.model import LabelStudioMLBase
from label_studio_ml.response import ModelResponse################## 修改 ##################
# 添加需要的函數
from label_studio_ml.utils import get_image_local_path# 添加yolo需要的依賴
from ultralytics import YOLO# 添加額外處理需要的依賴
import re
import os
from urllib.parse import unquote
from PIL import Imagedef custom_get_local_path(url):"""自定義路徑解析函數,兼容Windows特殊格式"""# 1. 嘗試官方方法try:from label_studio_ml.utils import get_image_local_pathreturn get_image_local_path(url)except:pass# 2. 手動解析本地文件URLif url.startswith('/data/local-files'):# 提取相對路徑部分match = re.search(r'd=(.*?)(?:&|$)', url)if match:relative_path = unquote(match.group(1))base_dir = os.environ.get('LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT', 'c:\\dl\\datasets')# 處理Windows路徑分隔符relative_path = relative_path.replace('/', '\\')return os.path.join(base_dir, relative_path)# 3. 處理上傳文件路徑if url.startswith('/data/upload'):relative_path = url.replace('/data/upload/', '').lstrip('/')base_dir = os.environ.get('LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT', 'c:\\dl\\datasets')return os.path.join(base_dir, relative_path.replace('/', '\\'))return url  # 退回原始URLclass NewModel(LabelStudioMLBase):"""Custom ML Backend model"""def setup(self):"""Configure any parameters of your model here"""self.set("model_version", "0.0.1")################## 修改 ################### 加載我們自己訓練好的模型# 注意這里的路徑,是要帶上文件夾目錄的,因為后續python腳本執行的環境將在更上一層目錄上!self._model = YOLO('./ml_backend_test1/best.pt')# 使用模型中的標簽self._labels = self._model.namesdef predict(self,tasks: List[Dict],context: Optional[Dict] = None,**kwargs) -> ModelResponse:""" Write your inference logic here:param tasks: [Label Studio tasks in JSON format](https://labelstud.io/guide/task_format.html):param context: [Label Studio context in JSON format](https://labelstud.io/guide/ml_create#Implement-prediction-logic):return model_responseModelResponse(predictions=predictions) withpredictions: [Predictions array in JSON format](https://labelstud.io/guide/export.html#Label-Studio-JSON-format-of-annotated-tasks)"""print(f'''\Run prediction on {tasks}Received context: {context}Project ID: {self.project_id}Label config: {self.label_config}Parsed JSON Label config: {self.parsed_label_config}Extra params: {self.extra_params}''')################## 修改 ##################results = []for task in tasks:# 獲取圖片的本地路徑image_path = custom_get_local_path(task['data']['image'])image = Image.open(image_path)img_width, img_height = image.size# 使用YOLO進行推理pred = self._model(image)predictions = []# 解析檢測結果for box in pred[0].boxes:x_min, y_min, x_max, y_max = map(float, box.xyxy[0].tolist())label = self._labels[int(box.cls.item())]predictions.append({"from_name": "label","to_name": "image","type": "rectanglelabels","value": {"x": x_min / img_width * 100,"y": y_min / img_height * 100,"width": (x_max - x_min) / img_width * 100,"height": (y_max - y_min) / img_height * 100,"rectanglelabels": [label]},"score": float(box.conf.item())})results.append({"result": predictions})return results# return ModelResponse(predictions=[])def fit(self, event, data, **kwargs):"""This method is called each time an annotation is created or updatedYou can run your logic here to update the model and persist it to the cacheIt is not recommended to perform long-running operations here, as it will block the main threadInstead, consider running a separate process or a thread (like RQ worker) to perform the training:param event: event type can be ('ANNOTATION_CREATED', 'ANNOTATION_UPDATED', 'START_TRAINING'):param data: the payload received from the event (check [Webhook event reference](https://labelstud.io/guide/webhook_reference.html))"""# use cache to retrieve the data from the previous fit() runsold_data = self.get('my_data')old_model_version = self.get('model_version')print(f'Old data: {old_data}')print(f'Old model version: {old_model_version}')# store new data to the cacheself.set('my_data', 'my_new_data_value')self.set('model_version', 'my_new_model_version')print(f'New data: {self.get("my_data")}')print(f'New model version: {self.get("model_version")}')print('fit() completed successfully.')

注意

這個腳本里面寫了讀取環境變量:

base_dir = os.environ.get('LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT', 'c:\\dl\\datasets')

所以,要么將這個環境變量直接寫入系統,要么就記得對應修改路徑……

4.4 啟動后端

完成上述工作之后,就可以啟動后端了。

還是需要進入到前面創建的backend的目錄中去,比如本文中的c:\dl\label_studio_backend,然后在這里打開終端,然后操作:

conda activate label_studio
label-studio-ml start ml_backend_test1 -p 9090

啟動成功的畫面如下:

在這里插入圖片描述

后面就可以在label-studio上創建工程進行標注了。

5. 標注工程

初始時候沒有賬號,可以在上述的頁面下創建一個賬號,就是需要一個郵箱和一個密碼,也不需要做什么驗證什么的,創建成功后會自動登錄,然后就能進入到頁面了。

在這里插入圖片描述

如果需要進行一些賬號上的配置,可以點擊右上角的頭像,然后進行配置。

5.1 創建工程

這里直接點擊中間的Create Project來創建一個標注的工程,打開后開始填寫:

在這里插入圖片描述

其余的配置暫時不用管,后續再進入到工程中進行配置。

創建完成之后我們就可以點擊進入到test1的工程中去了,顯示如下的畫面:

在這里插入圖片描述

5.2 配置圖片路徑

上述圖片中,點擊右上角的Settings進入到如下的配置頁面:

在這里插入圖片描述

首先我們配置本地的圖片位置,左側的tab頁選擇Cloud Storage,然后進入到Add Source Storage

在這里插入圖片描述

按照如下的示例進行配置:

在這里插入圖片描述

說明:

  1. Storage Type要選擇 Local files
  2. Storage Title要和后面的path對應的名字要相同
  3. Absolute local path必須是一個絕對路徑,并且要到圖片的根目錄上,并且要和前面腳本中配置set ROOT_DIR=C:\\dl\\datasets對應上,必須是這個目錄下的子目錄
  4. File Filter Regex來進行正則化過濾,有啥類型就按照正則化的方式寫好
  5. 必須打開Treat every bucket object as a source file
  6. 然后點擊Check Connection來驗證一下填寫有沒有問題,如果出現了Successfully connected!就說明可以了,然后點擊Add Storage來完成即可

然后需要在如下的頁面上點擊Sync Storage ,然后看到Status的狀態是Conpleted,如果狀態不是這個,那么一定是有什么步驟錯了,需要再檢查一下!

在這里插入圖片描述

5.3 配置工程類型標簽

然后來配置工程的類型和標簽。

進入到Labeling Interface中的Browser Templates

在這里插入圖片描述

進入之后選擇Object Detection with Boarding Boxes

在這里插入圖片描述

通過在紅色框中填寫對應的標簽,然后點擊下方的Add,就可以添加一個label了,全部填寫完成之后,點擊下方的Save即可。

在這里插入圖片描述

5.4 配置模型

點擊左側tab的Model進行模型的相關配置。

在這里插入圖片描述

然后填寫:

在這里插入圖片描述

  1. 這里的Name隨便寫,隨便取個名字
  2. Backend URL就是填寫前面我們4.4 啟動后端最終打印的地址,如果你的后端和label-studio是放在不同的機器上,就得注意ip了!
  3. 然后點擊Validate and Save就可以完成。如果有報錯,需要檢查一下model.py是不是寫錯了……

然后就可以看到:

在這里插入圖片描述

5.5 標注

回到工程的首頁,我們現在就可以看到類似如下的顯示了:

在這里插入圖片描述

這個時候我們選擇需要進行標注的文件,可以一個個勾選自己需要進行標注的文件,也可以直接全選,然后可以看到你現在有多少個任務了。

在這里插入圖片描述

然后我們就可以點擊點擊進行處理了。

在這里插入圖片描述

如果運行成功,則可以看到:

在這里插入圖片描述

5.6 批注

導出之前必須Annotate才行,所以隨便找一行,然后點擊對應Annotated by列的空白處。(不得不說,真的是神奇的操作邏輯,非常的反人類反直覺)

或者,直接點擊上面的Label All Tasks也能進入批注頁面,然后兩個稍微有一些不同。

在這里插入圖片描述

然后得到如下的畫面:

在這里插入圖片描述

可以直接點擊右下角的Submit直接確認批注當前圖片。如果要修改,點擊圖片中的框圖進行操作。

非常難用的是 無法全選然后Submit,非常反人類反直覺

5.7 導出

導出之前必須確認你想要導出的圖片已經被標注了!!!!否則導出的文件都是空的……

點擊右上角的Export進行導出。

在這里插入圖片描述

然后選擇需要的格式:

在這里插入圖片描述

最后到最下方,進行導出:

在這里插入圖片描述

選擇只導出標簽的那個,會很快,如果圖片和標簽一起導出,等待的時間還是漫長的,尤其是數據越多越長……

導出之后的圖片名稱還會被修改……類似:

在這里插入圖片描述

6. 重命名文件

像我這樣特別方案改的亂七八糟的名字,就直接使用一個腳本全部重命名了。

from pathlib import Path
import shutil# 指定圖片目錄
img_path = Path("image/")
lab_old = Path("old/")
lab_path = Path("label")# 定義支持的圖片擴展名(可擴展)
image_extensions = {".jpg", ".jpeg", ".png", ".bmp", ".gif"}# 計數器,用于生成新文件名
counter = 10000001# 遍歷目錄下的所有文件(不遞歸子目錄)
for file in img_path.iterdir():if file.is_file() and file.suffix.lower() in image_extensions:# 構建新文件名new_file = img_path / f"image_{counter:08d}{file.suffix}"old_label = lab_old / f"{file.stem}.txt"new_label = lab_path / f"image_{counter:08d}.txt"# 防止文件已存在if new_file.exists():print(f"?? 跳過:文件 {new_file.name} 已存在")continue# 重命名文件try:file.rename(new_file)shutil.copy(old_label, new_label)print(f"? 重命名:{file.name} -> {new_file.name}")counter += 1except Exception as e:print(f"? 重命名失敗:{file.name} -> {new_file.name},錯誤:{e}")

調整一下目錄的名字即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86580.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86580.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql為什么一個表中不能同時存在兩個字段自增

背景。設置sort自增。會引發錯誤 通常自增字段都是用于表示數據的唯一性。數據庫限制。需要自定義排序字段大小。

牛客round95D

原題鏈接:D-小紅的區間修改(一)_牛客周賽 Round 95 題目背景: 初始擁有一個長度10^100元素全為0的數組,進行q查詢,每次查詢如果區間內的元素都為0就將區間變為首項為 1、公差為 1 的等差數列;否…

visual studio 2022更改主題為深色

visual studio 2022更改主題為深色 點擊visual studio 上方的 工具-> 選項 在選項窗口中,選擇 環境 -> 常規 ,將其中的顏色主題改成深色 點擊確定,更改完成

實踐篇:利用ragas在自己RAG上實現LLM評估②

文章目錄 使用ragas做評估在自己的數據集上評估完整代碼代碼講解1. RAG系統構建核心組件初始化文檔處理流程 2. 評估數據集構建3. RAGAS評估實現1. 評估數據集創建2. 評估器配置3. 執行評估 本系列閱讀: 理論篇:RAG評估指標,檢索指標與生成指…

微軟PowerBI考試 PL300-在 Power BI 中清理、轉換和加載數據

微軟PowerBI考試 PL300-在 Power BI 中清理、轉換和加載數據 Power Query 具有大量專門幫助您清理和準備數據以供分析的功能。 您將了解如何簡化復雜模型、更改數據類型、重命名對象和透視數據。 您還將了解如何分析列,以便知曉哪些列包含有價值的數據,…

PostgreSQL 安裝與配置全指南(適用于 Windows、macOS 與主流 Linux 發行版)

PostgreSQL 是一個功能強大、開源、穩定的對象關系數據庫系統,廣泛用于后端開發、數據處理與分布式架構中。本指南將手把手教你如何在 Windows、macOS 以及主流 Linux 發行版 上安裝 PostgreSQL,并附上安裝驗證命令與基礎配置方法。 一、Windows 安裝與配…

WordPress博客文章SEO的優化技巧

在數字時代,博客不僅用于表達觀點,也能提升品牌影響力并吸引潛在客戶。許多服務器提供商(如 Hostease)支持 WordPress 一鍵安裝功能,方便新手快速完成安裝,專注于內容創作和 SEO 優化。然而,寫出…

Python:操作 Excel 折疊

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 Python 操作 Excel 系列 讀取單元格數據按行寫入設置行高和列寬自動調整行高和列寬水平…

雨季智慧交通:從車輛盲區到客流統計的算法全覆蓋

雨季智慧交通中的視覺分析技術應用 一、背景:雨季交通的復雜挑戰 雨季是城市交通管理的關鍵考驗期。以濟南為例,強對流天氣伴隨的短時強降水、雷雨大風及冰雹,不僅導致道路積水、能見度驟降,還加劇了大型車輛(如渣土…

安全生產管理是什么?安全生產管理系統都有哪些核心功能?

隨著法律法規的日益嚴格和公眾對安全意識的提升,企業面臨的安全生產壓力也越來越大。無論是大型企業還是中小型企業,安全生產管理不僅關系到企業的生存與發展,更直接關系到員工的生命安全和企業的社會形象。因此,理解并實施有效的…

【PyCharm必會基礎】正確移除解釋器及虛擬環境(以 Poetry 為例 )

#工作記錄 【PyCharm使用基礎】 當遇到虛擬環境難以修復的場景,我們需要刪除當前解釋器和虛擬環境然后再重新創建虛擬環境,以下是在PyCharm中正確移除的步驟。 一、進入解釋器設置 在 PyCharm 界面右下角,點擊Poetry (suna0),選…

day028-Shell自動化編程-判斷進階

文章目錄 1. 特殊變量補充2. 變量擴展-變量子串2.1 獲取變量字符的長度2.2 給變量設置默認值 3. 命令3.1 dirname3.2 basename3.3 cut 4. 條件測試命令:[]4.1 邏輯運算符4.2 文件測試4.3 案例:書寫腳本-檢查文件類型4.4 邏輯運算4.5 案例:書寫…

oracle sql 語句 優化方法

1、表盡量使用別名,字段盡量使用別名.字段名,這樣子,可以減少oracle數據庫解析字段名。而且把 不需要的字段名剔除掉,只保留有用的字段名,不要一直使用 select *。 2、關聯查詢時,選擇好主表 。oracle解析…

【Java】Ajax 技術詳解

文章目錄 1. Filter 過濾器1.1 Filter 概述1.2 Filter 快速入門開發步驟:1.3 Filter 執行流程1.4 Filter 攔截路徑配置1.5 過濾器鏈2. Listener 監聽器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技術3.1 Ajax 概述3.2 Ajax 快速入門服務端實現:客戶端實現:4. Axi…

07 APP 自動化- appium+pytest+allure框架封裝

文章目錄 一、PO二、代碼簡單實現項目框架預覽:base_page.pydir_config.pyget_data.pylogger.pystart_session.pyconfig.yamlkey_code.yamllaunch_page_loc.pylogin_page_loc.pylaunch_page.pylogin_page.pytest_login.pypytest.inirun.py APP 自動化代碼總和 一、P…

用戶體驗升級:表單失焦調用接口驗證,錯誤信息即時可視化

現代前端應用中,表單交互是用戶體驗的重要組成部分。而表單驗證作為其中的核心環節,不僅需要前端的即時反饋,還需要與后端接口聯動進行數據合法性校驗。本文將詳細介紹如何在Vue3中實現表單輸入與接口驗證的無縫聯動,并優雅地展示…

Vue 插槽(Slot)用法詳解

插槽(Slot)是Vue中一種強大的內容分發機制,它允許你在組件中定義可替換的內容區域,為組件提供了更高的靈活性和可復用性。本文將全面介紹Vue插槽的各種用法。 1. 基本插槽 基本插槽是最簡單的插槽形式,它允許父組件向子組件插入內容。 子組…

C++ 標準模板庫(STL)詳解文檔

C 標準模板庫(STL)詳解文檔 1 前言2 常用容器2.1 內容總覽2.2 向量 vector2.2.1 概述2.2.2 常用方法2.2.3 適用場景2.2.4 注意事項 2.3 棧 stack2.3.1 概述2.3.2 常用方法2.3.3 注意事項 2.4 隊列 queue2.4.1 概述2.4.2 常用方法2.4.3 注意事項 2.5 優先…

【入坑系列】TiDB 強制索引在不同庫下不生效問題

文章目錄 背景SQL 優化情況線上SQL運行情況分析懷疑1:執行計劃綁定問題?嘗試:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 寫法Hint 不生效問題排查解決參考背景 項目中使用 TiDB 數據庫,并對 SQL 進行優化了,添加了強制索引。 UAT 環境已經生效,但 PROD 環境強制索…

Redis(02)Win系統如何將Redis配置為開機自啟的服務

一、引言 Redis 是一款高性能的鍵值對存儲數據庫,在眾多項目中被廣泛應用。在 Windows 環境下,為了讓 Redis 能更穩定、便捷地運行,將其設置為系統服務并實現自動啟動是很有必要的。這樣一來,系統開機時 Redis 可自動加載&#xf…