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