Spaces:
Running
Running
Commit History
-
fix(analyzer): overlay BallID honours ball-set profile
The overlay called identify_balls with the standard palette while balls_init used the job's profile, so a Dynaspheres set (5 purple, not orange) would be numbered one way in the video and another on the metric table -- one statement to the viewer, two answers. Read the profile once per job and hand it to both. Gate: 2 tests, both layers pass the same table; pytest 2x green, 2 venvs.5b4ac58 -
feat(analyzer): track-gated low-conf recovery for live tracks
Detect at DET_CONF_FLOOR 0.05 and read the answer in two bands: above op_conf nothing changes anywhere, below it a detection may only extend a track already alive, inside that track's gate, when no high candidate is in it. IN_TOL_M gates the low band too -- the probe found boxes past the far cushion projecting 1.7 m off the cloth. Gate: 13 unit tests over both trackers; pytest 2x green on both venvs.562bec5 -
feat(analyzer): hybrid detect imgsz 960 with 1280 first-frame pass
Balls at the far rail are ~22 px wide and imgsz 640 shrinks them to 7, which is why shot_02 never had ball 5. 960 for every frame costs 2.1x, and the one frame balls_init is built from is read at 1280, where that ball reads 0.688 instead of 0.208. Segmentation stays at 640. Gate: shot_02 balls_init has a ball 0.0158 m from (1.145, 2.468) at conf 0.688 >= OP_CONF 0.2993; pytest 2x green on both venvs.9694f55 -
feat(analyzer): load ball-set colour profile for BallID
The tournament uses Dynaspheres Titan (the 5 is purple, not orange), so a correctly detected ball still gets the wrong number. load_profile reads a JSON of palette / white_range / the ball-8 thresholds; the method's own constants stay unreachable from it. With POOLCOACH_BALLID_PROFILE unset nothing moves: no key in the job JSON, the default palette, and the 14 demo shots still serialise without one. pytest green 3x in both venvs.d5faecf
-
refactor(analyzer): translate server-generated strings to English
The app is going one language; Vietnamese error and warning text in an otherwise English code base made every reader switch twice. Gate: pytest 68 passed; AST identical after blanking every string on all 7 modules, cv_worker only by the _CONF_LABEL_VI -> _CONF_LABEL rename (the VI suffix stops meaning anything once the labels are English). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>fe8d0e2 -
refactor(analyzer): translate identifiers and comments to English
Comments, docstrings, identifiers and test names are now English, including the Dockerfile and .dockerignore reasoning. Strings the user reads stay Vietnamese, because the product's UI language is Vietnamese: HTTP error details, per-shot reasons, warnings and the CSV headers. Semantics are unchanged -- an AST comparison with string constants blanked is identical for every module except three renamed locals; pytest 68 passed.876aff5 -
feat(analyzer): port analyzer pipeline from poolcoach-rl
Traced the import graph from the Analyzer routes: app store/transport/ embedded worker, src/poolcoach_cv end to end, cv_worker, the multi-shot contract test, the packaged demo video and the Hugging Face deploy set. The suggestion engine, drills, QR/TV and the image-scan job stay behind, so their routes, schemas, tables and front-end sections are gone with them; /api/table now reads pooltool directly (src/poolcoach_sim/table.py).da25347