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()