Spaces:
Sleeping
Sleeping
import gradio as gr | |
from PIL import Image | |
from io import BytesIO | |
import base64 | |
import traceback | |
from backend import process_image | |
def inference(image: Image.Image, gemini_api_key: str): | |
""" | |
驻讜谞拽爪讬讛 砖诪讘爪注转 讝讬讛讜讬 讜讟砖讟讜砖 谞砖讬诐 讘转诪讜谞讛, | |
讜诪注讚讻谞转 讗转 住专讙诇 讛讛转拽讚诪讜转 讘讛转讗诐. | |
""" | |
if not gemini_api_key.strip(): | |
raise gr.Error("讗谞讗 讛讻谞住 诪驻转讞 API 砖诇 Gemini 注诇 诪谞转 诇讛诪砖讬讱") | |
progress = gr.Progress() # 讗讜讘讬讬拽讟 诇注讚讻讜谉 讛讛转拽讚诪讜转 | |
def progress_callback(fraction, description=""): | |
""" | |
驻讜谞拽爪讬讛 驻谞讬诪讬转 砖转讬拽专讗 诪-backend 讘讻诇 砖诇讘. | |
fraction - 注专讱 讘讬谉 0 诇-1 (诇讚讜讙诪讛 0.3 = 30%) | |
description - 诪诇诇 诇讛住讘专 讛砖诇讘 | |
""" | |
progress(fraction, desc=description) | |
try: | |
# 讻注转 谞拽专讗 诇-process_image 注诐 讗驻砖专讜转 诇注讚讻谉 讛转拽讚诪讜转 | |
encoded_image = process_image(image, gemini_api_key, progress_callback=progress_callback) | |
decoded_image = Image.open(BytesIO(base64.b64decode(encoded_image))) | |
return decoded_image, gr.update(value="", visible=False) # 讛讞讝专转 转诪讜谞讛 讜-Textbox 诪讜住转专 | |
except Exception as e: | |
# 讟讬驻讜诇 讘砖讙讬讗讛 讜讛讞讝专转 讛讜讚注讛 讘-Textbox | |
error_message = f"砖讙讬讗讛: {type(e).__name__}\n" | |
error_message += f"讛讜讚注讛: {e}\n\n" | |
error_message += "Traceback:\n" | |
error_message += traceback.format_exc() | |
return None, gr.update(value=error_message, visible=True) # 讛讞讝专转 Textbox 讙诇讜讬 注诐 砖讙讬讗讛 | |
title_str = "讝讬讛讜讬 讜讟砖讟讜砖 谞砖讬诐 讘转诪讜谞讛" | |
description_str = """<p style='text-align: right; direction: rtl'> | |
讛注诇讛 转诪讜谞讛, 讛讻谞住 讗转 诪驻转讞 讛志API 砖诇 Gemini,<br> | |
讜诇讞抓 注诇 "讛专抓" 讻讚讬 诇讝讛讜转 讜诇讟砖讟砖 谞砖讬诐 讘转诪讜谞讛 讘讗讜驻谉 讗讜讟讜诪讟讬 | |
</p> | |
""" | |
# 谞转讬讘 诇转诪讜谞转 讚讜讙诪讛 | |
EXAMPLE_IMAGE = "example_images/example.jpg" | |
demo = gr.Interface( | |
fn=inference, | |
inputs=[ | |
gr.Image(type="pil", label="讘讞专 转诪讜谞讛 诇谞讬转讜讞 讗讜 讙专讜专 讗讜转讛 诇讻讗谉"), | |
gr.Textbox( | |
label="诪驻转讞 API 砖诇 Gemini", | |
placeholder="讛讻谞住 讗转 诪驻转讞 讛-API 讻讗谉", | |
type="password" | |
) | |
], | |
outputs=[ | |
gr.Image(type="pil", label="转讜爪讗讛 住讜驻讬转"), | |
gr.Textbox(label="砖讙讬讗讜转", visible=False) # 讛讜住驻转 专讻讬讘 诇讛爪讙转 砖讙讬讗讜转 | |
], | |
title=title_str, | |
description=description_str, | |
examples=[ | |
[EXAMPLE_IMAGE] # 转诪讜谞讛 讘诇讘讚, 诇诇讗 诪驻转讞 API | |
], | |
flagging_mode="never", | |
theme=gr.themes.Default() # 注讬爪讜讘 拽诇讬诇 诇诪诪砖拽 | |
) | |
if __name__ == "__main__": | |
# 谞讬转谉 诇讛讙讚讬专 share=True 讗诐 专讜爪讬诐 诇砖转祝 诪讞讜抓 诇专砖转 讛诪拽讜诪讬转 | |
demo.launch() | |