Axe-08's picture
Upload app.py
caa145f verified
raw
history blame
2.17 kB
import gradio as gr
import requests
from PIL import Image
from transformers import pipeline, Pipeline
import os
from dotenv import load_dotenv
# --- Configuration ---
# Load secrets from the Space's "Repository secrets" settings
load_dotenv()
VALID_BEARER_TOKEN = os.getenv("VALID_BEARER_TOKEN")
OWNER_PHONE_NUMBER = os.getenv("OWNER_PHONE_NUMBER")
# --- AI Model Setup ---
# This is loaded once when the Space starts
print("Loading AI Image Detection model...")
image_detector: Pipeline = pipeline("image-classification", model="openai/clip-vit-base-patch32")
print("✅ Model loaded successfully.")
# --- Main Tool Function ---
def analyze_image_authenticity(image_url: str) -> dict:
"""
Analyzes an image from a URL to determine if it is real or AI-generated.
Args:
image_url: The URL of the image to analyze.
Returns:
A dictionary with the analysis results and probability scores.
"""
if not image_url:
raise gr.Error("Image URL parameter is missing.")
print(f"Analyzing image from URL: {image_url}")
try:
image = Image.open(requests.get(image_url, stream=True, timeout=10).raw)
except Exception as e:
# For Gradio, it's better to raise a gr.Error for user-facing issues
raise gr.Error(f"Could not load image from URL. It might be invalid or inaccessible. Error: {str(e)}")
labels = ["a real photograph", "a computer-generated image", "an illustration or drawing"]
results = image_detector(image, candidate_labels=labels)
print(f"Analysis successful. Results: {results}")
return {"analysis_results": results}
# --- Gradio Interface ---
# This defines the UI and the MCP endpoint
demo = gr.Interface(
fn=analyze_image_authenticity,
inputs=[gr.Textbox(label="Image URL")],
outputs=[gr.JSON(label="Analysis Results")],
title="AI Image Authenticity Detector",
description="Provide an image URL to determine if it is a real photograph or AI-generated."
)
# --- Launch the App and MCP Server ---
# mcp_server=True is the magic parameter that exposes your function as an MCP tool
demo.launch(mcp_server=True,share=True)