DatsuNTOYOTA commited on
Commit
a5f2ea4
·
verified ·
1 Parent(s): a88cdfc

Update app/src/predict_one_image_with_metrics.py

Browse files
app/src/predict_one_image_with_metrics.py CHANGED
@@ -23,9 +23,8 @@ from tag_pin_builder import build_candidate_pins, build_candidate_tags
23
  # =========================
24
 
25
  PROJECT_ROOT = Path(
26
- os.getenv("POSTER_PROJECT_ROOT", str(Path(__file__).resolve().parents[1]))
27
  ).resolve()
28
-
29
  AI_DETECTOR_PATH = PROJECT_ROOT / "artifacts" / "ai_detector" / "ai_detector_logreg.joblib"
30
 
31
  CLIP_MODEL_NAME = "openai/clip-vit-base-patch32"
@@ -600,13 +599,7 @@ def build_neutral_hybrid_row(image_path: Path, embedding: np.ndarray) -> pd.Data
600
  return pd.DataFrame([row])
601
 
602
 
603
- def predict_with_model(model, X: Any) -> Tuple[str, float]:
604
- """
605
- Поддерживает два формата:
606
- 1) обычный sklearn Pipeline / estimator
607
- 2) dict {"preprocessor": ..., "model": ...} для calibrated RF
608
- """
609
- # Новый формат: вручную сохранённый preprocessor + calibrated model
610
  if isinstance(model, dict) and "preprocessor" in model and "model" in model:
611
  X_proc = model["preprocessor"].transform(X)
612
  pred = model["model"].predict(X_proc)[0]
@@ -614,23 +607,20 @@ def predict_with_model(model, X: Any) -> Tuple[str, float]:
614
  if hasattr(model["model"], "predict_proba"):
615
  prob_good = float(model["model"].predict_proba(X_proc)[0, 1])
616
  else:
617
- prob_good = float("nan")
618
-
619
- # Старый формат: обычный sklearn Pipeline / estimator
620
  else:
621
  pred = model.predict(X)[0]
622
 
623
  if hasattr(model, "predict_proba"):
624
  prob_good = float(model.predict_proba(X)[0, 1])
625
  else:
626
- prob_good = float("nan")
627
 
628
- if hasattr(model, "predict_proba"):
629
- prob_good = float(model.predict_proba(X)[0, 1])
630
  else:
631
- prob_good = None
632
-
633
- label = "good" if (prob_good is not None and prob_good >= 0.5) else "bad"
634
  return label, prob_good
635
 
636
 
@@ -1036,6 +1026,8 @@ def main() -> None:
1036
 
1037
  hybrid_logreg_label, hybrid_logreg_prob = predict_with_model(hybrid_logreg, X_hybrid)
1038
  hybrid_rf_label, hybrid_rf_prob = predict_with_model(hybrid_rf, X_hybrid)
 
 
1039
 
1040
  ensemble_prob_good = float(
1041
  0.50 * clip_prob_good +
@@ -1188,9 +1180,9 @@ def main() -> None:
1188
  "prob_good": round(hybrid_logreg_prob, 4),
1189
  },
1190
  "clean_hybrid_random_forest": {
1191
- "label": hybrid_rf_label,
1192
- "prob_good": round(hybrid_rf_prob*(2/3), 4),
1193
- },
1194
  },
1195
  "ai_detection": ai_detection_final,
1196
  "ai_detection_ml": ai_detection_ml,
 
23
  # =========================
24
 
25
  PROJECT_ROOT = Path(
26
+ os.getenv("POSTER_PROJECT_ROOT", "/Practise/app")
27
  ).resolve()
 
28
  AI_DETECTOR_PATH = PROJECT_ROOT / "artifacts" / "ai_detector" / "ai_detector_logreg.joblib"
29
 
30
  CLIP_MODEL_NAME = "openai/clip-vit-base-patch32"
 
599
  return pd.DataFrame([row])
600
 
601
 
602
+ def predict_with_model(model, X):
 
 
 
 
 
 
603
  if isinstance(model, dict) and "preprocessor" in model and "model" in model:
604
  X_proc = model["preprocessor"].transform(X)
605
  pred = model["model"].predict(X_proc)[0]
 
607
  if hasattr(model["model"], "predict_proba"):
608
  prob_good = float(model["model"].predict_proba(X_proc)[0, 1])
609
  else:
610
+ prob_good = None
 
 
611
  else:
612
  pred = model.predict(X)[0]
613
 
614
  if hasattr(model, "predict_proba"):
615
  prob_good = float(model.predict_proba(X)[0, 1])
616
  else:
617
+ prob_good = None
618
 
619
+ if prob_good is not None:
620
+ label = "good" if prob_good >= 0.5 else "bad"
621
  else:
622
+ label = "good" if int(pred) == 1 else "bad"
623
+
 
624
  return label, prob_good
625
 
626
 
 
1026
 
1027
  hybrid_logreg_label, hybrid_logreg_prob = predict_with_model(hybrid_logreg, X_hybrid)
1028
  hybrid_rf_label, hybrid_rf_prob = predict_with_model(hybrid_rf, X_hybrid)
1029
+ hybrid_rf_prob_display = hybrid_rf_prob * (2 / 3)
1030
+ hybrid_rf_label_display = "good" if hybrid_rf_prob_display >= 0.5 else "bad"
1031
 
1032
  ensemble_prob_good = float(
1033
  0.50 * clip_prob_good +
 
1180
  "prob_good": round(hybrid_logreg_prob, 4),
1181
  },
1182
  "clean_hybrid_random_forest": {
1183
+ "label": hybrid_rf_label_display,
1184
+ "prob_good": round(hybrid_rf_prob_display, 4),
1185
+ },
1186
  },
1187
  "ai_detection": ai_detection_final,
1188
  "ai_detection_ml": ai_detection_ml,