UKLPR: United Kingdom License Plate Recognition

UKLPR is a computer-vision model architecture purpose-built for detecting, reading, and recognizing United Kingdom license plates. It is optimized for speed and accuracy across diverse UK plate formats.

Model Performance

  • Detection Rate: 100.0%
  • Text Extraction Rate: 100.0%
  • Processing Speed: 8.1 FPS
  • Model Size: YOLOv8 Nano (~12.3MB)

Supported Languages

  • English (en)

Quick Start

Installation

pip install ultralytics easyocr opencv-python pillow torch torchvision huggingface_hub

Usage

import cv2
import numpy as np
from ultralytics import YOLO
import easyocr
from PIL import Image
from huggingface_hub import hf_hub_download
import warnings

# Suppress warnings
warnings.filterwarnings('ignore')

# Download models from HuggingFace
print("Downloading model from HuggingFace...")
model_path = hf_hub_download(repo_id="0xnu/uk-license-plate-recognition", filename="model.onnx")
config_path = hf_hub_download(repo_id="0xnu/uk-license-plate-recognition", filename="config.json")

# Load models with explicit task specification
yolo_model = YOLO(model_path, task='detect')
ocr_reader = easyocr.Reader(['en'], gpu=False, verbose=False)

# Process image
def recognize_license_plate(image_path):
   # Load image
   image = cv2.imread(image_path)
   image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
   
   # Detect license plates
   results = yolo_model(image_rgb, conf=0.5, verbose=False)
   
   plates = []
   for result in results:
       boxes = result.boxes
       if boxes is not None:
           for box in boxes:
               # Get coordinates
               x1, y1, x2, y2 = box.xyxy[0].cpu().numpy()
               
               # Crop plate
               plate_crop = image_rgb[int(y1):int(y2), int(x1):int(x2)]
               
               # Extract text
               ocr_results = ocr_reader.readtext(plate_crop)
               if ocr_results:
                   text = ocr_results[0][1]
                   confidence = float(ocr_results[0][2])  # Convert to native Python float
                   plates.append({'text': text, 'confidence': confidence})
   
   return plates

# Usage Example
results = recognize_license_plate('sample_car_with_license.jpeg')
print(results)

Model Architecture

Detection Model (YOLOv8n)

  • Architecture: YOLOv8 Nano
  • Parameters: ~3M
  • Input Size: 640x640 pixels
  • Output: Bounding boxes for license plates

OCR Model (EasyOCR)

  • Engine: Deep learning-based OCR
  • Languages: English
  • Character Set: Alphanumeric + common symbols

Training Details

  • Dataset: UK License Plate Dataset (0xnu/uk-licence-plate)
  • Training Epochs: 10
  • Batch Size: 16
  • Image Size: 640x640
  • Optimizer: AdamW
  • Framework: Ultralytics YOLOv8

Use Cases

  • Traffic monitoring systems
  • Automated parking management
  • Law enforcement applications
  • Toll collection systems
  • Vehicle access control

Limitations

  • Optimized for United Kingdom license plate formats
  • Performance may vary with extreme weather conditions
  • Requires good image quality for optimal text recognition
  • Real-time performance depends on hardware capabilities

License

This project is licensed under the Modified MIT License.

Citation

If you use this model in your research or product, please cite:

@misc{uklpr2025,
  title={UKLPR: United Kingdom License Plate Recognition},
  author={Finbarrs Oketunji},
  year={2025},
  publisher={Hugging Face},
  howpublished={\url{https://huggingface.co/0xnu/uk-license-plate-recognition}}
}

Copyright

Copyright (C) 2025 Finbarrs Oketunji. All Rights Reserved.

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 1 Ask for provider support

Dataset used to train 0xnu/uk-license-plate-recognition