From 06575a84c9985ad5c26364a80a17856e51c7beaa Mon Sep 17 00:00:00 2001 From: Piotr Skalski Date: Tue, 14 Mar 2023 18:00:40 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=8B=20initial=20commit=20(#61)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements.txt | 1 + ultralyticsplus/roboflow_utils.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 ultralyticsplus/roboflow_utils.py diff --git a/requirements.txt b/requirements.txt index 71a6bcf..bd49516 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,4 @@ fire ultralytics>=8.0.43,<8.0.44 sahi>=0.11.11,<0.12.0 pandas +roboflow>= 0.2.32 diff --git a/ultralyticsplus/roboflow_utils.py b/ultralyticsplus/roboflow_utils.py new file mode 100644 index 0000000..ee0c2eb --- /dev/null +++ b/ultralyticsplus/roboflow_utils.py @@ -0,0 +1,30 @@ +import re + +from roboflow import Roboflow + +from ultralyticsplus.ultralytics_utils import LOGGER + + +def extract_roboflow_metadata(url: str) -> tuple: + match = re.search(r'https://(?:app|universe)\.roboflow\.com/([^/]+)/([^/]+)(?:/dataset)?/([^/]+)', url) + if match: + workspace_name = match.group(1) + project_name = match.group(2) + project_version = match.group(3) + return workspace_name, project_name, project_version + else: + raise ValueError(f"Invalid Roboflow dataset url ❌ " + f"Expected: https://universe.roboflow.com/workspace_name/project_name/project_version. " + f"Given: {url}") + + +def push_to_roboflow_universe( + exp_dir: str, + roboflow_url: str, + roboflow_token: str +): + workspace_name, project_name, project_version = extract_roboflow_metadata(url=roboflow_url) + rf = Roboflow(api_key=roboflow_token) + project_version = rf.workspace(workspace_name).project(project_name).version(int(project_version)) + LOGGER.info(f"Uploading model from local: {exp_dir} to Roboflow: {project_version.id}") + project_version.deploy(model_type="yolov8", model_path=exp_dir)