Spaces:
Running
Running
| """Violation coordinator — runs every rule against a frame. | |
| Each rule module exposes CODE / NAME / SEVERITY, a `status()` and a | |
| `check(scene)`. Add a new violation type by dropping a module in `rules/` | |
| and registering it here. | |
| """ | |
| import numpy as np | |
| from app.models.rules import ( | |
| base, | |
| helmet, | |
| parking, | |
| red_light, | |
| seatbelt, | |
| triple_riding, | |
| wrong_side, | |
| ) | |
| RULES = [triple_riding, helmet, red_light, seatbelt, wrong_side, parking] | |
| def analyze(detections: list[dict], image: np.ndarray) -> list[dict]: | |
| scene = base.Scene(image=image, detections=detections) | |
| out: list[dict] = [] | |
| for rule in RULES: | |
| out.extend(rule.check(scene)) | |
| return out | |
| def catalog() -> list[dict]: | |
| """The full violation catalogue with each rule's current status.""" | |
| return [ | |
| {"code": r.CODE, "name": r.NAME, "severity": r.SEVERITY, "status": r.status()} | |
| for r in RULES | |
| ] | |