Back to Projects

AI Face Recognition System

Real-time 1:N face recognition system with live streaming and attendance tracking

2024
AI
Complexity: Expert

Enterprise-grade face recognition with 99.5% accuracy

Organizations struggle with manual attendance tracking and security verification. Current solutions are expensive, inaccurate, and difficult to scale. There was a critical need for a reliable, real-time face recognition system capable of handling multiple camera feeds simultaneously without latency bottlenecks.

The Solution

I architected and built a distributed face recognition system utilizing InsightFace with ONNX models for high-speed inference. To optimize for speed, I implemented a Redis caching layer for frequently recognized faces, falling back to PostgreSQL for permanent storage. The FastAPI backend seamlessly handles concurrent requests from multiple camera streams, delivering real-time updates via WebSockets.

Key Features

  • Real-time Face Detection: Detects and recognizes faces at 30+ FPS.
  • 1:N Recognition: Instantly matches against a massive database of enrolled faces.
  • Live Camera Streaming: Robust support for multiple RTSP/HTTP camera streams concurrently.
  • Attendance Tracking: Automatic, tamper-proof attendance logging with precise timestamps.
  • Unknown Face Detection: Proactive alerts for unrecognized or unauthorized individuals.

Architecture

The system uses a microservices-based architecture to isolate the compute-heavy ML models from the API layer.

  1. FastAPI Application Server: Handles routing, auth, and business logic.
  2. Face Detection Service: Uses OpenCV and InsightFace to extract face embeddings.
  3. Storage Layer: PostgreSQL for structured data and Redis for fast embedding lookups.
# Simplified Face Recognition Pipeline Example
@app.post("/api/v1/face/recognize")
async def recognize_face(image: UploadFile, db: Session = Depends(get_db)):
    # 1. Read and preprocess image
    img_data = await image.read()
    tensor = preprocess_image(img_data)
    
    # 2. Extract embedding using InsightFace
    embedding = ml_service.get_embedding(tensor)
    
    # 3. Fast nearest-neighbor search in Redis/FAISS
    match = vector_search.find_closest(embedding, threshold=0.6)
    
    if match:
        log_attendance(db, match.user_id)
        return {"status": "recognized", "user": match.user_id}
        
    return {"status": "unknown"}

Performance & Optimizations

  • Achieved 99.5% Recognition Accuracy in production environments.
  • Processing speed optimized to ~50ms per face.
  • Supports up to 8 concurrent camera streams on a single node.
  • Implemented approximate nearest neighbor search using FAISS with GPU acceleration to solve linear search bottlenecks.

Impact

The system is currently deployed in 3 organizations, successfully handling over 10,000+ recognitions daily, and has reduced manual attendance tracking processes by 95%.