Inspiration

It started with a real problem: how do you find the same vehicle appearing twice across thousands of camera snapshots? Security teams, parking operators, and traffic analysts deal with this daily—manually scrolling through endless images, trying to spot matching license plates. It's slow, exhausting, and easy to miss things. We thought: what if AI could do this instantly? Upload your images, and get every matching pair in seconds. No spreadsheets. No guesswork. Just answers. That's how PlateVision was born.

What it does

PlateVision is an AI-powered license plate recognition and matching system. The workflow is simple:

Upload a CSV with image URLs and extracted plate numbers The system groups all images by matching plates Browse results in a clean, searchable gallery Export matched pairs with one click

Key features:

Handles 100,000+ images without breaking a sweat Smart matching that accounts for OCR errors (0↔O, 1↔I, 8↔B) Real-time search—type a plate number, see all matches instantly Paginated gallery that stays fast even with 89K records One-click export of matched pairs

How we built it

Backend Pipeline:

Used fast-alpr with YOLOv9 for license plate detection GPU-accelerated inference on NVIDIA RTX A4500 via RunPod Async downloads with aiohttp (500 concurrent connections) to maximize throughput SQLite for caching results and enabling resume capability Flask API serving paginated data to keep the frontend snappy

Matching Algorithm:

Canonicalized plates to handle common OCR confusion (0→O, 1→I, 8→B, 5→S) Grouped plates by canonical form for O(n) matching instead of O(n²) Strict length matching to minimize false positives

Frontend:

React-based gallery with glass-morphism design Server-side pagination (100 items per page) Lazy image loading for smooth scrolling Real-time filtering by confidence, search query, and match status

Challenges we ran into

  1. Speed at Scale Processing 100K images at 11 img/s meant 2.5 hours of waiting. Unacceptable. We profiled the pipeline and discovered the bottleneck was network downloads, not GPU inference. Switching from synchronous requests to async aiohttp with 500 concurrent connections tripled our throughput.
  2. GPU Not Being Utilized Despite having an RTX A4500, nvidia-smi showed 0% GPU usage. Turned out ONNX Runtime was defaulting to TensorRT (which wasn't installed) and silently falling back to CPU. We had to explicitly disable TensorRT and force CUDAExecutionProvider.
  3. Too Many False Positives Early versions matched plates too aggressively. "ABC123" was pairing with "ABE128" due to fuzzy matching. We tightened the algorithm to only accept exact canonical matches, cutting false positives by 90%.
  4. Browser Crashing on Large Datasets Loading 89K image cards at once killed the browser tab. Server-side pagination was the fix—now we only send 100 items at a time, and the UI stays buttery smooth.

Accomplishments that we're proud of

Scaled to 100K images with stable memory usage and no crashes 96%+ matching accuracy with minimal false positives Clean, intuitive UI that makes results immediately understandable Resume capability—if processing stops, it picks up where it left off Sub-second search across 89K plates Built the entire system in under 48 hours

What we learned

Technical insights:

Network I/O is often the real bottleneck, not GPU compute OCR errors follow predictable patterns—building a confusion matrix dramatically improves matching Pagination isn't optional at scale—it's essential Sometimes simpler is better: single-pass detection beat our fancy multi-pass approach

Design philosophy:

Strict matching beats fuzzy matching (fewer false positives > more matches) Show results visually—a gallery is worth a thousand spreadsheets Build for the worst case (89K records) and everything else feels fast

What's next for PlateVision

Real-time video processing — Connect to live camera feeds Multi-camera correlation — Track vehicles across different locations Vehicle make/model detection — Add another layer of identification Mobile app — Scan plates on the go Public API — Let others build on top of PlateVision Cloud deployment — One-click hosted solution

We're just getting started. "Find the same car, twice."

Built With

Share this project:

Updates