Spaces:
Sleeping
Sleeping
adidtiya commited on
Commit ·
610e32e
1
Parent(s): 0f8da20
Deploy Deepfake Shield Backend v2.0
Browse files- detector.py +9 -7
detector.py
CHANGED
|
@@ -141,9 +141,10 @@ class FaceDeepfakeDetector:
|
|
| 141 |
df1_score = self._classify_image(face_crop, model_loader.face_deepfake_model)
|
| 142 |
df2_score = self._classify_image(face_crop, model_loader.face_deepfake_model_2)
|
| 143 |
|
| 144 |
-
#
|
| 145 |
-
#
|
| 146 |
-
|
|
|
|
| 147 |
|
| 148 |
face_scores.append(score)
|
| 149 |
face_boxes.append([x1, y1, x2 - x1, y2 - y1])
|
|
@@ -154,16 +155,17 @@ class FaceDeepfakeDetector:
|
|
| 154 |
# Oleh karena itu, prioritas utama adalah skor dari potongan wajah.
|
| 155 |
|
| 156 |
if len(face_scores) > 0:
|
| 157 |
-
# Jika ada
|
| 158 |
-
#
|
| 159 |
-
|
|
|
|
| 160 |
|
| 161 |
# Kita tidak mencampur dengan full_frame_score karena model wajah tidak cocok
|
| 162 |
# untuk full-frame yang memiliki background luas (sering salah tebak REAL).
|
| 163 |
|
| 164 |
logger.info(
|
| 165 |
f"📊 Skor Wajah={[round(s,3) for s in face_scores]} "
|
| 166 |
-
f"-> Final Score (
|
| 167 |
)
|
| 168 |
else:
|
| 169 |
# Jika sama sekali tidak ada wajah, sebagai fallback kita cek full frame.
|
|
|
|
| 141 |
df1_score = self._classify_image(face_crop, model_loader.face_deepfake_model)
|
| 142 |
df2_score = self._classify_image(face_crop, model_loader.face_deepfake_model_2)
|
| 143 |
|
| 144 |
+
# Model 2 (Prithiv) sering memberikan 'False Positive' pada wajah asli yang jernih.
|
| 145 |
+
# Jadi kita berikan bobot lebih besar ke Model 1 (Wvolf) yang lebih seimbang.
|
| 146 |
+
# Bobot: 70% Model 1, 30% Model 2.
|
| 147 |
+
score = (df1_score * 0.7) + (df2_score * 0.3)
|
| 148 |
|
| 149 |
face_scores.append(score)
|
| 150 |
face_boxes.append([x1, y1, x2 - x1, y2 - y1])
|
|
|
|
| 155 |
# Oleh karena itu, prioritas utama adalah skor dari potongan wajah.
|
| 156 |
|
| 157 |
if len(face_scores) > 0:
|
| 158 |
+
# Jika ada banyak wajah, mengambil min() akan menyebabkan foto grup yang asli
|
| 159 |
+
# menjadi FAKE hanya karena 1 wajah buram/menghadap samping (skor rendah).
|
| 160 |
+
# Menggunakan rata-rata (mean) jauh lebih stabil untuk foto grup.
|
| 161 |
+
representative_score = float(np.mean(face_scores))
|
| 162 |
|
| 163 |
# Kita tidak mencampur dengan full_frame_score karena model wajah tidak cocok
|
| 164 |
# untuk full-frame yang memiliki background luas (sering salah tebak REAL).
|
| 165 |
|
| 166 |
logger.info(
|
| 167 |
f"📊 Skor Wajah={[round(s,3) for s in face_scores]} "
|
| 168 |
+
f"-> Final Score (Mean)={representative_score:.3f}"
|
| 169 |
)
|
| 170 |
else:
|
| 171 |
# Jika sama sekali tidak ada wajah, sebagai fallback kita cek full frame.
|