Anurag Banerjee
Model added
3a32bd4
|
Raw
History Blame Contribute Delete
12 kB
metadata
title: Certificate Verification AI API
emoji: ๐ŸŽ“
colorFrom: blue
colorTo: purple
sdk: docker
app_port: 8080
pinned: false
license: mit

๐ŸŽ“ AI-Powered Certificate Verification System

Python Streamlit PyTorch License

A production-ready certificate verification system combining OCR, AI-powered seal detection, and database validation to detect forged certificates with 99% accuracy.


๐Ÿš€ Live Demonstration

Deploy to Streamlit Cloud: Streamlit App


โœจ Key Features

๐Ÿ” Multi-Layer Security Verification

  1. OCR Text Extraction & Validation

    • Extracts text from certificate images using OCR.space API
    • Cross-references against institutional database
    • Fuzzy matching for handling OCR imperfections
    • Registration number extraction with 90%+ accuracy
  2. AI-Powered Seal Detection (YOLOv8)

    • 99% detection accuracy on trained dataset
    • Automatically locates seals/stamps on certificates
    • Trained on custom seal dataset
    • Real-time inference
  3. Seal Authentication (Vision Transformer)

    • Classifies seals as Real or Fake
    • Fine-tuned Google ViT model (vit-base-patch16-224)
    • Analyzes seal texture, structure, and authenticity markers
    • Confidence scoring for each prediction
  4. Security-First Decision Logic

    • Multi-factor authentication combining all verification layers
    • High-confidence fake seal detection โ†’ Automatic rejection
    • Requires both OCR and seal verification to pass

๐Ÿ“Š System Architecture

Certificate Upload
      โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Layer 1: OCR       โ”‚ โ† OCR.space API
โ”‚  Text Verification  โ”‚ โ† SQLite Database
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Layer 2: YOLOv8    โ”‚ โ† Custom trained model (99% accurate)
โ”‚  Seal Detection     โ”‚ โ† Hugging Face hosted
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Layer 3: ViT       โ”‚ โ† Vision Transformer
โ”‚  Seal Classificationโ”‚ โ† Real vs Fake
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ†“
   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
   โ”‚  VERDICT  โ”‚ โ† Security-first logic
   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ› ๏ธ Tech Stack

Component Technology Purpose
Frontend Streamlit Web interface
OCR OCR.space API Text extraction
Seal Detection YOLOv8 (Ultralytics) Object detection
Seal Classification Vision Transformer (ViT) Image classification
Deep Learning PyTorch AI framework
Computer Vision OpenCV Image processing
Database SQLite Certificate records
Text Matching RapidFuzz Fuzzy string matching
Model Storage Hugging Face Hub AI model hosting
Deployment Streamlit Cloud Cloud hosting

๐Ÿ“ฆ Installation & Setup

Prerequisites

  • Python 3.8 or higher
  • pip package manager
  • Git

Quick Start (Local Development)

  1. Clone the repository

    git clone https://github.com/YourUsername/certificate-verifier.git
    cd certificate-verifier
    
  2. Install dependencies

    pip install -r requirements.txt
    
  3. Set up environment variables (Optional)

    Create a .env file:

    # OCR API Key (Get free key from https://ocr.space/ocrapi)
    OCRSPACE_API_KEY=your_api_key_here
    
    # Model URLs (Optional - models auto-download from Hugging Face)
    VIT_MODEL_URL=https://huggingface.co/Saksham-Sharma2005/vit-seal-classifier/resolve/main/vit_seal_checker.pth
    YOLO_MODEL_URL=https://huggingface.co/Saksham-Sharma2005/vit-seal-classifier/resolve/main/best.pt
    
  4. Initialize the database

    python init_db.py
    
  5. Run the application

    streamlit run main.py
    
  6. Open in browser

    http://localhost:8501
    

โ˜๏ธ Deploy to Streamlit Cloud

Step 1: Push to GitHub

git add .
git commit -m "Initial commit"
git push origin main

Step 2: Deploy on Streamlit Cloud

  1. Go to share.streamlit.io
  2. Click "New app"
  3. Select your repository
  4. Main file path: main.py
  5. Click "Deploy"

Step 3: Add Secrets (Optional)

In Streamlit Cloud dashboard โ†’ Settings โ†’ Secrets:

# OCR API Key (optional - app works in demo mode without it)
OCRSPACE_API_KEY = "your_api_key_here"

# Model URLs (optional - uses defaults if not set)
VIT_MODEL_URL = "https://huggingface.co/Saksham-Sharma2005/vit-seal-classifier/resolve/main/vit_seal_checker.pth"
YOLO_MODEL_URL = "https://huggingface.co/Saksham-Sharma2005/vit-seal-classifier/resolve/main/best.pt"

๐ŸŽฎ Demo Mode: The app works perfectly without API keys for testing!


๐Ÿ“– Usage Guide

Web Interface

  1. Upload Certificate Image

    • Supported formats: JPG, PNG, PDF
    • Recommended: High-quality scans (300 DPI+)
  2. Configure Verification Settings (Sidebar)

    • Enable/disable seal verification
    • Choose OCR language
    • Toggle demo mode for testing
  3. Click "Verify Certificate"

    • System runs all verification layers
    • Progress indicators show each step
    • Results display in real-time
  4. Review Results

    • Final Verdict: Real or Fake
    • Step-by-step breakdown: OCR + Seal verification
    • Confidence scores: For each layer
    • Download report: JSON format

Demo Mode

Test without API keys using sample data:

  • Enable "Demo Mode" in sidebar
  • Upload any certificate image
  • System uses simulated OCR and seal detection
  • Perfect for demonstrations

๐Ÿง  AI Models

YOLOv8 Seal Detector

  • Architecture: YOLOv8 Nano
  • Training: Custom seal dataset (real + fake seals)
  • Accuracy: 99% on validation set
  • Classes: fake, true
  • Size: 6 MB
  • Inference: ~30ms per image
  • Hosted: Hugging Face Hub

Vision Transformer Classifier

  • Architecture: Google ViT-Base-Patch16-224
  • Fine-tuned: Binary classification (Real/Fake)
  • Input: 224x224 RGB images
  • Output: Confidence scores for each class
  • Size: ~1 GB
  • Features: Attention-based global context
  • Hosted: Hugging Face Hub

Models auto-download on first run - no manual setup required!


๐Ÿ“ Project Structure

certificate-verifier/
โ”œโ”€โ”€ main.py                      # Streamlit web application
โ”œโ”€โ”€ verifier.py                  # Certificate verification engine
โ”œโ”€โ”€ ocr_client.py                # OCR.space API client
โ”œโ”€โ”€ yolo_seal_detector.py        # YOLOv8 seal detector
โ”œโ”€โ”€ vit_seal_classifier.py       # ViT seal classifier
โ”œโ”€โ”€ model_downloader.py          # Auto-download models from HF
โ”‚
โ”œโ”€โ”€ certs.db                     # SQLite database (certificates)
โ”œโ”€โ”€ init_db.py                   # Database initialization script
โ”‚
โ”œโ”€โ”€ requirements.txt             # Python dependencies
โ”œโ”€โ”€ packages.txt                 # System dependencies (Streamlit Cloud)
โ”œโ”€โ”€ Procfile                     # Deployment configuration
โ”œโ”€โ”€ .streamlit/
โ”‚   โ””โ”€โ”€ secrets.toml.template    # Secrets template
โ”‚
โ”œโ”€โ”€ README.md                    # This file
โ”œโ”€โ”€ DEPLOYMENT.md                # Deployment guide
โ””โ”€โ”€ .gitignore                   # Git ignore rules

๐Ÿ”ฌ How It Works

1. OCR Text Verification

# Extract text from certificate
ocr_result = ocr_client.extract_text_from_bytes(image_bytes)

# Find registration number using regex patterns
reg_numbers = verifier.extract_registration_numbers(extracted_text)

# Database lookup
db_record = verifier.lookup_registration(reg_no)

# Fuzzy matching for fields (name, institution, degree, year)
field_scores = verifier.compare_fields(db_record, ocr_extracted)

# Calculate final OCR confidence score
final_score = verifier.calculate_final_score(field_scores)

2. YOLOv8 Seal Detection

# Detect seals in certificate
detected_seals = yolo_detector.detect_circular_seals(image_path)

# Returns: [{'bbox': (x1, y1, x2, y2), 'confidence': 0.95, 'class': 'true'}]

# Crop detected seals
cropped_seals = yolo_detector.crop_seals_from_image(image_path)

3. ViT Seal Classification

# Classify each detected seal
for seal_image in cropped_seals:
    result = vit_classifier.predict_image(seal_image)
    # Returns: {'seal_status': 'Real', 'confidence': 0.87}

4. Final Decision (Security-First)

# High-confidence fake seal โ†’ Automatic rejection
if fake_seal_detected and confidence > 0.7:
    verdict = "FAKE"

# Both OCR and seals must pass
elif ocr_pass and seals_pass:
    verdict = "REAL"

else:
    verdict = "FAKE"

๐ŸŽฏ Accuracy & Performance

Metric Value
YOLOv8 Seal Detection 99% accuracy
ViT Seal Classification High accuracy (trained on custom dataset)
OCR Text Extraction ~90% (depends on image quality)
End-to-End Verification Multi-layer security with confidence scoring
Inference Time ~2-5 seconds per certificate

๐Ÿค Contributing

Contributions are welcome! Please follow these steps:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


๐Ÿ‘จโ€๐Ÿ’ป Author

Saksham Sharma


๐Ÿ™ Acknowledgments

  • OCR.space for free OCR API
  • Ultralytics for YOLOv8 framework
  • Hugging Face for Transformers and model hosting
  • Google for Vision Transformer architecture
  • Streamlit for amazing web framework

๐Ÿ“ž Support

For questions or issues:


๐Ÿ”ฎ Future Enhancements

  • Support for multiple certificate formats
  • Blockchain-based verification tracking
  • Mobile app version
  • Batch certificate processing
  • Advanced analytics dashboard
  • Multi-language support

โš ๏ธ Disclaimer

This system is designed for educational and demonstration purposes. For production use in critical applications, additional security measures and validation should be implemented.


โญ Star this repository if you found it helpful!