Criminal Face Recognition Surveillance
Automated criminal identification and secure logging platform using AI assistance. Provided with complete academic documentation.
I developed this project independently from end to end. My work included requirement analysis, feature planning, UI/UX design, frontend development, backend development, database design, third-party integrations, testing, deployment and documentation.
The Problem
A college research project exploring how automated image-matching, video-stream analysis, and AI could assist in identifying individuals from surveillance footage and managing records.
The Solution
A comprehensive React and Supabase system featuring secure officer authentication, a criminal record database, and live-webcam or uploaded-video face matching using Gemini and face-api.js.
Key Features
- ✓Secure police login system
- ✓Criminal record management
- ✓Live webcam surveillance
- ✓Video upload analysis
- ✓Gemini AI matching alerts
- ✓Audit logs
Technology Stack
Core Workflows
Live Webcam Analysis
Officers can initiate a live webcam feed directly from their dashboard. The system continuously polls the stream, passing frames to face-api.js for detection, before sending high-confidence face embeddings to Gemini for matching against the criminal database.
Video Upload processing
For post-incident investigation, officers can upload CCTV footage. The system processes the video asynchronously, extracting frames and compiling an audit log of matched identities with timestamps.
Security & Authentication
- ✓Role-Based Access Control (RBAC)The entire system is secured via Supabase Auth. Only verified officer accounts can access the dashboard, view the criminal database, or initiate surveillance scans.
- ✓Audit LogsEvery face-match event generates an immutable log entry containing the timestamp, matching confidence score, and the officer who initiated the scan.
Development Learnings
Building this project involved overcoming significant technical challenges, particularly surrounding the real-time processing of video streams in the browser. By utilizing face-api.js on the client side, I was able to offload the heavy lifting of initial face detection (bounding box extraction) to the browser, significantly reducing the payload sent to the backend.
The Gemini API was then utilized strategically only on frames where a human face was confirmed to exist, performing the complex embedding extraction and comparison against the Supabase vector database.
Need a similar solution?
I can build a custom system like Criminal Face Recognition Surveillance tailored to your specific requirements.
Discuss your project →