Giới thiệu dự án

Sự gia tăng nhanh chóng của các phương tiện giao thông cá nhân và vận tải công cộng tại các đô thị lớn đang đặt ra thách thức nghiêm trọng cho công tác quản trị trật tự giao thông và an ninh đô thị. Theo thống kê từ Cục Cảnh sát Giao thông, số lượng xe cơ giới đăng ký mới tại Việt Nam tăng trưởng trung bình từ 8% đến 12% mỗi năm. Phương pháp kiểm soát thủ công bởi lực lượng chức năng hoặc nhân viên bãi đỗ xe bộc lộ nhiều hạn chế về tốc độ xử lý, chi phí nhân sự và tỷ lệ sai sót do yếu tố con người. Do đó, việc nghiên cứu và triển khai hệ thống nhận dạng biển số xe tự động (Automatic License Plate Recognition - ALPR) trở thành một bài toán then chốt trong quá trình xây dựng hạ tầng Giao thông Thông minh (Intelligent Transportation Systems - ITS).

Hệ thống nhận dạng biển số xe tự động đối mặt với nhiều bài toán kỹ thuật phức tạp trong môi trường thực tế:

  • Biến dạng góc nhìn (Perspective Distortion): Ảnh thu thập từ camera giám sát di động hoặc thiết bị cầm tay thường có góc nghiêng lớn, khiến khung bao hình chữ nhật truyền thống (Bounding Box) chứa nhiều nhiễu nền từ thân xe.
  • Điều kiện ánh sáng phức tạp: Hiện tượng chói lóa, ngược sáng, bóng râm cục bộ và nhiễu quang học từ camera đường phố.
  • Tốc độ xử lý thời gian thực (Real-time Processing): Hệ thống cần đảm bảo độ trễ suy luận (Inference Latency) dưới 50ms trên mỗi khung hình để phục vụ các luồng video liên tục.

Đề tài tốt nghiệp chuyên ngành Hệ thống Thông tin Quản lý tại Viện Toán ứng dụng và Tin học – Đại học Bách khoa Hà Nội tập trung giải quyết toàn diện bài toán ALPR thông qua ba mục tiêu trọng tâm:

  1. Xây dựng module phát hiện phương tiện giao thông (Vehicle Detection) nhằm lọc vùng quan tâm (Region of Interest - ROI).
  2. Tích hợp mạng học sâu Warped Planar Object Detection (WPOD-NET) nhằm phát hiện và nắn thẳng biển số xe bị biến dạng góc nhìn thông qua phép biến đổi Affine (Affine Transformation).
  3. Triển khai kiến trúc mạng nơ-ron tích chập YOLOv5 (You Only Look Once phiên bản 5) để định vị và nhận dạng chính xác từng ký tự quang học (OCR) trên biển số.

Phạm vi nghiên cứu tập trung vào hệ thống biển số xe cơ giới tại Việt Nam (biển vuông 2 dòng và biển dài 1 dòng), hoạt động ổn định trong các kịch bản bãi đỗ xe thông minh, trạm thu phí không dừng và camera giám sát đường phố.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Các giải pháp nhận dạng biển số truyền thống và hiện đại có những ưu - nhược điểm rõ rệt khi đối chiếu với các yêu cầu thực tế:

Tiêu chí Xử lý ảnh cổ điển (Edge Detection + Template Matching) Mô hình kết hợp 2 giai đoạn (Faster R-CNN + OCR) Giải pháp đề xuất (YOLOv5 + WPOD-NET)
Độ chính xác góc nghiêng Rất thấp (< 60%), nhạy cảm với góc xoay Trung bình (75 - 82%), bbox thừa chi tiết Rất cao (> 96%), nắn thẳng tự động bằng Affine
Tốc độ xử lý (FPS) 10 - 15 FPS (CPU) 8 - 14 FPS (GPU chuyên dụng) 45 - 65 FPS (GPU / Edge AI Devices)
Kích thước mô hình Rất nhỏ (< 10MB) Lớn (200 - 300MB) Nhẹ (27MB với YOLOv5s)
Khả năng triển khai Edge Cao nhưng kém chính xác Thấp do tiêu tốn tài nguyên VRAM Rất cao (hỗ trợ chuyển đổi ONNX/TensorRT)

Áp dụng phương pháp phân tích yêu cầu MoSCoW:

  • Must have: Tự động phát hiện phương tiện, định vị biển số chính xác, nắn chỉnh góc nghiêng tự do, nhận dạng bộ ký tự chuẩn (0-9, A-Z) với độ chính xác trên 95%.
  • Should have: Tối ưu hóa kích thước file trọng số dưới 50MB, đạt tốc độ xử lý thời gian thực > 30 FPS trên card đồ họa phổ thông.
  • Could have: Khả năng nhận diện biển số xe máy 2 dòng và biển số ô tô 1 dòng đồng thời trên cùng một khung hình.
  • Won't have (lần này): Nhận dạng biển số bị che khuất một phần quá 50% hoặc biển số bị rỉ sét, tróc sơn nghiêm trọng làm mất nét ký tự.

Thiết kế hệ thống

Hệ thống được thiết kế theo kiến trúc đường ống phân tầng (Pipeline Architecture) gồm 3 khối chức năng xử lý nối tiếp:

[Input Frame / Camera Stream]
[Structured Text Output / API Response]

Technology Stack của hệ thống:

  • Ngôn ngữ lập trình: Python 3.8+
  • Deep Learning Framework: PyTorch 1.10.2, Torchvision 0.11.3
  • Object Detection Framework: YOLOv5 (phiên bản Ultralytics v6.0)
  • Plate Rectification Network: WPOD-NET (Warped Planar Object Detection Network)
  • Thư viện Thị giác máy tính: OpenCV 4.5.5, NumPy 1.21.5
  • Export Runtime: ONNX 1.11.0, TensorRT 8.2

Methodology

Quy trình nghiên cứu và phát triển được tổ chức theo mô hình Agile với 4 vòng lặp phát triển (Sprints):

  • Milestone 1 (Tuần 1 - 3): Thu thập và tiền xử lý dữ liệu (Data Preprocessing), gán nhãn dữ liệu (Data Annotation) cho phương tiện và ký tự biển số.
  • Milestone 2 (Tuần 4 - 6): Huấn luyện và tinh chỉnh (Fine-tuning) mạng WPOD-NET cho bài toán biến dạng góc nhìn.
  • Milestone 3 (Tuần 7 - 9): Huấn luyện mô hình YOLOv5 nhận dạng ký tự quang học, tối ưu hàm mất mát (Loss Function).
  • Milestone 4 (Tuần 10 - 12): Đóng gói pipeline, kiểm thử hiệu năng (Benchmarking) và tối ưu hóa suy luận.

Implementation và kết quả

Development process

Quá trình triển khai kỹ thuật giải quyết bài toán qua 3 thuật toán cốt lõi:

  1. Khối phát hiện phương tiện (Vehicle Detection): Sử dụng kiến trúc YOLOv5 với cấu trúc gồm 3 phần: Backbone (CSPDarknet53), Neck (PANet - Path Aggregation Network) và Head (YOLO Detection Head). Khung hình đầu vào kích thước $608 \times 608 \times 3$ được chia thành các lưới ô (grid cells) trên 3 tỷ lệ đặc trưng: $19 \times 19$, $38 \times 38$, và $76 \times 76$, tương ứng với 9 Anchor Boxes để phát hiện vật thể ở nhiều kích thước khác nhau.

  2. Khối định vị và nắn chỉnh biến dạng biển số (WPOD-NET): Khác với mô hình Object Detection thông thường chỉ trả về 4 tọa độ $(x_{\min}, y_{\min}, x_{\max}, y_{\max})$, WPOD-NET trích xuất trực tiếp ma trận biến đổi Affine $H$ thông qua 8 tham số không gian:

$$\begin{bmatrix} x' \ y' \ 1 \end{bmatrix} = \begin{bmatrix} h_{11} & h_{12} & h_{13} \ h_{21} & h_{22} & h_{23} \ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \ y \ 1 \end{bmatrix}$$

Phép biến đổi này khôi phục biển số từ góc chụp xiên bất kỳ về dạng xem trực diện chuẩn kích thước $240 \times 80$ pixel (đối với biển dài) hoặc $160 \times 120$ pixel (đối với biển vuông), loại bỏ hoàn toàn các pixel thừa của thân xe.

import cv2
import numpy as np
import torch

def unwarp_license_plate(image, pts_predicted, target_size=(240, 80)):
    """
    Nắn chỉnh biển số xe từ 4 đỉnh góc của WPOD-NET về mặt phẳng chuẩn trực diện.
    pts_predicted: Mảng numpy 4x2 chứa tọa độ 4 góc biển số
    target_size: (width, height) đầu ra mong muốn
    """
    width, height = target_size
    dst_pts = np.array([
        [0, 0],
        [width - 1, 0],
        [width - 1, height - 1],
        [0, height - 1]
    ], dtype="float32")
    
    # Tính toán ma trận biến đổi phối cảnh Perspective/Affine
    M = cv2.getPerspectiveTransform(pts_predicted.astype("float32"), dst_pts)
    warped_plate = cv2.warpPerspective(image, M, (width, height))
    
    return warped_plate
  1. Khối nhận dạng ký tự (Character Detection & Recognition): Sau khi nắn thẳng, ảnh biển số được đưa vào mạng YOLOv5-OCR để dự đoán đồng thời vị trí và nhãn của 36 lớp ký tự (10 chữ số từ 0-9 và 26 chữ cái tiếng Anh từ A-Z). Việc nhận dạng dựa trên mô hình phát hiện đối tượng giúp loại bỏ sự phụ thuộc vào các bước phân đoạn nhị phân (Thresholding/Binarization) vốn rất dễ bị lỗi khi bề mặt biển số bị bẩn hoặc đổ bóng.
from yolov5 import YOLOv5

# Khởi tạo mô hình YOLOv5 đã huấn luyện riêng cho tập ký tự biển số
model_char_ocr = YOLOv5("weights/yolov5_plate_chars.pt", device="cuda:0")

def recognize_plate_characters(plate_img):
    results = model_char_ocr.predict(plate_img, size=320)
    detections = results.xyxy[0].cpu().numpy()  # [xmin, ymin, xmax, ymax, conf, class_id]
    
    # Sắp xếp ký tự theo thứ tự không gian: từ trên xuống dưới, từ trái sang phải
    # Đối với biển 2 dòng: phân cụm dựa trên ngưỡng y_center
    chars_sorted = sorted(detections, key=lambda x: (x[1] // 30, x[0]))
    
    plate_text = "".join([model_char_ocr.names[int(c[5])] for c in chars_sorted if c[4] > 0.45])
    return plate_text

Testing và validation

Hệ thống được đánh giá trên tập dữ liệu thực tế gồm 1,500 ảnh phương tiện giao thông thu thập tại các bãi đỗ xe và nút giao thông nội đô Hà Nội, phân chia theo tỷ lệ 70% Train, 15% Validation và 15% Test.

Các độ đo đánh giá chính:

  • IoU (Intersection over Union): Ngưỡng $IoU \ge 0.5$ dùng để xác định phát hiện thành công.
  • mAP@0.5 (Mean Average Precision): Đánh giá độ chính xác của bounding box và phân lớp.
  • Character Recognition Rate (CRR): Tỷ lệ nhận dạng chính xác toàn bộ chuỗi ký tự trên một biển số.

Kết quả thử nghiệm chi tiết trên từng giai đoạn:

Giai đoạn Pipeline Mô hình áp dụng mAP@0.5 (%) Precision (%) Recall (%) Thời gian suy luận (GPU RTX 2060)
Phát hiện phương tiện YOLOv5s 98.4% 97.8% 98.1% 7.2 ms
Định vị & Căn chỉnh biển WPOD-NET 96.7% 95.9% 96.2% 11.5 ms
Nhận dạng ký tự (OCR) YOLOv5s-OCR 97.2% 96.8% 97.0% 6.8 ms
Toàn bộ hệ thống Pipeline tích hợp 95.6% (Toàn chuỗi) 95.2% 95.8% 25.5 ms (~39.2 FPS)

Kết quả đạt được

Hệ thống đạt tỷ lệ nhận dạng chính xác toàn bộ chuỗi ký tự biển số ở mức 95.6% trong điều kiện tiêu chuẩn và 91.2% trong điều kiện góc nghiêng lên tới $45^\circ$. Tốc độ xử lý trung bình đạt 39.2 FPS trên GPU phổ thông, vượt mức yêu cầu thời gian thực (30 FPS). Dung lượng file trọng số của toàn bộ pipeline được tối ưu hóa chỉ còn 54MB (27MB cho YOLOv5 Vehicle/OCR và 27MB cho WPOD-NET), giảm hơn 80% so với kiến trúc dựa trên Darknet-YOLOv4 (244MB).


Đổi mới và đóng góp

  1. Khắc phục triệt để biến dạng góc nhìn nhờ WPOD-NET: Các mô hình nhận dạng biển số truyền thống tại Việt Nam thường giả định camera chụp thẳng trực diện. Đề tài áp dụng giải pháp biến đổi 8 tham số Affine từ WPOD-NET, giúp hệ thống có khả năng tự động nắn thẳng các biển số bị chụp từ góc nghiêng cao, cải thiện 24.8% độ chính xác OCR so với phương pháp cắt bounding box hình chữ nhật thông thường.

  2. Chuyển dịch sang mô hình YOLOv5 thuần PyTorch: Việc loại bỏ phụ thuộc vào thư viện C-Darknet của các phiên bản YOLO cũ giúp quy trình huấn luyện, đóng gói và triển khai diễn ra liền mạch trong hệ sinh thái PyTorch. Mô hình dễ dàng chuyển đổi sang định dạng mở ONNX và tăng tốc tính toán trên TensorRT, giảm dung lượng tệp trọng số xuống 27MB, cho phép tích hợp trực tiếp lên các thiết bị phần cứng giới hạn tài nguyên như Raspberry Pi 4 hoặc NVIDIA Jetson Nano.

  3. Bỏ qua giai đoạn tiền xử lý nhị phân hóa ký tự: Thay vì sử dụng các bộ lọc Otsu thresholding hay trích xuất contour truyền thống để tách từng ký tự (vốn rất dễ đứt nét khi biển số mờ), hệ thống sử dụng mạng CNN phát hiện trực tiếp ký tự từ ảnh màu đã nắn thẳng, nâng cao đáng kể độ bền vững (robustness) trước nhiễu ánh sáng.


Ứng dụng thực tế và triển khai

Kịch bản ứng dụng

  • Hệ thống bãi đỗ xe thông minh (Smart Parking): Tự động hóa quá trình ghi nhận xe vào/ra, đối soát biển số với thẻ từ, loại bỏ tình trạng ùn tắc vào giờ cao điểm, giảm thời gian xử lý từ 5 giây/xe xuống còn dưới 1 giây/xe.
  • Trạm thu phí tự động không dừng (ETC): Hỗ trợ đối soát chéo hình ảnh nhận dạng biển số với dữ liệu đọc thẻ RFID gắn trên phương tiện, cảnh báo gian lận biển số.
  • Giám sát vi phạm và tuần tra di động: Tích hợp trên camera hành trình của lực lượng Cảnh sát Giao thông hoặc thiết bị cầm tay để phát hiện nhanh các phương tiện trong danh sách đen (blacklist) hoặc vi phạm dừng đỗ sai quy định.

Kiến trúc triển khai & API Endpoint

Hệ thống được đóng gói dưới dạng Docker container chạy dịch vụ REST API với framework FastAPI.

Yêu cầu phần cứng tối thiểu:

  • CPU: Intel Core i5 thế hệ 8 trở lên hoặc tương đương
  • RAM: 8GB DDR4
  • GPU (Khuyến nghị cho real-time): NVIDIA GTX 1050 / GTX 1650 4GB VRAM trở lên
  • Bộ nhớ: 20GB dung lượng đĩa trống

Chi tiết REST API Endpoint:

  • Endpoint: POST /api/v1/alpr/recognize
  • Content-Type: multipart/form-data
  • Request Payload: File ảnh định dạng JPEG/PNG (file: @vehicle.jpg)
  • Response Format:
{
  "status": "success",
  "processing_time_ms": 26.4,
  "data": [
    {
      "vehicle_type": "car",
      "vehicle_confidence": 0.982,
      "plate_number": "30H12345",
      "plate_confidence": 0.958,
      "plate_format": "single_line",
      "bounding_box": {
        "x_min": 412,
        "y_min": 520,
        "x_max": 652,
        "y_max": 590
      }
    }
  ]
}

Hạn chế và hướng phát triển

Mặc dù đạt được những kết quả khả quan, đề tài vẫn tồn tại một số hạn chế kỹ thuật:

  • Biển số bị che khuất hoặc mờ nhòe do chuyển động nhanh (Motion Blur): Khi phương tiện di chuyển với vận tốc lớn trên 80 km/h trong điều kiện thiếu sáng, ảnh chụp bị nhòe vệt, làm giảm độ chính xác của mạng WPOD-NET.
  • Biển số bám bùn đất nặng: Hệ thống chưa tích hợp module phục hồi ảnh (Super-resolution hoặc Image Inpainting) để tái tạo lại các nét ký tự bị mất.

Hướng nghiên cứu phát triển tiếp theo:

  1. Tích hợp thuật toán theo dõi phương tiện đa mục tiêu (Multi-object Tracking) như DeepSORT hoặc ByteTrack để kết hợp kết quả nhận dạng trên nhiều khung hình liên tiếp (Multi-frame Voting), nâng cao độ tin cậy.
  2. Ứng dụng các kiến trúc nhận dạng văn bản tiên tiến dựa trên Vision Transformer (ViT) hoặc TrOCR nhằm tăng cường khả năng đọc chuỗi ký tự liền mạch không cần bounding box từng chữ.
  3. Chuyển đổi toàn diện mô hình sang chuẩn hóa lượng tử hóa INT8 (8-bit Quantization) để chạy tối ưu trên các dòng chip biên tiết kiệm năng lượng.

Đối tượng hưởng lợi

  • Sinh viên & Học viên chuyên ngành CNTT/Toán Tin: Nguồn tài liệu tham khảo chi tiết về quy trình xây dựng pipeline thị giác máy tính đầu-cuối (End-to-End Computer Vision Pipeline), kỹ thuật nắn chỉnh hình học không gian kết hợp Deep Learning.
  • Kỹ sư AI & Lập trình viên hệ thống: Nắm bắt kiến trúc tích hợp giữa PyTorch, YOLOv5 và WPOD-NET, kèm theo các mẫu code xử lý thực nghiệm và phương pháp tối ưu hóa triển khai thời gian thực.
  • Doanh nghiệp & Đơn vị vận hành bãi xe/Giao thông: Cơ sở khoa học và giải pháp kiến trúc khả thi với chi phí phần cứng thấp để tự xây dựng hệ thống ALPR nội bộ, tiết kiệm từ 40% đến 60% chi phí bản quyền phần mềm thương mại.
  • Nhà nghiên cứu học thuật: Cung cấp số liệu thực nghiệm và phương pháp đối chuẩn cho các công trình nghiên cứu mở rộng về nhận dạng ký tự quang học trong điều kiện ngoại cảnh phức tạp tại Việt Nam.

Câu hỏi thường gặp

1. Hệ thống có thể hoạt động mà không cần GPU chuyên dụng hay không?

Có. Nhờ việc tối ưu hóa kiến trúc YOLOv5s và xuất mô hình sang định dạng ONNX Runtime chạy trên CPU sử dụng tập chỉ thị OpenVINO hoặc ONNX-CPU, hệ thống đạt tốc độ xử lý từ 8 đến 12 FPS trên chip Intel Core i5, hoàn toàn đáp ứng được các ứng dụng không yêu cầu tốc độ cao như cổng soát vé bãi đỗ xe tự động.

2. WPOD-NET xử lý góc nghiêng tối đa là bao nhiêu độ?

Qua thực nghiệm, WPOD-NET hoạt động ổn định và phục hồi chính xác hình dạng biển số với góc nghiêng lên tới $45^\circ$ theo cả trục ngang (Yaw) và trục dọc (Pitch). Khi góc nghiêng vượt quá $60^\circ$, tỷ lệ co ngắn phối cảnh quá lớn khiến các ký tự bị biến dạng nặng, làm giảm độ chính xác OCR.

3. Làm thế nào để phân biệt biển số xe máy 2 dòng và biển ô tô 1 dòng?

Sau khi WPOD-NET nắn thẳng biển số, tỷ lệ khung hình giữa chiều dài và chiều rộng ($Aspect\ Ratio = Width / Height$) được tính toán tự động. Nếu tỷ lệ $AR > 2.5$, hệ thống xác định là biển 1 dòng và sắp xếp ký tự từ trái sang phải. Nếu $AR \le 2.0$, hệ thống phân cụm các ký tự thành 2 dòng dựa trên tọa độ tâm $y_{center}$ trước khi ghép chuỗi.

4. Chi phí phần cứng để triển khai một làn xe thông minh là bao nhiêu?

Một trạm kiểm soát 1 làn xe cơ bản yêu cầu: 1 IP Camera độ phân giải 2MP có chống ngược sáng WDR (~1.5 - 2.5 triệu VNĐ), 1 máy tính mini PC/Edge Box cấu hình Core i5 hoặc NVIDIA Jetson Nano (~8 - 12 triệu VNĐ), tổng chi phí phần cứng dao động từ 10 đến 15 triệu VNĐ cho một điểm kiểm soát hoàn chỉnh.

5. Hệ thống có nhận dạng được biển số có màu sắc đặc biệt (biển đỏ quân đội, biển xanh công vụ, biển vàng dịch vụ) không?

Mô hình YOLOv5-OCR được huấn luyện dựa trên cấu trúc hình học và đặc trưng cạnh của ký tự thay vì phụ thuộc vào màu sắc nền. Do đó, hệ thống nhận diện chính xác ký tự trên tất cả các loại biển số hợp quy chuẩn (trắng, xanh, đỏ, vàng) mà không cần thay đổi trọng số mô hình.


Kết luận

Đồ án tốt nghiệp "Nhận dạng biển số xe" đã xây dựng thành công một giải pháp thị giác máy tính hoàn chỉnh, kết hợp hài hòa giữa khả năng nắn chỉnh hình học mạnh mẽ của mạng WPOD-NET và tốc độ nhận dạng vượt trội của YOLOv5. Kết quả thực nghiệm đạt độ chính xác 95.6% với độ trễ xử lý 25.5ms trên mỗi khung hình, chứng minh tính khả thi cao trong việc thương mại hóa và ứng dụng thực tiễn vào hạ tầng giao thông thông minh tại Việt Nam. Đây là nền tảng kỹ thuật vững chắc mở ra hướng tiếp cận tối ưu cho các bài toán xử lý ảnh thời gian thực trên các thiết bị tính toán biên.