1 · Camera & calibration zones
Accuracy strategy: cards go in the fixed zones below (hole cards bottom, board across the middle), camera top-down with even light. Each zone is read by its top-left corner crop (rank+suit corner) — that is what real recognizers read. Drag-free zones = no search problem, far fewer misreads.
Recognizer status: pluggable hook, manual-confirm implementation shipped.
No ML model is bundled — nothing is auto-read until a recognizer (template matcher / on-device model / AI tier) is plugged into
window.PokerRecognizer.recognize(). Sampling without one leaves slots uncertain (by design — we do not fake reads).
The Simulate button feeds the demo hand through the voting machine so you can see acceptance work end-to-end (clearly a simulation, not ML).
1b · Auto-calibration Phase 2
One tap analyses the live frame: a quality gate from real pixels (blur / glare / brightness, each PASS/FAIL with guidance), and a CV zone proposal — bright-blob segmentation filtered by poker-card aspect ratio (1.30–1.50). AI proposes, CV verifies: the AI scene-proposal is a documented hook (disabled/mock, no key wired); the CV proposal below is fully local geometry. Accepting saves a scene profile (zones + scene fingerprint) that auto-loads next visit; if the scene drifts, you'll be told to recalibrate.
No proposal yet.
2 · Card slots — crops, corner zoom, threshold preview, confirmation
Tap a slot to select it, then set its card. Statuses: accepted uncertain manual empty. A recognizer reading is only accepted after the same card wins the required votes above the confidence bar.
2b · Self-learning deck Phase 2
The template recognizer only reads cards it has learned — from a card's corner (rank+suit) signature, stored in this browser. Two ways to teach it: enrollment below (show one card in the learn zone, confirm it, 5 frames are averaged into its template), and passive learning — every card you confirm/correct in a slot above is captured automatically. If two slots ever read the same card, the lower-confidence copy is flagged back to uncertain with a warning.
3 · Money & decision
4 · AI review tier disabled by default · mock mode
On demand only — sends the restored state JSON + per-slot corner crops (never raw video), and only when the state changed
or a slot is low-confidence. Mock mode returns a structured mock review locally; wiring a real vision endpoint (e.g. Gemini via a key-holding proxy)
is a separate approved step. See ai_review.js.
5 · This device — what the browser can actually use
Short version: for this workload the browser is not the bottleneck — WebGPU + multi-threaded WASM reach most of the machine's GPU/CPU. Real limits and the native escape hatch are in the README.