← Back to home
PROJECT MANAGER

AUTENTIK

Checks whether a student activity certificate is genuine: it reads the certificate with OCR, compares the font with the issuer's template, and asks Gemini whether the event actually took place.

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

OVERVIEW

A student uploads an activity certificate and gets back one authenticity score. Behind it, a FastAPI service reads the file with EasyOCR and re-reads uncertain keywords with TrOCR, checks the typeface with a font classifier trained on 3,473 Google Fonts, and matches names and events against the records before Gemini judges whether the event happened. Laravel stores the results, and both services run in 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.