Spaces:
Sleeping
Sleeping
File size: 2,545 Bytes
8c30b41 2d38802 c03cdfb 9e3f29f b8bf0c0 9e3f29f 2882491 9e3f29f c03cdfb 2882491 c03cdfb 2882491 9e3f29f c03cdfb 2882491 9e3f29f c03cdfb 9e3f29f 2882491 9e3f29f 2882491 9e3f29f 2882491 9e3f29f 2882491 9e3f29f 2882491 9e3f29f 2882491 9e3f29f 2882491 9e3f29f 2882491 9e3f29f 2882491 9e3f29f 2882491 9e3f29f c03cdfb 9e3f29f c03cdfb 8c30b41 9e3f29f 2882491 8c30b41 9e3f29f |
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 |
import gradio as gr
from transformers import pipeline
from PIL import Image
import numpy as np
# ----------------------------
# Inisialisasi model publik
# ----------------------------
# Model A: Deteksi wajah
model_a = pipeline("image-classification", model="qualcomm/MediaPipe-Face-Detection")
# Model B: Klasifikasi gambar umum
model_b = pipeline("image-classification", model="microsoft/resnet-50")
# Model C: Klasifikasi gambar umum
model_c = pipeline("image-classification", model="google/vit-base-patch16-224")
# ----------------------------
# Fungsi deteksi dengan ensemble
# ----------------------------
def detect_image(image):
results = []
# Model A
res_a = model_a(image)[0]
label_a, score_a = res_a['label'].lower(), res_a['score']
# Sederhanakan: ada wajah = human, tidak = AI
label_a_final = 'human' if 'face' in label_a else 'ai'
results.append((label_a_final, score_a))
# Model B
res_b = model_b(image)[0]
label_b, score_b = res_b['label'].lower(), res_b['score']
label_b_final = 'human' if 'person' in label_b or 'human' in label_b else 'ai'
results.append((label_b_final, score_b))
# Model C
res_c = model_c(image)[0]
label_c, score_c = res_c['label'].lower(), res_c['score']
label_c_final = 'human' if 'person' in label_c or 'human' in label_c else 'ai'
results.append((label_c_final, score_c))
# ----------------------------
# Voting + Threshold
# ----------------------------
votes = [r[0] for r in results]
scores = [r[1] for r in results]
# Mayoritas voting
final_label = max(set(votes), key=votes.count)
# Rata-rata confidence untuk final label
relevant_scores = [s for (l, s) in results if l == final_label]
avg_confidence = np.mean(relevant_scores) * 100 # ke persen
# Tentukan hasil akhir
if avg_confidence < 80:
return "⚠️ Tidak Pasti (cek manual)", round(avg_confidence, 2)
elif final_label == 'human':
return f"Foto Asli ✅", round(avg_confidence, 2)
else:
return f"AI Detected 🤖", round(avg_confidence, 2)
# ----------------------------
# Gradio Interface
# ----------------------------
iface = gr.Interface(
fn=detect_image,
inputs=gr.Image(type="pil"),
outputs=[gr.Textbox(label="Hasil Deteksi"), gr.Number(label="Confidence (%)")],
title="AI vs Foto Asli Detector",
description="Unggah gambar, sistem akan mendeteksi apakah gambar asli atau dihasilkan AI menggunakan ensemble 3 model publik + voting."
)
iface.launch()
|