Spaces:
Sleeping
Sleeping
| import json | |
| import streamlit as st | |
| from segments import SegmentsClient | |
| def update_label_on_platform(target_uuid: str, label_data: dict, user_api_key: str, labelset: str = "ground-truth") -> str: | |
| """ | |
| Update the label on Segments.ai for the given target_uuid with the provided label_data. | |
| This overwrites the current label on the platform. | |
| Depending on the structure of the uploaded label file, we determine whether the label data is nested | |
| under an "attributes" key. If it is, we use that; otherwise, we assume the entire JSON is the label data. | |
| Parameters: | |
| target_uuid (str): The UUID of the target sample. | |
| label_data (dict): The label data (JSON) to upload. | |
| user_api_key (str): The API key provided by the user. | |
| Returns: | |
| str: A success message upon successful update. | |
| """ | |
| client = SegmentsClient(user_api_key) | |
| try: | |
| # Check if the JSON has an "attributes" key. | |
| if isinstance(label_data, dict) and "attributes" in label_data: | |
| # If your label JSON is nested under "attributes", use this: | |
| # client.update_label(target_uuid, labelset=labelset, attributes=label_data["attributes"]) | |
| attributes_to_update = label_data["attributes"] | |
| else: | |
| # If your label JSON is flat, use this: | |
| # client.update_label(target_uuid, labelset=labelset, attributes=label_data) | |
| attributes_to_update = label_data | |
| client.update_label(target_uuid, labelset=labelset, attributes=attributes_to_update) | |
| return "Label updated successfully on Segments.ai." | |
| except Exception as e: | |
| raise Exception(f"Error updating target label on Segments.ai: {e}") | |
| # ---------------------- Streamlit UI ---------------------- | |
| st.title("Upload and Overwrite Label on Segments.ai") | |
| st.markdown( | |
| "Select a label file (JSON) from your local machine, enter your API key, and specify the target UUID where the label should be updated." | |
| ) | |
| user_api_key = st.text_input("Enter your API key", type="password", value="") | |
| uploaded_file = st.file_uploader("Choose a label file", type=["json"]) | |
| target_uuid = st.text_input("Target UUID", value="") | |
| if st.button("Upload Label"): | |
| if not user_api_key: | |
| st.error("Please enter your API key.") | |
| elif uploaded_file is None: | |
| st.error("Please upload a label file.") | |
| elif not target_uuid: | |
| st.error("Please enter a target UUID.") | |
| else: | |
| try: | |
| # Load label data from the uploaded file. | |
| label_data = json.load(uploaded_file) | |
| # Update label on the platform using the user-provided API key. | |
| result_message = update_label_on_platform(target_uuid, label_data, user_api_key) | |
| st.success(result_message) | |
| except Exception as e: | |
| st.error(f"An error occurred: {e}") |