serJD's picture
Update app.py
dc0c239 verified
import gradio as gr
import os
import base64
from PIL import Image
from io import BytesIO
from specklepy.api.client import SpeckleClient
from specklepy.transports.server import ServerTransport
from specklepy.api import operations
from specklepy.objects import Base
# Initialize Speckle client with your token
speckle_token = os.getenv('SPECKLE_TOKEN')
speckle_branch = os.getenv('SPECKLE_BRANCH')
speckle_stream_id = os.getenv('SPECKLE_STREAM_ID')
CLIENT = SpeckleClient(host="https://speckle.xyz/")
CLIENT.authenticate_with_token(token=speckle_token)
def send_to_speckle(stream_id, branch_name, client, data_object):
try:
# Get transport
transport = ServerTransport(client=client, stream_id=stream_id)
# Send the data object to the speckle stream
object_id = operations.send(data_object, [transport])
# Create a new commit with the new object
commit_id = client.commit.create(
stream_id=stream_id,
object_id=object_id,
branch_name=branch_name,
message="Updated the data object from Gradio app",
)
return f"Success! Data sent to Speckle stream. Commit ID: {commit_id}"
except Exception as e:
return f"An error occurred: {e}"
def process_data(image, text):
# Process image: Resize and convert to base64
img_str = ""
if image is not None:
# Resize image, maintaining aspect ratio, and max width 1024 pixels
base_width = 1024
w_percent = (base_width / float(image.size[0]))
h_size = int((float(image.size[1]) * float(w_percent)))
image = image.resize((base_width, h_size), Image.Resampling.LANCZOS)
# Convert to base64
buffered = BytesIO()
image.save(buffered, format="JPEG")
img_str = base64.b64encode(buffered.getvalue()).decode('utf-8')
# Prepare data object
obj = Base()
obj["image"] = img_str
obj["text"] = text
# Send data to Speckle
return send_to_speckle(speckle_stream_id, speckle_branch, CLIENT, obj)
with gr.Blocks() as demo:
gr.Markdown("### Upload Image and Enter Text")
with gr.Row():
image = gr.Image(type="pil", label="Add Image")
text = gr.TextArea(label="Enter Text or Speak")
submit_btn = gr.Button("Submit")
output = gr.Textbox(label="Status", visible=False) # Set visible to False to hide output
submit_btn.click(fn=process_data, inputs=[image, text], outputs=output)
demo.launch()