Spaces:
Sleeping
Sleeping
File size: 1,850 Bytes
8c30b41 f23fa83 f658766 f23fa83 923a637 f658766 f23fa83 f658766 f23fa83 f658766 f23fa83 f658766 f23fa83 f658766 f23fa83 f658766 f23fa83 f658766 923a637 f658766 923a637 f23fa83 923a637 f658766 923a637 f658766 c03cdfb 8c30b41 923a637 f23fa83 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 |
import gradio as gr
from PIL import Image, ImageStat, ExifTags
import numpy as np
import cv2
# ----------------------------
# Fungsi hitung sharpness / blur
# ----------------------------
def calculate_blur(image):
image_cv = np.array(image.convert("L")) # konversi ke grayscale
laplacian_var = cv2.Laplacian(image_cv, cv2.CV_64F).var()
return laplacian_var
# ----------------------------
# Fungsi deteksi metadata
# ----------------------------
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
# ----------------------------
# Fungsi prediksi AI vs Real
# ----------------------------
def detect_image(image):
blur_score = calculate_blur(image)
exif_present = has_camera_exif(image)
# Threshold empiris (bisa disesuaikan)
# blur rendah + metadata β Foto Asli
# blur tinggi + tidak ada metadata β AI
if exif_present or blur_score > 100:
final_result = f"β
Foto Asli"
else:
final_result = f"π€ AI Detected"
output = f"""
### Hasil Deteksi:
{final_result}
**Blur Score:** {blur_score:.2f}
**Metadata Kamera:** {'Ada' if exif_present else 'Tidak Ada'}
"""
return output
# ----------------------------
# Gradio Interface
# ----------------------------
iface = gr.Interface(
fn=detect_image,
inputs=gr.Image(type="pil"),
outputs="markdown",
title="AI vs Foto Asli Detector (Gratis)",
description="Unggah gambar, sistem akan mendeteksi apakah gambar kemungkinan besar asli atau dihasilkan AI berdasarkan analisis blur dan metadata."
)
if __name__ == "__main__":
iface.launch()
|