Spaces:
Running
Running
| """Phase 1.2 smoke test: download a sample image and run the ViT classifier. | |
| Run from backend/: | |
| .venv/Scripts/python.exe scripts/test_image_classify.py | |
| """ | |
| from __future__ import annotations | |
| import sys | |
| import urllib.request | |
| from pathlib import Path | |
| sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) | |
| import base64 | |
| from models.heatmap_generator import generate_heatmap_base64 | |
| from services.artifact_detector import scan_artifacts | |
| from services.image_service import preprocess_and_classify | |
| from utils.scoring import compute_authenticity_score, get_verdict_label | |
| SAMPLE_URL = "https://picsum.photos/seed/deepshield/512/512" | |
| def main() -> int: | |
| print(f"Fetching sample image: {SAMPLE_URL}") | |
| req = urllib.request.Request(SAMPLE_URL, headers={"User-Agent": "DeepShield/0.1"}) | |
| with urllib.request.urlopen(req, timeout=30) as r: | |
| data = r.read() | |
| print(f" got {len(data)} bytes") | |
| print("Running classifier (first run will download model ~350MB)…") | |
| pil, result = preprocess_and_classify(data) | |
| print(f" image size: {pil.size}") | |
| print(f" label: {result.label}") | |
| print(f" confidence: {result.confidence:.4f}") | |
| print(f" all scores: {result.all_scores}") | |
| score = compute_authenticity_score(result.confidence, result.label) | |
| verdict_label, severity = get_verdict_label(score) | |
| print(f"\n authenticity_score: {score}") | |
| print(f" verdict: {verdict_label} ({severity})") | |
| print("\nScanning artifact indicators\u2026") | |
| for ind in scan_artifacts(pil, data): | |
| print(f" [{ind.severity.upper():6s}] {ind.type}: {ind.description} (conf {ind.confidence:.2f})") | |
| print("\nGenerating Grad-CAM heatmap\u2026") | |
| heatmap_url, heatmap_source = generate_heatmap_base64(pil) | |
| print(f" heatmap source: {heatmap_source}") | |
| if not heatmap_url: | |
| print(" no heatmap (no face or fallback)") | |
| return 0 | |
| header, b64 = heatmap_url.split(",", 1) | |
| out_path = Path(__file__).resolve().parent.parent / "heatmap_smoketest.png" | |
| out_path.write_bytes(base64.b64decode(b64)) | |
| print(f" saved: {out_path}") | |
| print(f" data URL length: {len(heatmap_url)} chars") | |
| return 0 | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) | |