Spaces:
Running
Running
File size: 3,127 Bytes
88a0fe8 b8e6ffe 88a0fe8 b8e6ffe 88a0fe8 b8e6ffe 88a0fe8 b8e6ffe 88a0fe8 b8e6ffe 88a0fe8 b8e6ffe 88a0fe8 b8e6ffe 88a0fe8 b8e6ffe 88a0fe8 b8e6ffe 88a0fe8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
import gradio as gr
import requests
import json
import os
BASE_URL = "https://api.jigsawstack.com/v1"
headers = {
"x-api-key": os.getenv("JIGSAWSTACK_API_KEY")
}
def validate_nsfw(url):
if not url or not url.strip():
return None, "Error: Image URL is required.", None, None
try:
response = requests.post(
f"{BASE_URL}/validate/nsfw",
headers=headers,
json={"url": url.strip()}
)
response.raise_for_status()
result = response.json()
if not result.get("success"):
error_msg = f"Error: API call failed - {result.get('message', 'Unknown error')}"
return url, error_msg, None, None
# Extract detailed information
nsfw = result.get("nsfw", False)
nudity = result.get("nudity", False)
gore = result.get("gore", False)
nsfw_score = result.get("nsfw_score", 0)
nudity_score = result.get("nudity_score", 0)
gore_score = result.get("gore_score", 0)
# Format the output
status_message = f"Overall NSFW: {'Yes' if nsfw else 'No'}"
nudity_details = f"Nudity: {'Detected' if nudity else 'Not Detected'} (Score: {nudity_score:.4f})"
gore_details = f"Gore: {'Detected' if gore else 'Not Detected'} (Score: {gore_score:.4f})"
return url, status_message, nudity_details, gore_details
except requests.exceptions.RequestException as e:
return url, f"Request failed: {str(e)}", None, None
except Exception as e:
return url, f"An unexpected error occurred: {str(e)}", None, None
with gr.Blocks() as demo:
gr.Markdown("""
<div style='text-align: center; margin-bottom: 24px;'>
<h1 style='font-size:2.2em; margin-bottom: 0.2em;'>🧩 NSFW Detection</h1>
<p style='font-size:1.2em; margin-top: 0;'>Quickly detect nudity, violence, and other NSFW content in images.</p>
<p style='font-size:1em; margin-top: 0.5em;'>For more details and API usage, see the <a href='https://jigsawstack.com/docs/api-reference/validate/nsfw' target='_blank'>documentation</a>.</p>
</div>
""")
with gr.Row():
with gr.Column():
gr.Markdown("#### Image to Analyze")
nsfw_url = gr.Textbox(
label="Image URL",
placeholder="Enter the URL of the image you want to validate..."
)
nsfw_btn = gr.Button("Validate Image", variant="primary")
with gr.Column():
gr.Markdown("#### Validation Result")
nsfw_image_display = gr.Image(label="Image Preview")
nsfw_status_message = gr.Textbox(label="Status", interactive=False)
nsfw_nudity_details = gr.Textbox(label="Nudity Details", interactive=False)
nsfw_gore_details = gr.Textbox(label="Gore Details", interactive=False)
nsfw_btn.click(
validate_nsfw,
inputs=[nsfw_url],
outputs=[
nsfw_image_display,
nsfw_status_message,
nsfw_nudity_details,
nsfw_gore_details
]
)
demo.launch()
|