AnemiaLens / backend /scripts /test_model.py
asnannp's picture
sync: sync backend code, models, schemas, and API routers to Hugging Face Space cleanly
f559cc0
Raw
History Blame Contribute Delete
1.72 kB
import joblib, sys
sys.path.insert(0, 'backend')
from app.ml.archive_model import predict_with_archive_model
from app.ml.features import FEATURE_NAMES
m = joblib.load('backend/models/archive_screening_model.joblib')
test_cases = [
("PALE (anemic)", 0.28, 0.02, 0.22),
("BORDERLINE", 0.35, 0.04, 0.30),
("NORMAL", 0.44, 0.08, 0.38),
("VERY HEALTHY", 0.48, 0.10, 0.42),
]
for label, cpi, rg, br in test_cases:
feat_map = {n: 0.0 for n in FEATURE_NAMES}
feat_map['cpi'] = cpi
feat_map['center_cpi'] = cpi - 0.01
feat_map['mean_r'] = cpi * 0.9
feat_map['mean_g'] = cpi * 0.9 - rg
feat_map['mean_b'] = cpi * 0.7
feat_map['red_green_gap'] = rg
feat_map['center_red_green_gap'] = rg
feat_map['brightness'] = br
feat_map['green_blue_ratio'] = 1.1 if cpi < 0.35 else 1.25
feat_map['center_mean_r'] = feat_map['mean_r']
feat_map['center_mean_g'] = feat_map['mean_g']
feat_map['center_mean_b'] = feat_map['mean_b']
feat_map['contrast'] = 0.12
feat_map['center_contrast'] = 0.12
feat_map['center_brightness'] = br
feat_map['blur_score'] = 100.0
feat_map['center_blur_score'] = 120.0
feat_map['saturation'] = 0.3
feat_map['center_saturation'] = 0.3
feat_map['hist_mid'] = 0.5
feat_map['hist_bright'] = 0.3
feat_map['aspect_ratio'] = 1.0
feat_map['size_score'] = 1.0
result = predict_with_archive_model(m, feat_map, source_hint='roi_original')
hb = result['predicted_hemoglobin']
risk = result['anemia_risk']
unc = result['uncertainty']
decision = "ANEMIA LIKELY" if risk >= 0.65 else "unlikely"
print(f"{label}: Hb={hb:.1f}, risk={risk:.3f}, uncertainty={unc:.3f} -> {decision}")