Fix couleur véhicule, supprime filtre caméra, améliore debug

- Couleur : crop autour de la plaque (zone carrosserie au-dessus) au lieu du frame entier ; fallback center 50% si pas de plaque
- lpr.read_plate() retourne maintenant (text, conf, bbox) pour exposer la position de la plaque
- Index : supprime filtre caméra et badge caméra (une seule caméra)
- Carte index : badge ▶ clip si clip disponible
- Page détail : section debug (nb frames, taille clip, id), gestion propre des anciens événements sans clip/frames

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
perco
2026-06-02 16:19:29 +02:00
co-authored by Claude Sonnet 4.6
parent 528a158c42
commit 8c2af7dfab
5 changed files with 132 additions and 127 deletions
+16 -3
View File
@@ -78,6 +78,11 @@ async def index(
})
CAPTURE_DURATION = int(os.environ.get("CAPTURE_DURATION", "15"))
CAPTURE_FPS = int(os.environ.get("CAPTURE_FPS", "5"))
TOP_FRAMES = int(os.environ.get("TOP_FRAMES", "10"))
@app.get("/event/{event_id}", response_class=HTMLResponse)
async def event_detail(request: Request, event_id: str):
ev = database.get_event(event_id)
@@ -86,18 +91,26 @@ async def event_detail(request: Request, event_id: str):
ev["time_str"] = ts_to_str(ev["start_time"])
# List frames for this event
event_dir = os.path.join(EVENTS_DIR, event_id)
frame_paths = sorted(glob.glob(os.path.join(event_dir, "frame_*.jpg")))
frames = [f"events/{event_id}/frame_{i+1:04d}.jpg" for i in range(len(frame_paths))]
frames = [f"events/{event_id}/{os.path.basename(p)}" for p in frame_paths]
has_clip = ev.get("clip_path") and os.path.exists(os.path.join("/data", ev["clip_path"]))
clip_abs = os.path.join("/data", ev["clip_path"]) if ev.get("clip_path") else None
has_clip = bool(clip_abs and os.path.exists(clip_abs))
clip_size = ""
if has_clip:
size = os.path.getsize(clip_abs)
clip_size = f"{size // 1024 // 1024}MB" if size > 1024 * 1024 else f"{size // 1024}KB"
return templates.TemplateResponse("event_detail.html", {
"request": request,
"ev": ev,
"frames": frames,
"has_clip": has_clip,
"clip_size": clip_size,
"capture_duration": CAPTURE_DURATION,
"capture_total": CAPTURE_DURATION * CAPTURE_FPS,
"top_frames": TOP_FRAMES,
})