import gradio as gr from transformers import pipeline from PIL import Image import traceback import time import threading # Models models = [ ("Ateeqq/ai-vs-human-image-detector", "ateeq"), ("umm-maybe/AI-image-detector", "umm_maybe"), ("dima806/ai_vs_human_generated_image_detection", "dimma"), ] pipes = [] for model_id, _ in models: try: pipes.append((model_id, pipeline("image-classification", model=model_id))) print(f"Loaded {model_id}") except Exception as e: print(f"Error loading {model_id}: {e}") def predict_image(image: Image.Image): try: results = [] for _, pipe in pipes: res = pipe(image)[0] results.append(res) final_result = results[0] label = final_result["label"].lower() score = final_result["score"] * 100 if "ai" in label or "fake" in label: verdict = f"🧠 AI-Generated ({score:.1f}% confidence)" color = "#007BFF" else: verdict = f"🧍 Human-Made ({score:.1f}% confidence)" color = "#4CAF50" html = f"""
{verdict}
""" return html except Exception as e: traceback.print_exc() return f"
Error analyzing image: {str(e)}
" # CSS for sleek glowing pulse css = """ body, .gradio-container { font-family: 'Poppins', sans-serif !important; background: transparent !important; } h1 { text-align: center; font-weight: 700; color: #007BFF; margin-bottom: 10px; } .gr-button-primary { background-color: #007BFF !important; color: white !important; font-weight: 600; border-radius: 10px; height: 45px; } .gr-button-secondary { background-color: #dc3545 !important; color: white !important; border-radius: 10px; height: 45px; } #pulse-loader { width: 100%; height: 4px; background: linear-gradient(90deg, #007BFF, #00C3FF); animation: pulse 1.2s infinite ease-in-out; border-radius: 2px; box-shadow: 0 0 10px #007BFF; } @keyframes pulse { 0% { transform: scaleX(0.1); opacity: 0.6; } 50% { transform: scaleX(1); opacity: 1; } 100% { transform: scaleX(0.1); opacity: 0.6; } } @keyframes fadeIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } """ with gr.Blocks(css=css, theme=gr.themes.Soft()) as demo: gr.Markdown("

🔍 AI Image Detector

") with gr.Row(): with gr.Column(scale=1): image_input = gr.Image(type="pil", label="Upload an image") analyze_button = gr.Button("Analyze", variant="primary") clear_button = gr.Button("Clear", variant="secondary") loader = gr.HTML("") with gr.Column(scale=1): output = gr.HTML(label="Result") def analyze(img): if img is None: return ("", "
Please upload an image first!
") loader_html = "
" yield (loader_html, "") # instantly show loader # do analysis in background result = predict_image(img) yield ("", result) # hide loader, show result analyze_button.click(analyze, inputs=image_input, outputs=[loader, output]) clear_button.click(lambda: ("", ""), outputs=[loader, output]) demo.launch()