Spaces:
Sleeping
Sleeping
File size: 2,349 Bytes
8c30b41 2d38802 c03cdfb f658766 923a637 f658766 f0f1388 f658766 f0f1388 f658766 f0f1388 f658766 f0f1388 f658766 f0f1388 f658766 923a637 f658766 923a637 f658766 923a637 f658766 923a637 f658766 c03cdfb 8c30b41 923a637 f658766 f0f1388 8c30b41 923a637 |
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 |
import gradio as gr
from transformers import pipeline
from PIL import Image
import numpy as np
# ----------------------------
# Inisialisasi model publik
# ----------------------------
model1 = pipeline("image-classification", model="microsoft/resnet-50")
model2 = pipeline("image-classification", model="google/vit-base-patch16-224")
# ----------------------------
# Fungsi deteksi dengan ensemble tanpa "Tidak Pasti"
# ----------------------------
def detect_image(image):
results = []
# Model 1
res1 = model1(image)[0]
label1, score1 = res1['label'].lower(), res1['score']
label1_final = 'human' if 'person' in label1 or 'human' in label1 else 'ai'
results.append((label1_final, score1))
# Model 2
res2 = model2(image)[0]
label2, score2 = res2['label'].lower(), res2['score']
label2_final = 'human' if 'person' in label2 or 'human' in label2 else 'ai'
results.append((label2_final, score2))
# ----------------------------
# Voting atau ambil confidence tertinggi
# ----------------------------
votes = [r[0] for r in results]
if votes[0] == votes[1]:
final_label = votes[0] # mayoritas sama
final_conf = np.mean([r[1] for r in results if r[0]==final_label])*100
else:
# ambil model dengan confidence tertinggi
if results[0][1] > results[1][1]:
final_label = results[0][0]
final_conf = results[0][1]*100
else:
final_label = results[1][0]
final_conf = results[1][1]*100
# ----------------------------
# Hasil akhir
# ----------------------------
if final_label == 'human':
final_result = f"✅ Foto Asli ({final_conf:.2f}%)"
else:
final_result = f"🤖 AI Detected ({final_conf:.2f}%)"
output = f"""
### Hasil Deteksi:
{final_result}
**Model 1 (ResNet-50):** {label1} ({score1*100:.2f}%)
**Model 2 (ViT):** {label2} ({score2*100:.2f}%)
"""
return output
# ----------------------------
# Gradio Interface
# ----------------------------
iface = gr.Interface(
fn=detect_image,
inputs=gr.Image(type="pil"),
outputs="markdown",
title="AI vs Foto Asli Detector",
description="Unggah gambar, sistem akan mendeteksi apakah gambar AI atau Foto Asli berdasarkan 2 model publik."
)
if __name__ == "__main__":
iface.launch()
|