Spaces:
Sleeping
Sleeping
File size: 3,958 Bytes
8c30b41 3289e9d 13ae792 19e6f0c 13ae792 cf51b4c 13ae792 cf51b4c 19e6f0c 13ae792 cf51b4c 13ae792 cf51b4c 19e6f0c 13ae792 cf51b4c 13ae792 19e6f0c 13ae792 c346fbc 13ae792 cf51b4c c346fbc cf51b4c 13ae792 cf51b4c c346fbc cf51b4c 13ae792 cf51b4c 13ae792 c346fbc 13ae792 975d67c b178e5a c346fbc 13ae792 c346fbc 13ae792 cf51b4c c346fbc 13ae792 c346fbc 13ae792 c346fbc 13ae792 c346fbc 13ae792 cf51b4c c346fbc cf51b4c 19e6f0c 975d67c 19e6f0c 13ae792 19e6f0c c346fbc 19e6f0c 923a637 19e6f0c |
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 |
import gradio as gr
from transformers import pipeline
from PIL import Image, ExifTags
import numpy as np
import cv2
# ----------------------------
# MODEL
# ----------------------------
try:
hf_detector = pipeline("image-classification", model="umm-maybe/AI-image-detector")
except Exception as e:
hf_detector = None
print("HF AI-detector gagal dimuat:", e)
try:
general_model = pipeline("image-classification", model="google/vit-base-patch16-224")
except Exception as e:
general_model = None
print("General classifier gagal dimuat:", e)
# ----------------------------
# ANALISIS LOKAL
# ----------------------------
def calculate_blur(image):
gray = np.array(image.convert("L"))
return cv2.Laplacian(gray, cv2.CV_64F).var()
def calculate_noise(image):
gray = np.array(image.convert("L"), dtype=np.float32)
noise_std = np.std(gray - np.mean(gray))
return noise_std
def has_camera_exif(image):
try:
exif = image._getexif()
if exif:
for tag, value in exif.items():
decoded = ExifTags.TAGS.get(tag, tag)
if decoded in ["Make", "Model"]:
return True
except:
return False
return False
# ----------------------------
# DETEKSI HYBRID DENGAN PERSENTASE
# ----------------------------
def detect_image(image):
hf_score = 0
general_score = 0
local_score = 0
# -------- HF AI-detector --------
hf_label, hf_conf = "N/A", 0
if hf_detector:
try:
result = hf_detector(image)
hf_label = result[0]['label']
hf_conf = result[0]['score'] * 100
# Jika label mengandung tanda AI โ skor AI = confidence
if any(x in hf_label.lower() for x in ["fake", "ai", "artificial"]):
hf_score = hf_conf
except:
hf_score = 0
# -------- General model --------
general_label, general_conf = "N/A", 0
if general_model:
try:
result2 = general_model(image)
general_label = result2[0]['label']
general_conf = result2[0]['score'] * 100
if any(x in general_label.lower() for x in ["anime","cartoon","illustration","maya","3d"]):
general_score = general_conf * 0.7 # dikurangi bobot karena cadangan
except:
general_score = 0
# -------- Analisis lokal --------
blur_score = calculate_blur(image)
noise_score = calculate_noise(image)
exif_present = has_camera_exif(image)
if blur_score < 100 or noise_score < 10:
local_score += 50
if not exif_present:
local_score += 10
# -------- Weighted Score --------
total_ai_score = hf_score*0.7 + general_score*0.2 + local_score*0.1
total_ai_score = min(max(total_ai_score, 0), 100) # clamp 0โ100
total_real_score = 100 - total_ai_score
# -------- Output --------
if total_ai_score == 100:
final_text = "๐ค Gambar ini hasil AI"
elif total_real_score == 100:
final_text = "โ
Gambar ini asli"
else:
final_text = f"๐ผ๏ธ {total_ai_score:.2f}% AI / {total_real_score:.2f}% Asli"
output_lines = [
f"### Hasil Deteksi:\n{final_text}",
f"HF AI-detector: {hf_label} ({hf_conf:.2f}%)",
f"General Model: {general_label} ({general_conf:.2f}%)",
f"Blur Score: {blur_score:.2f}",
f"Noise Score: {noise_score:.2f}",
f"Metadata Kamera: {'Ada' if exif_present else 'Tidak Ada'}"
]
return "\n".join(output_lines)
# ----------------------------
# Gradio Interface
# ----------------------------
iface = gr.Interface(
fn=detect_image,
inputs=gr.Image(type="pil"),
outputs="markdown",
title="Hybrid AI vs Foto Asli Detector (Gratis)",
description="Unggah gambar, sistem akan mendeteksi persentase AI dan persentase asli. Tidak ada kategori tidak pasti."
)
if __name__ == "__main__":
iface.launch()
|