Site Icon Matthew Raynor
← Back to Services

IDP EasyCapture

Enterprise ID photo management platform that replaces traditional photo booth setups. Organizations collecting employee or student photos at scale use it to capture, validate, and process photos entirely from a smartphone. TensorFlow.js runs real-time face detection in the browser to ensure quality before the shot is taken. A server-side ML pipeline handles background compositing — blur, solid colors, or custom images — using MediaPipe segmentation and OpenCV. Exports in ASURE ID-compatible formats for enterprise badge printing.

Project Overview

EasyCapture is an enterprise ID photo management SaaS platform built for IDP Americas (contract, 2024–2025). It replaces traditional photo booth setups with an AI-driven, smartphone-based capture workflow. Organizations collecting employee or student photos at scale — for badges, credentials, access cards — use it to handle everything from capture to ASURE ID-compatible export.

The Challenge

Organizations need consistent, high-quality ID photos captured quickly with instant feedback — without manual review bottlenecks or hauling photo booth setups on-site.

The Solution

Built a browser-first pipeline: TensorFlow.js runs real-time face detection with configurable quality thresholds (blur tolerance, lighting, face confidence). A server-side MediaPipe + OpenCV pipeline handles background compositing with dual-model segmentation for fine hair detail. Multi-tenant SaaS with role-based access and dynamic form systems.

Technology Stack

Backend
Django 5.1.6 Django REST Framework PostgreSQL Celery Redis
Frontend
React 19 TypeScript Vite Tailwind CSS TanStack Query
Ai_Ml
TensorFlow.js (BlazeFace) MediaPipe 0.10.18 OpenCV 4.10 NumPy Pillow
Cloud
AWS S3 AWS SES
Deployment
Docker Fly.io Netlify

Key Features

Client-side ML: TensorFlow.js BlazeFace for real-time face detection with auto-capture countdown

Configurable quality thresholds: blur tolerance, lighting brightness, face detection confidence

Server-side dual-model MediaPipe segmentation — portrait model for hair detail, general model for structure

Background compositing: blur, solid colors (8 options), or custom uploaded images with LANCZOS resampling

Multi-tenant SaaS with role-based access (super_admin vs regular users)

Dynamic form system with 90+ field templates across 9 categories

ASURE ID-compatible exports (CSV + ZIP) with presigned S3 download URLs

Admin review workflow with batch approve/reject and automated rejection emails

Business Impact

Instant in-browser quality feedback eliminates bad photos before they're taken

Dual-model segmentation with bilateral filtering prevents halo artifacts on hair edges

Mask quality validation with fragmentation detection triggers retake instead of outputting bad composites

Dynamic form system means admins configure exactly the metadata they need per job

Technical Achievements

TensorFlow.js pipeline that feels instant on a smartphone

Dual-model segmentation approach for production-quality background replacement

Sole engineer — built the full stack from ML pipelines to multi-tenant architecture

Enterprise-grade export system plugging into existing badge printing workflows

Technical Implementation

Sole engineer, full stack from architecture to deployment. Client-side ML uses a custom useQualityAnalysis React hook that continuously validates against configurable global thresholds pulled from a singleton SystemSettings model. Server-side compositing uses bilateral filtering for hair edge cleanup and edge detection to prevent halo artifacts, with Gaussian blur anti-aliasing for smooth transitions. Backend uses modular ViewSet architecture split into four specialized files backed by dedicated service layers.

Interested in This Project?

View the source code or see it in action