File size: 1,904 Bytes
5d40c09
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import torch
from PIL import Image
import numpy as np
from transformers import AutoFeatureExtractor, AutoModelForImageClassification

# 加载预训练的AI图像检测器
model_name = "SehwanHong/Stable-Diffusion-Detector"
feature_extractor = AutoFeatureExtractor.from_pretrained(model_name)
model = AutoModelForImageClassification.from_pretrained(model_name)

def detect_ai_image(image):
    # 处理图像
    inputs = feature_extractor(images=image, return_tensors="pt")
    with torch.no_grad():
        outputs = model(**inputs)
    
    # 获取预测结果
    logits = outputs.logits
    predicted_class_idx = logits.argmax(-1).item()
    
    # 获取概率
    probabilities = torch.nn.functional.softmax(logits, dim=-1)
    ai_probability = probabilities[0][1].item()  # 假设索引1是AI生成类
    
    # 分析图像特征
    features = analyze_image_features(image)
    
    return {
        "ai_probability": float(ai_probability),
        "features": features,
        "predicted_class": model.config.id2label[predicted_class_idx]
    }

def analyze_image_features(image):
    # 简单图像特征分析
    features = {}
    
    # 转换为numpy数组
    img_array = np.array(image)
    
    # 基本特征
    features["width"] = image.width
    features["height"] = image.height
    features["aspect_ratio"] = image.width / max(1, image.height)
    
    # 颜色分析
    if len(img_array.shape) == 3:  # 彩色图像
        features["avg_red"] = float(np.mean(img_array[:,:,0]))
        features["avg_green"] = float(np.mean(img_array[:,:,1]))
        features["avg_blue"] = float(np.mean(img_array[:,:,2]))
    
    return features

# 创建Gradio界面
iface = gr.Interface(
    fn=detect_ai_image,
    inputs=gr.Image(type="pil"),
    outputs=gr.JSON(),
    title="AI图像检测API",
    description="检测图像是否由AI生成"
)

iface.launch()