import base64 import io import cv2 import requests import json import gradio as gr import os from PIL import Image import numpy as np from PIL import ImageOps # Accessing a specific environment variable api_key = os.environ.get('devisionx') # Checking if the environment variable exists if not api_key: print("devisionx environment variable is not set.") exit() # Define a function to call the API and get the results def base64str_to_PILImage(base64str): base64_img_bytes = base64str.encode('utf-8') base64bytes = base64.b64decode(base64_img_bytes) bytesObj = io.BytesIO(base64bytes) return ImageOps.exif_transpose(Image.open(bytesObj)) def get_results(image, prompt): threshold = 0.5 # Convert the NumPy array to PIL image image = Image.fromarray(image) # Convert the image to base64 string with io.BytesIO() as output: image.save(output, format="JPEG") base64str = base64.b64encode(output.getvalue()).decode("utf-8") # Prepare the payload (Adjust this part according to the API requirements) payload = json.dumps({"base64str": base64str, "classes": prompt}) # Send the request to the API response = requests.put(api_key, data=payload) # Parse the JSON response data = response.json() print(response.status_code) print(data) # Access the values (Adjust this part according to the API response format) output_image_base64 = data['firstName'] # Assuming the API returns the output image as base64 # Convert the output image from base64 to PIL and then to NumPy array output_image = base64str_to_PILImage(output_image_base64) output_image = np.array(output_image) return output_image # Define the input components for Gradio (adding a new input for the prompt) image_input = gr.inputs.Image() text_input = gr.inputs.Textbox(label="Prompt") # New input for the text prompt # Define the output components for Gradio (including both image and text) outputs = gr.Image(type="numpy", label="Output Image") # Define the text description within an HTML
element description_html = """

Description:

We present a demo for performing object segmentation with training a Yolov8-seg on wheel Image dataset. The model was trained on 696 training images and validated on 199 images.

Usage:

You can upload wheel Image images, and the demo will provide you with your segmented image.

Dataset:

This dataset comprises a total of 994 images, which are divided into three distinct sets for various purposes:

License: This dataset is made available under the Creative Commons Attribution 4.0 International License (CC BY 4.0).

To access and download this dataset, please follow this link: Dataset Download

Download Dataset:

To download the dataset we used, you can use the following command in colab:

!wget https://universe.roboflow.com/ds/OPPOJjnJPs?key=5yzDMD610e

Feel free to explore and use this repository for your object segmentation needs. If you have any questions or need assistance, please don't hesitate to reach out.

""" title = "autoannotation" description = "This is a project description. It demonstrates how to use Gradio with an image and text input to interact with an API." # Create a Blocks object and use it as a context manager with gr.Blocks() as demo: # Define the input components and add them to the layout with gr.Row(): image_input = gr.inputs.Image() text_input = gr.inputs.Textbox(label="Prompt") button = gr.Button("Run") # Define the output component and add it to the layout with gr.Row(): output = gr.Image(type="numpy", label="Output Image") # Define the event listener that connects the input and output components and triggers the function button.click(fn=get_results, inputs=[image_input, text_input], outputs=output, api_name="get_results") # Add the description below the layout gr.Markdown(description) # Launch the app demo.launch(share=False)