autoannotation / app.py
SayedMo's picture
Create app.py
cef0ce8
raw
history blame
2.17 kB
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")
# Launch the Gradio interface
gr.Interface(fn=get_results, inputs=[image_input, text_input], outputs=outputs).launch(share=False)