The problem
In UNO, tracking whose turn it is (with skips, reverses, and draw-fours) is easy to lose track of; a companion device can watch the discard pile and keep the table in sync.
The commercial viability hinges on one question: can commodity computer vision recognize UNO cards accurately enough (color + value) to be trusted?
That feasibility had to be proven before committing to a fixed-price build contract.
The approach
Build a simulator-first MVP that validates the CV pipeline end-to-end before any hardware or app work, so the go/no-go decision rests on measured accuracy.
Detect and rectify the card geometry, infer color via HSV analysis, then classify the value by normalized-correlation template matching against canonical card templates.
Wrap the pipeline in a test harness, a benchmark tool that reports per-card accuracy, and a mock-device emulator that mirrors the eventual ESP32 protocol — deferring the Flutter desktop scaffold until the CV proved out.
What I built
- A modular OpenCV CV pipeline: geometry rectification, color classification, and template-matching card-value classifier over a canonical card set
- A benchmark harness that runs the pipeline over image sets and emits per-card and per-image accuracy reports with confidences
- A card-recognition test harness and a synthetic fixture set generated from the official card-template artwork
- A mock-device emulator (FastAPI + WebSockets, ESP32 protocol shape) to stand in for firmware during feasibility
- A full test suite covering the classifier, color, geometry, templates, pipeline, emulator protocol, and benchmark metrics
- Contract-decision docs: feasibility report, design spec, proposal, and handoff for the intended Flutter app + ESP32 build
- Python
- OpenCV
- numpy
- Pillow
- FastAPI
- WebSockets
- Flutter (planned)
- ESP32 (planned)
- pytest
Result
The CV pipeline ran end-to-end and hit 92.6% on 54 synthetic fixtures — clearing the 90%+ feasibility gate — with the report explicitly cautioning that the real go/no-go must be re-run on physical webcam captures, not template-derived synthetic images.
- 92.6% classification accuracy on 54 synthetic card fixtures (feasibility report), against a 90%+ contract-decision gate