--- license: mit datasets: - 0xnu/uk-licence-plate tags: - uk - united-kingdom - transport - transportation - computer-vision - object-detection - license-plate-recognition - ocr language: - en --- ## 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 ```python pip install ultralytics easyocr opencv-python pillow torch torchvision huggingface_hub ``` #### Usage ```python 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](https://huggingface.co/datasets/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](./LICENSE). ### Citation If you use this model in your research or product, please cite: ```bibtex @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.