Back to projects
PROJECT MANAGER

AUTENTIK

AI verification of student activity certificates: dual OCR, a font classifier, and Gemini cross-checking behind a Laravel + FastAPI monorepo.

  • Laravel
  • FastAPI
  • MySQL
  • Docker
  • Nginx
  • PyTorch
  • ONNX
AUTENTIK — screenshot

OVERVIEW

A student uploads an activity certificate, Laravel stores the record, and a FastAPI service reads the file end to end: OpenCV preprocessing, EasyOCR for a fast first pass with TrOCR re-reading low-confidence keywords, an EfficientNet-B3 font classifier exported to ONNX, then fuzzy matching against the event data plus a Google Custom Search and Gemini cross-check of whether the event exists at all. The final score and both result sets come back to Laravel and land on the certificate page. Two services, one Docker Compose stack behind Nginx.

WHAT I DID

  • Dual OCR: EasyOCR sweeps the document, TrOCR (trocr-base-printed) re-reads the keywords the first pass was unsure about.
  • Font forensics: EfficientNet-B3 fine-tuned over 3,473 Google Fonts classes and exported to ONNX, checking the certificate typeface against the issuer template.
  • Content verification: rapidfuzz matching against event and participant records, then Google Custom Search plus Gemini 2.5 Flash judging whether the activity actually took place.
  • One final score per certificate, composed from the fuzzy match and the AI verdict, stored alongside the raw OCR and analysis results.