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 = """

ברוכים הבאים לכלי לזיהוי וטשטוש נשים בתמונה!
העלו תמונה, הזינו את מפתח ה־API של Gemini, ולחצו על "הרץ" כדי לנתח את התמונה ולטשטש אוטומטית נשים.

שימו לב: נדרש מפתח API תקין של Gemini כדי להשתמש בכלי זה.
הכלי משתמש בטכנולוגיות מתקדמות כמו YOLO, SAM2 ו-Gemini.

""" # נתיבים לתמונות דוגמה EXAMPLE_IMAGES = ["example_images/example.jpg", "example_images/example2.jpg", "example_images/example3.jpg"] with gr.Blocks( title=title_str, css="style.css" # קישור לקובץ CSS ) as demo: gr.Markdown(f"

{title_str}

") gr.Markdown(description_str) with gr.Row(): with gr.Column(): image_input = gr.Image(type="pil", label="🖼️ בחרו תמונה לניתוח") api_key_input = gr.Textbox( label="🔑 מפתח API של Gemini", placeholder="הכניסו את מפתח ה-API כאן", type="password" ) submit_button = gr.Button("🚀 הרץ", variant="primary") gr.Examples( examples=EXAMPLE_IMAGES, inputs=image_input, label="👇 דוגמאות", # cache_examples=True # caching examples speeds up start time, but uses more memory ) with gr.Column(): image_output = gr.Image(type="pil", label="🖼️ תוצאה לאחר טשטוש") error_output = gr.Textbox(label="📜 שגיאות", visible=False, lines=5) submit_button.click( fn=inference, inputs=[image_input, api_key_input], outputs=[image_output, error_output] ) if __name__ == "__main__": demo.launch()