Spaces:
Sleeping
Sleeping
| 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) |