MetaQu commited on
Commit
f658766
·
verified ·
1 Parent(s): 923a637

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -36
app.py CHANGED
@@ -1,51 +1,69 @@
1
  import gradio as gr
2
  from transformers import pipeline
3
  from PIL import Image
 
4
 
5
- # Model utama untuk deteksi real vs AI
6
- detector = pipeline("image-classification", model="umm-maybe/AI-image-detector")
7
-
8
- # Model tambahan general classifier (backup)
9
- general = pipeline("image-classification", model="google/vit-base-patch16-224")
10
-
11
- def detect_image(img):
12
- try:
13
- # Prediksi dengan AI detector
14
- result1 = detector(img)
15
- label1 = result1[0]['label']
16
- conf1 = round(result1[0]['score'] * 100, 2)
17
-
18
- # Prediksi dengan model general (untuk cek ganda)
19
- result2 = general(img)
20
- label2 = result2[0]['label']
21
- conf2 = round(result2[0]['score'] * 100, 2)
22
-
23
- # Logika sederhana untuk memutuskan hasil
24
- if "fake" in label1.lower() or "artificial" in label1.lower():
25
- final = f"⚠️ Kemungkinan Besar AI Generated ({conf1}%)"
26
- elif "real" in label1.lower():
27
- final = f"✅ Kemungkinan Besar Foto Asli ({conf1}%)"
28
- else:
29
- final = f"⚠️ Tidak Pasti (cek manual)"
30
-
31
- output = f"""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  ### Hasil Deteksi:
33
- {final}
34
 
35
- **Model AI-detector:** {label1} ({conf1}%)
36
- **Model General (ViT):** {label2} ({conf2}%)
37
  """
38
- return output
39
- except Exception as e:
40
- return f"Terjadi error: {str(e)}"
41
 
42
- # UI Gradio
 
 
43
  iface = gr.Interface(
44
  fn=detect_image,
45
  inputs=gr.Image(type="pil"),
46
  outputs="markdown",
47
- title="AI vs Real Image Detector",
48
- description="Upload foto untuk mendeteksi apakah gambar kemungkinan besar asli atau hasil AI."
49
  )
50
 
51
  if __name__ == "__main__":
 
1
  import gradio as gr
2
  from transformers import pipeline
3
  from PIL import Image
4
+ import numpy as np
5
 
6
+ # ----------------------------
7
+ # Inisialisasi model publik
8
+ # ----------------------------
9
+ model1 = pipeline("image-classification", model="microsoft/resnet-50")
10
+ model2 = pipeline("image-classification", model="google/vit-base-patch16-224")
11
+
12
+ # ----------------------------
13
+ # Fungsi deteksi dengan ensemble
14
+ # ----------------------------
15
+ def detect_image(image):
16
+ results = []
17
+
18
+ # Model 1
19
+ res1 = model1(image)[0]
20
+ label1, score1 = res1['label'].lower(), res1['score']
21
+ label1_final = 'human' if 'person' in label1 or 'human' in label1 else 'ai'
22
+ results.append((label1_final, score1))
23
+
24
+ # Model 2
25
+ res2 = model2(image)[0]
26
+ label2, score2 = res2['label'].lower(), res2['score']
27
+ label2_final = 'human' if 'person' in label2 or 'human' in label2 else 'ai'
28
+ results.append((label2_final, score2))
29
+
30
+ # ----------------------------
31
+ # Voting + threshold
32
+ # ----------------------------
33
+ votes = [r[0] for r in results]
34
+ final_label = max(set(votes), key=votes.count)
35
+
36
+ # Rata-rata confidence untuk label final
37
+ relevant_scores = [s for (l, s) in results if l == final_label]
38
+ avg_confidence = np.mean(relevant_scores) * 100
39
+
40
+ # Tentukan hasil akhir
41
+ if avg_confidence < 80:
42
+ final_result = "⚠️ Tidak Pasti (cek manual)"
43
+ elif final_label == 'human':
44
+ final_result = f"✅ Foto Asli ({avg_confidence:.2f}%)"
45
+ else:
46
+ final_result = f"🤖 AI Detected ({avg_confidence:.2f}%)"
47
+
48
+ # Detail per model
49
+ output = f"""
50
  ### Hasil Deteksi:
51
+ {final_result}
52
 
53
+ **Model 1 (ResNet-50):** {label1} ({score1*100:.2f}%)
54
+ **Model 2 (ViT):** {label2} ({score2*100:.2f}%)
55
  """
56
+ return output
 
 
57
 
58
+ # ----------------------------
59
+ # Gradio Interface
60
+ # ----------------------------
61
  iface = gr.Interface(
62
  fn=detect_image,
63
  inputs=gr.Image(type="pil"),
64
  outputs="markdown",
65
+ title="AI vs Foto Asli Detector",
66
+ description="Unggah gambar, sistem akan mendeteksi apakah gambar kemungkinan besar asli atau dihasilkan AI menggunakan ensemble 2 model publik + voting."
67
  )
68
 
69
  if __name__ == "__main__":