Back
Computer Vision

A Computer-Vision Platform for Real-Time Parking Occupancy and Vehicle Number-Plate Recognition

How Pfactorial Technologies built a Flask-based vision system that monitors parking slot occupancy across multiple camera feeds and reads vehicle number plates from uploaded images.

August 21, 2026
Share
ENGAGEMENT SNAPSHOT

Pfactorial_Case_Study_SmartTransportation image 1
Figure 1 - Key figures from this engagement, at a glance.
EXECUTIVE SUMMARY
Our client needed automated visibility into parking slot occupancy and vehicle identification across sites such as malls, theatres, and security checkpoints, without retrofitting a dedicated hardware sensor into every parking bay.
Hardware sensors per slot are expensive to install and maintain at scale, and manual plate lookup doesn't hold up under real-time demand; what was needed was a vision-based approach that worked directly off existing camera feeds and uploaded images, not new physical infrastructure in every bay.
Pfactorial built a Flask platform combining a calibrated, camera-based occupancy-detection pipeline with a Haar-cascade-and-OCR pipeline for number-plate extraction, streaming both to a browser-based monitoring interface in real time.
Why this engagement is representative This engagement demonstrates Pfactorial's ability to combine classical computer vision with modern OCR into one deployable monitoring tool that runs on camera infrastructure a site already has.
THE CHALLENGE
Replacing hardware sensors with camera-based monitoring meant solving problems that only show up once a system has to run continuously across a real site.

1. Per-slot hardware sensors don't scale economically

Retrofitting every bay with a dedicated occupancy sensor is expensive to install and maintain across a large lot, so a camera-based approach needed to substitute for it entirely.

2. Parking geometry differs at every site

Each lot's slots sit at different positions and angles, so the system needs a way to calibrate slot coordinates per site rather than hard-coding a single fixed layout.

3. Number plates arrive as arbitrary uploaded images, not a controlled scan

Extracting a clean plate crop from a front- or back-view photo under normal lighting variation is a distinct computer-vision problem from occupancy detection, and needed its own pipeline.

4. Multiple camera feeds have to run and stream concurrently

The platform needed to serve several live-processed video streams to a browser interface at once, not just process a single feed offline.
The real brief Not "put a sensor in every parking spot" but "read occupancy and identify vehicles directly from camera footage and photos, so the physical lot never needs new hardware to be monitored."
THE SOLUTION
Pfactorial built a Flask platform that pairs a calibrated occupancy-monitoring pipeline with a separate plate-recognition pipeline, both served through one browser-based interface.
Pfactorial_Case_Study_SmartTransportation image 2
Figure 1 - Occupancy monitoring and plate recognition run as two independent pipelines behind one shared web interface.

Architectural principles

  • Calibrate once per site, reuse continuously - Slot coordinates are captured manually a single time per lot and then reused by the automated occupancy loop, separating one-time setup from ongoing monitoring.
  • Classical image processing where it's the right tool - Occupancy detection uses grayscale conversion, thresholding, and pixel counting rather than a heavier model, keeping per-frame cost low across four concurrent streams.
  • Two independent detection pipelines, one platform - Slot occupancy and plate recognition run as separate modules behind shared Flask routing, so either can evolve without touching the other.
  • Serve monitoring as a live stream, not a static report - Each camera feed streams as continuously encoded video, so occupancy state is always current rather than polled on demand.
CAPABILITIES DELIVERED
Each capability targets a distinct part of the parking-management and vehicle-identification problem.
CAPABILITY
WHAT IT DOES
Real-time slot occupancy monitoring
Live video from up to four camera feeds is processed continuously to mark each calibrated slot as free or occupied.
Vehicle number-plate recognition
An uploaded front- or back-view image is run through Haar-cascade detection and EasyOCR to extract the plate text.
Per-site slot calibration
A click-based coordinate tool lets an operator define slot positions for a new lot without writing code.
Multi-camera streaming
Four independently addressable video routes serve live processed streams from different cameras or sources.
Web-based monitoring interface
A Flask front end exposes slot status and plate-detection results without a separate desktop application.
Pfactorial_Case_Study_SmartTransportation image 3
Figure 2 - Both pipelines run entirely from existing camera and image inputs, with no per-slot sensor to install.
Design note Pixel-count threshold occupancy detection is fast and camera-agnostic but sensitive to lighting and camera-angle changes - a deliberate trade of simplicity and speed over the robustness a trained occupancy model would add, acceptable at proof-of-concept stage and flagged for hardening before a production rollout.
ENGINEERING FOR SCALE AND RELIABILITY
Five decisions shaped how the two vision pipelines were built to run together on one lightweight Flask service.

Manual slot calibration instead of automatic layout detection

A one-time, click-based coordinate capture avoided the complexity of automatically inferring slot geometry per site, at the cost of requiring setup before monitoring can start.

Pixel-count thresholding instead of a trained occupancy classifier

Grayscale conversion, thresholding, and non-zero pixel counts are cheap enough to run across four concurrent streams without dedicated inference hardware.

Haar cascade for plate localization, EasyOCR for text extraction

A lightweight classical detector narrows the search region before handing off to a deep-learning OCR engine, rather than running full-image OCR on every upload.

Independent routes per camera stream

Each video source gets its own Flask route and generator function, so one feed's processing issue doesn't block the others.

Coordinates stored as plain text files, not a database

Slot layouts are small, per-site, and rarely change, so a lightweight file format was enough for a proof-of-concept deployment.
DELIVERY APPROACH
The build stood up occupancy monitoring and plate recognition as parallel tracks before joining them under one interface.
1. Parking slot calibration tool - building the click-based coordinate capture that records slot positions from a reference video frame.
2. Occupancy detection module - implementing the per-slot check and per-camera streaming functions using grayscale, thresholding, and pixel-count logic.
3. Live video streaming routes - wiring four independent Flask routes to encode and stream each processed camera feed to the browser.
4. Number-plate detection module - building the Haar-cascade-plus-EasyOCR pipeline for extracting plate text from an uploaded image.
5. Web interface & upload handling - building the home and monitoring routes, file upload validation, and result rendering for both pipelines.
RESULTS AND IMPACT

Pfactorial_Case_Study_SmartTransportation image 4
- Key outcomes from this engagement.
The platform processes up to four live camera streams for slot occupancy while separately extracting number-plate text from any uploaded vehicle image, giving one Flask service coverage of both problems the client set out to solve - where a car is, and whose car it is.
Because occupancy detection is calibrated once per site and then runs continuously without further setup, and plate recognition works from a standard uploaded photo rather than specialized capture hardware, the system is deployable against camera infrastructure the client already has.

What it enabled commercially

The client can evaluate automated parking and vehicle-identification workflows using existing camera hardware, informing a build-versus-buy decision on dedicated sensor infrastructure before committing further capital.
WHY PFACTORIAL
This engagement reflects Pfactorial's computer-vision practice: combining classical image-processing techniques with modern OCR models into a single deployable tool, sized to what a proof-of-concept pilot actually needs rather than over-engineering for a scale not yet proven.
Pfactorial_Case_Study_SmartTransportation image 5
- Service lines this engagement draws on.
Engagement enquiries Pfactorial Technologies works with organisations that need to pilot computer-vision monitoring against camera infrastructure they already operate. If you're evaluating a smart-facilities or vehicle-identification platform, we're happy to give you an honest read on scope and risk before anyone commits to anything. · pfactorial.ai
APPENDIX A - TECHNOLOGY STACK
The technology stack underpinning the system, grouped by the layer it serves.
Pfactorial_Case_Study_SmartTransportation image 6

Result and Analysis

ENGAGEMENT SNAPSHOT

How Pfactorial Technologies built a Flask-based vision system that monitors parking slot occupancy across multiple camera feeds and reads vehicle number plates from uploaded images.

Pfactorial_Case_Study_SmartTransportation image 1
Pfactorial_Case_Study_SmartTransportation image 2
Pfactorial_Case_Study_SmartTransportation image 3
Pfactorial_Case_Study_SmartTransportation image 4
Pfactorial_Case_Study_SmartTransportation image 5
Pfactorial_Case_Study_SmartTransportation image 6