Foto In Aja - Project by Dimas Febriyanto
COMPLETED August 2026

Foto In Aja

Web system for searching and buying running event photos. Runners simply enter their bib number; YOLO detects the bib in every photo, PaddleOCR reads it, and the system indexes each photo to that bib number, enabling checkout and full-resolution photo downloads.

Overview

Running event photo search & sales system powered by deep-learning bib detection. This thesis work builds a detection-OCR pipeline that goes through YOLO (YOLOv11s and YOLOv26s, exported to ONNX) to detect bib numbers in race photos, and PaddleOCR to read the bib digits from the detected bounding boxes. OCR results pass through post-processing (NMS, height filter, digit regex, confidence threshold) and are validated against the event's runner registration before being indexed into the database. Through a many-to-many relation between the photos and bib_numbers tables, every photo is automatically linked to all bib numbers that appear in it. Runners simply enter a bib number to see all their photos, select the ones they want, check out through a payment gateway, and receive a download link to the full-resolution, watermark-free photos. On the admin side, photos are uploaded in bulk, the whole detection-OCR pipeline runs automatically, and low-confidence detections land in a manual verification queue. The system uses a split architecture: a FastAPI inference API as a dedicated OCR microservice, a Next.js (App Router) frontend acting as the hub between the browser, the microservice, PostgreSQL, Supabase Storage, and Midtrans. All services are deployed to a VPS using Docker Compose behind a Caddy reverse proxy. Evaluation compares YOLOv11s vs YOLOv26s detection performance on secondary and primary datasets, OCR metrics (Exact Match, Word Accuracy, CER), and ONNX CPU inference speed.

Key Features

  • check_circle Search photos by bib number
  • check_circle Automatic bib detection with YOLO (ONNX Runtime)
  • check_circle Bib reading with PaddleOCR + post-processing (NMS, height filter, regex, confidence)
  • check_circle Manual verification queue for low-confidence detections
  • check_circle Bulk photo upload by admin
  • check_circle Event and runner management
  • check_circle Multi-photo checkout via payment gateway (Midtrans)
  • check_circle Original photo download link sent by email (Gmail SMTP)
  • check_circle Watermarked photo previews
  • check_circle Comparative model evaluation (mAP, precision, recall, F1)

Technologies

PythonYOLOv8/YOLO (ONNX)PaddleOCRFastAPINext.jsTypeScriptPostgreSQLSupabase StorageMidtransDocker ComposeCaddyOpenCV