MetaQu commited on
Commit
2882491
·
verified ·
1 Parent(s): e17a580

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -24
app.py CHANGED
@@ -4,61 +4,56 @@ from PIL import Image
4
  import numpy as np
5
 
6
  # ----------------------------
7
- # Inisialisasi model
8
  # ----------------------------
9
 
10
- # Model A: AI detector wajah
11
- model_a = pipeline("image-classification", model="rodrigoberriel/real-or-fake-face")
12
 
13
- # Model B: AI detector general (misal: resnet-50)
14
  model_b = pipeline("image-classification", model="microsoft/resnet-50")
15
 
16
- # Model C: General image classifier
17
  model_c = pipeline("image-classification", model="google/vit-base-patch16-224")
18
 
19
  # ----------------------------
20
- # Fungsi prediksi dengan ensemble
21
  # ----------------------------
22
  def detect_image(image):
23
  results = []
24
-
25
  # Model A
26
  res_a = model_a(image)[0]
27
  label_a, score_a = res_a['label'].lower(), res_a['score']
28
- results.append((label_a, score_a))
29
-
 
 
30
  # Model B
31
  res_b = model_b(image)[0]
32
  label_b, score_b = res_b['label'].lower(), res_b['score']
33
- # Simplifikasi: jika label mirip 'human' atau 'person' = human, lainnya = AI
34
- if 'human' in label_b or 'person' in label_b:
35
- label_b_final = 'human'
36
- else:
37
- label_b_final = 'ai'
38
  results.append((label_b_final, score_b))
39
-
40
  # Model C
41
  res_c = model_c(image)[0]
42
  label_c, score_c = res_c['label'].lower(), res_c['score']
43
- if 'human' in label_c or 'person' in label_c:
44
- label_c_final = 'human'
45
- else:
46
- label_c_final = 'ai'
47
  results.append((label_c_final, score_c))
48
-
49
  # ----------------------------
50
  # Voting + Threshold
51
  # ----------------------------
52
  votes = [r[0] for r in results]
53
  scores = [r[1] for r in results]
54
-
55
  # Mayoritas voting
56
  final_label = max(set(votes), key=votes.count)
57
-
58
  # Rata-rata confidence untuk final label
59
  relevant_scores = [s for (l, s) in results if l == final_label]
60
  avg_confidence = np.mean(relevant_scores) * 100 # ke persen
61
-
62
  # Tentukan hasil akhir
63
  if avg_confidence < 80:
64
  return "⚠️ Tidak Pasti (cek manual)", round(avg_confidence, 2)
@@ -75,7 +70,7 @@ iface = gr.Interface(
75
  inputs=gr.Image(type="pil"),
76
  outputs=[gr.Textbox(label="Hasil Deteksi"), gr.Number(label="Confidence (%)")],
77
  title="AI vs Foto Asli Detector",
78
- description="Unggah gambar, sistem akan mendeteksi apakah gambar asli atau dihasilkan AI menggunakan ensemble 3 model + voting."
79
  )
80
 
81
  iface.launch()
 
4
  import numpy as np
5
 
6
  # ----------------------------
7
+ # Inisialisasi model publik
8
  # ----------------------------
9
 
10
+ # Model A: Deteksi wajah
11
+ model_a = pipeline("image-classification", model="qualcomm/MediaPipe-Face-Detection")
12
 
13
+ # Model B: Klasifikasi gambar umum
14
  model_b = pipeline("image-classification", model="microsoft/resnet-50")
15
 
16
+ # Model C: Klasifikasi gambar umum
17
  model_c = pipeline("image-classification", model="google/vit-base-patch16-224")
18
 
19
  # ----------------------------
20
+ # Fungsi deteksi dengan ensemble
21
  # ----------------------------
22
  def detect_image(image):
23
  results = []
24
+
25
  # Model A
26
  res_a = model_a(image)[0]
27
  label_a, score_a = res_a['label'].lower(), res_a['score']
28
+ # Sederhanakan: ada wajah = human, tidak = AI
29
+ label_a_final = 'human' if 'face' in label_a else 'ai'
30
+ results.append((label_a_final, score_a))
31
+
32
  # Model B
33
  res_b = model_b(image)[0]
34
  label_b, score_b = res_b['label'].lower(), res_b['score']
35
+ label_b_final = 'human' if 'person' in label_b or 'human' in label_b else 'ai'
 
 
 
 
36
  results.append((label_b_final, score_b))
37
+
38
  # Model C
39
  res_c = model_c(image)[0]
40
  label_c, score_c = res_c['label'].lower(), res_c['score']
41
+ label_c_final = 'human' if 'person' in label_c or 'human' in label_c else 'ai'
 
 
 
42
  results.append((label_c_final, score_c))
43
+
44
  # ----------------------------
45
  # Voting + Threshold
46
  # ----------------------------
47
  votes = [r[0] for r in results]
48
  scores = [r[1] for r in results]
49
+
50
  # Mayoritas voting
51
  final_label = max(set(votes), key=votes.count)
52
+
53
  # Rata-rata confidence untuk final label
54
  relevant_scores = [s for (l, s) in results if l == final_label]
55
  avg_confidence = np.mean(relevant_scores) * 100 # ke persen
56
+
57
  # Tentukan hasil akhir
58
  if avg_confidence < 80:
59
  return "⚠️ Tidak Pasti (cek manual)", round(avg_confidence, 2)
 
70
  inputs=gr.Image(type="pil"),
71
  outputs=[gr.Textbox(label="Hasil Deteksi"), gr.Number(label="Confidence (%)")],
72
  title="AI vs Foto Asli Detector",
73
+ description="Unggah gambar, sistem akan mendeteksi apakah gambar asli atau dihasilkan AI menggunakan ensemble 3 model publik + voting."
74
  )
75
 
76
  iface.launch()