Image Classification
Transformers
Safetensors
PyTorch
English
Chinese
beit
ai-detection
ai-image-detection
deepfake-detection
fake-image-detection
ai-art-detection
stable-diffusion-detection
midjourney-detection
dall-e-detection
image-forensics
digital-art-verification
vit
computer-vision
Eval Results (legacy)
Instructions to use boluobobo/ItsNotAI-ai-detector-v1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use boluobobo/ItsNotAI-ai-detector-v1 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-classification", model="boluobobo/ItsNotAI-ai-detector-v1") pipe("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/hub/parrots.png")# Load model directly from transformers import AutoImageProcessor, AutoModelForImageClassification processor = AutoImageProcessor.from_pretrained("boluobobo/ItsNotAI-ai-detector-v1") model = AutoModelForImageClassification.from_pretrained("boluobobo/ItsNotAI-ai-detector-v1", device_map="auto") - Notebooks
- Google Colab
- Kaggle
File size: 5,632 Bytes
f575344 78f9cea f575344 | 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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 | """
ItsNotAI - AI Image Detector
Gradio app for Hugging Face Spaces
"""
import gradio as gr
import torch
import json
from PIL import Image
from transformers import AutoModelForImageClassification, AutoImageProcessor
from huggingface_hub import hf_hub_download
# Model configuration
MODEL_ID = "boluobobo/ItsNotAI-ai-detector-v1"
# Load model and processor
print("Loading model...")
model = AutoModelForImageClassification.from_pretrained(MODEL_ID)
processor = AutoImageProcessor.from_pretrained(MODEL_ID)
model.eval()
# Load source metadata
try:
meta_path = hf_hub_download(repo_id=MODEL_ID, filename="source_meta.json")
with open(meta_path) as f:
meta = json.load(f)
source_names = meta["source_names"]
source_is_real = meta["source_is_real"]
except Exception:
# Fallback
source_names = list(model.config.id2label.values())
source_is_real = {}
print(f"Loaded {len(source_names)} classes")
def predict(image: Image.Image):
"""Predict if image is real or AI-generated"""
if image is None:
return None, None, "Please upload an image", None
# Preprocess
image = image.convert("RGB")
inputs = processor(image, return_tensors="pt")
# Inference
with torch.no_grad():
outputs = model(**inputs)
probs = torch.softmax(outputs.logits, dim=-1)[0]
# Top-1 决定 + 置信度
pred_idx = probs.argmax().item()
predicted_source = source_names[pred_idx]
confidence = probs[pred_idx].item()
is_real = source_is_real.get(predicted_source, False)
# 根据 top-1 预测计算概率
if is_real:
human_prob = confidence
ai_prob = 1.0 - human_prob
else:
ai_prob = confidence
human_prob = 1.0 - ai_prob
# Get top 3 AI sources only (exclude real sources)
ai_sources = []
for i, (name, prob) in enumerate(zip(source_names, probs.tolist())):
if not source_is_real.get(name, False):
ai_sources.append({"label": name, "score": round(prob, 3)})
# Sort by score descending and take top 3
ai_sources.sort(key=lambda x: x["score"], reverse=True)
top3_sources = ai_sources[:3]
# API-style JSON output
api_output = {
"ai_probability": round(ai_prob, 3),
"human_probability": round(human_prob, 3),
"predicted_source": predicted_source,
"top3_sources": top3_sources
}
# Top predictions for bar chart (keep for UI)
top_preds = {}
for i, (name, prob) in enumerate(zip(source_names, probs.tolist())):
if prob > 0.01: # Only show >1%
marker = "[Real]" if source_is_real.get(name, False) else "[AI]"
top_preds[f"{marker} {name}"] = prob
# Sort by probability
top_preds = dict(sorted(top_preds.items(), key=lambda x: x[1], reverse=True)[:10])
# Summary
summary = f"""
## Detection Result
**Verdict**: {"Real Image" if is_real else "AI Generated"}
**Predicted Source**: {predicted_source}
**Confidence**: {confidence:.2%}
---
### Aggregate Probabilities
| Category | Probability |
|----------|-------------|
| Real | {human_prob:.2%} |
| AI Generated | {ai_prob:.2%} |
"""
return (
{"Real": human_prob, "AI Generated": ai_prob},
top_preds,
summary,
api_output
)
# Custom CSS
css = """
.main-title {
text-align: center;
margin-bottom: 1rem;
}
.result-box {
padding: 1rem;
border-radius: 8px;
margin: 1rem 0;
}
"""
# Gradio interface
with gr.Blocks(css=css, title="ItsNotAI - AI Image Detector") as demo:
gr.Markdown(
"""
# ItsNotAI - AI Image Detector
Upload an image to detect if it's **real** or **AI-generated**, and identify the potential source.
Supports: Stable Diffusion, DALL-E, Midjourney, StyleGAN, and more.
""",
elem_classes="main-title"
)
with gr.Row():
with gr.Column(scale=1):
input_image = gr.Image(
type="pil",
label="Upload Image",
height=400
)
submit_btn = gr.Button("Analyze", variant="primary", size="lg")
gr.Examples(
examples=[], # Add example images if available
inputs=input_image,
)
with gr.Column(scale=1):
# Main result
result_label = gr.Label(
label="Real vs AI",
num_top_classes=2
)
# Top predictions
top_preds_label = gr.Label(
label="Top Predictions by Source",
num_top_classes=10
)
# Detailed summary
summary_md = gr.Markdown(label="Details")
# API-style JSON output
json_output = gr.JSON(label="API Output")
# Event handlers
submit_btn.click(
fn=predict,
inputs=[input_image],
outputs=[result_label, top_preds_label, summary_md, json_output]
)
input_image.change(
fn=predict,
inputs=[input_image],
outputs=[result_label, top_preds_label, summary_md, json_output]
)
gr.Markdown(
"""
---
### About
This model is based on **BEiT-Large** fine-tuned on the ArtiFact dataset.
- **Accuracy**: 93.51%
- **Model**: [boluobobo/ItsNotAI-ai-detector-v1](https://huggingface.co/boluobobo/ItsNotAI-ai-detector-v1)
### Disclaimer
This tool is for educational and research purposes. Results should not be used as definitive proof of image authenticity.
"""
)
if __name__ == "__main__":
demo.launch()
|