Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import base64 | |
| from PIL import Image | |
| import io | |
| import json | |
| # 修改函式以確保它接收一個字典(這是 gradio_client 預設發送的格式) | |
| def process(payload): | |
| try: | |
| # 如果客戶端已經傳送字典,直接使用 payload: | |
| data = payload | |
| # decode base64 image | |
| img_bytes = base64.b64decode(data["image_b64"]) | |
| img = Image.open(io.BytesIO(img_bytes)) | |
| # This goes to Jetson | |
| reply = { | |
| "received": True, | |
| "robot_id": data.get("robot_id"), | |
| "size": img.size | |
| } | |
| # *** 關鍵修改:回傳一個包含圖片和 JSON 回覆的元組 (tuple) *** | |
| # Gradio 會自動將第一個值賦給第一個輸出元件 (gr.Image) | |
| # 第二個值賦給第二個輸出元件 (gr.JSON) | |
| return img, reply | |
| except Exception as e: | |
| # 發生錯誤時,確保回傳兩個值,其中圖片值為 None | |
| return None, {"error": str(e)} | |
| demo = gr.Interface( | |
| fn=process, | |
| # 我們將輸入定義為 JSON,這允許後端接收字典格式 | |
| inputs=gr.JSON(label="Input Payload (Dict format)"), | |
| outputs=[ | |
| gr.Image(type="pil", label="Image Preview"), # 現在將接收 img 物件 | |
| gr.JSON(label="Reply to Jetson") # 現在將接收 reply 字典 | |
| ], | |
| api_name="predict" | |
| ) | |
| demo.launch() | |