
About the project
A multi-tenant AI surveillance platform that runs hybrid across cloud and on-premise sites, combining face recognition, object detection, licence plate reading and natural language video search.
My role: Solution architect and full stack developer, from the service decomposition to the AI microservices and the tenant control plane.
I built SmartGuard AI to fix what classic video surveillance never solves: cameras record everything and reveal nothing. Operators face walls of screens with no way to ask who entered the warehouse after eight, or which vehicle came back three times this week. SmartGuard AI turns raw feeds into a searchable, alertable stream of events, without forcing clients to move sensitive footage off site.
The platform runs as eleven independent services on Google Cloud. I decomposed the original Python monolith with a strangler pattern, extracting detection into dedicated microservices: YOLOv8 for objects and pose, InsightFace with ArcFace embeddings for faces, RapidOCR for licence plates, and a CLIP facade answering natural language searches over recorded video. A separate service restores low resolution frames with Real-ESRGAN and GFPGAN, which is what makes a distant face usable as evidence.
Multi-tenancy is enforced at every layer rather than bolted on. Each client gets isolated identity, per tenant feature flags and its own search deployment, while six shared packages carry the event bus, storage, state, authentication and compute concerns. A sync agent mirrors on-premise recordings to Cloud Storage, so a site with poor connectivity keeps operating locally while the cloud catches up.
Main features
- 🧠 Natural language video search: Ask a question in plain language and the CLIP facade returns the matching moments from recorded footage.
- 👤 Face recognition: InsightFace with ArcFace embeddings identifies known people and flags unknown ones across every camera.
- 🚗 Licence plate reading: RapidOCR extracts plates on CPU, so vehicle history works without a dedicated GPU.
- 🎯 Object and pose detection: YOLOv8 on GPU spots the people, vehicles and postures that matter, such as a fall or an intrusion.
- ✨ Evidence grade enhancement: Real-ESRGAN and GFPGAN upscale and restore faces, turning an unusable distant frame into a readable one.
- 🏢 Strict multi-tenant isolation: Identity, data and deployments are separated per client, with feature flags controlling each edition.
- 🔌 Hybrid cloud and on-premise: A sync agent mirrors local recordings to the cloud, so sites with weak connectivity keep operating.
- 📡 Event driven architecture: A shared event bus abstracts local queues and Pub/Sub, so the same code runs on a laptop and on Google Cloud.
- 🧩 Eleven independent services: Detection, identity, feature flags, notifications and scenarios each scale and fail on their own.
- 📊 Operator dashboard: A Next.js console gives super admins and tenants their own view of cameras, alerts and search.
Problems and solutions
Problem: Traditional surveillance systems are passive archives. Footage is only consulted after an incident, searching it means scrubbing through hours of video by hand, and any AI capability usually requires shipping sensitive recordings to a third party cloud.
Solution: SmartGuard AI runs detection where the client wants it, on site or in the cloud, and indexes every event as it happens. Natural language search replaces manual scrubbing, and per tenant isolation combined with a local sync agent means sensitive footage never has to leave the premises.
Problem: The original codebase was a single Python monolith where a change to face detection risked breaking plate reading, and every tenant shared the same compute.
Solution: I applied a strangler pattern, extracting one capability at a time into an independent service behind a shared event bus and storage abstraction, so each detector now scales, deploys and fails on its own.


