Kav-Venaki / app.py
NHLOCAL's picture
讞讝专讛 诇拽讜讚 讛诪拽讜专讬 讛转拽谞讬
1af19a0
raw
history blame
2.95 kB
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()