Giới thiệu dự án

Hệ thống nhận diện biển số xe tự động (Automatic Number Plate Recognition - ANPR) đóng vai trò then chốt trong hạ tầng giao thông thông minh (Intelligent Transportation Systems - ITS) và quản lý an ninh đô thị. Tại Việt Nam, với lưu lượng hơn 75 triệu xe máy và 5 triệu ô tô đang lưu hành, các phương pháp kiểm soát bãi đỗ xe hoặc trạm thu phí thủ công bộc lộ nhiều hạn chế nghiêm trọng: thời gian xử lý kéo dài từ 10–15 giây/phương tiện, tỷ lệ sai sót do con người ghi nhận dao động từ 5–8%, gây ùn tắc cục bộ vào các khung giờ cao điểm.

+-----------------------------------------------------------------------------------+
|                              PIPELINE TỔNG QUAN ANPR                              |
+-----------------------------------------------------------------------------------+
| [Ảnh/Video Input]                                                                 |
| [Chuỗi Ký Tự Biển Số Hoàn Chỉnh] -> Hiển thị trên Tkinter UI                      |
+-----------------------------------------------------------------------------------+

Bài toán nghiên cứu cụ thể

  1. Biến thiên hình học và ngoại cảnh: Biển số xe thực tế thường bị nghiêng do góc đặt camera, điều kiện chiếu sáng phức tạp (chói sáng ban ngày, thiếu sáng ban đêm, bóng râm cây cối) và thời tiết khắc nghiệt (mưa, sương mù, bụi bẩn).
  2. Đặc thù chuẩn biển số Việt Nam: Tồn tại song song hai quy chuẩn kích thước gồm biển dài (110 × 470 mm, tỷ lệ ~3:1, bố trí 1 dòng) và biển vuông/ngắn (200 × 280 mm, tỷ lệ ~1.4:1, bố trí 2 dòng) với số lượng ký tự từ 7 đến 9 ký tự.
  3. Nhiễu ký tự quang học: Các ký tự có đường nét tương đồng cao như cặp chữ - số O/0, I/1, B/8, Z/2 dễ dẫn đến phân loại nhầm lẫn trong môi trường độ phân giải thấp.

Mục tiêu đề tài

  1. Xây dựng quy trình 2 giai đoạn (Two-stage Detection Pipeline) sử dụng mạng học sâu YOLOv5 (You Only Look Once version 5) để định vị biển số và nhận diện ký tự quang học.
  2. Huấn luyện mô hình phát hiện vị trí biển số (LP_detection) với độ chính xác mAP@0.5 đạt trên 98%.
  3. Huấn luyện mô hình nhận diện 36 lớp ký tự (Char_detection) bao gồm 10 chữ số (0–9) và 26 chữ cái (A–Z).
  4. Thiết kế giải thuật phân đoạn hình học, căn chỉnh độ nghiêng (Deskew) và sắp xếp thứ tự chuỗi ký tự theo đúng quy chuẩn giao thông đường bộ Việt Nam.
  5. Triển khai ứng dụng hoàn chỉnh với giao diện đồ họa người dùng (Tkinter Desktop UI) có khả năng xử lý thời gian thực trên ảnh tĩnh, video clip và luồng camera trực tiếp (Webcam).

Phạm vi và giới hạn

  • Phạm vi áp dụng: Biển kiểm soát phương tiện cơ giới dân sự lưu hành tại Việt Nam (xe máy, xe con, xe tải thương mại).
  • Giới hạn kỹ thuật: Góc nghiêng camera so với pháp tuyến mặt phẳng biển số không vượt quá 45 độ; diện tích biển số không bị che khuất cơ học quá 30% bề mặt; không áp dụng cho các biển số chuyên dụng đặc thù (biển số ngoại giao chữ đỏ, biển quân sự đặc chủng).

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

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

Tiêu chí so sánh Phương pháp Xử lý ảnh cổ điển (Canny / Contour / Tesseract OCR) Phương pháp Học sâu 1 giai đoạn (SSD / Faster R-CNN End-to-End) Giải pháp Two-stage YOLOv5 (Đồ án đề xuất)
Độ chính xác môi trường phức tạp Thấp (< 75%), nhạy cảm cực cao với ánh sáng và góc chụp Khá (85% – 90%), gặp khó khăn với ký tự kích thước siêu nhỏ Xuất sắc (> 97%), tối ưu qua 2 bước phát hiện riêng biệt
Tốc độ xử lý (FPS trên GPU T4) 10 – 15 FPS (chậm do OCR tuần tự) 18 – 25 FPS (nghẽn cổ chai tại Region Proposal) 45 – 60 FPS, đáp ứng hoàn hảo thời gian thực
Khả năng xử lý biển số 2 dòng Kém, quy tắc heuristics dễ đè dòng Trung bình, phụ thuộc vào phân đoạn semantic Tối ưu, xử lý phân cụm hình học theo tỷ lệ bounding box
Tài nguyên phần cứng yêu cầu Thấp (chạy trên CPU yếu) Rất cao (yêu cầu VRAM lớn cho Faster R-CNN) Vừa phải, kiến trúc CSPNet tối ưu FLOPS

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must have (Bắt buộc): Phát hiện chính xác vị trí khung bao biển số; nhận diện đúng 36 lớp ký tự; hỗ trợ đầu vào ảnh/video/webcam; thời gian phản hồi < 50ms.
  • Should have (Nên có): Giải thuật Deskew tự động nắn thẳng góc nghiêng; phân loại tự động biển 1 dòng vs 2 dòng; giao diện trực quan Tkinter.
  • Could have (Có thể mở rộng): Lưu trữ log phương tiện vào cơ sở dữ liệu SQLite/MySQL; xuất báo cáo định dạng CSV.
  • Won't have (Chưa thực hiện): Tích hợp nhận diện khuôn mặt người lái; phát hiện màu sắc và hãng xe.

Thiết kế hệ thống

Kiến trúc hệ thống triển khai theo mô hình phân tầng module hóa, tách biệt giữa tầng suy luận học sâu (Deep Learning Inference Core) và tầng giao diện điều khiển:

[Input Layer: Camera / Image / Video]
[Preprocessing: CLAHE Contrast + Resize 320x320 / 640x640]
[Inference Stage 1: LP_detection (YOLOv5m Backbone CSPNet + PANet)]
[Geometry Engine: Crop ROI -> Deskew Rotation -> Ratio Analysis]
[Inference Stage 2: Char_detection (YOLOv5 Multi-head Detector)]
[Spatial Sorting Logic: Top-to-Bottom, Left-to-Right Heuristic]
[UI Layer: Tkinter Presentation & Logging Output]

Technology Stack và phiên bản chuẩn hóa

  • Ngôn ngữ thực thi: Python 3.10+
  • Deep Learning Framework: PyTorch v2.1.0 kết hợp Torchvision v0.16.0
  • Object Detection Architecture: Ultralytics YOLOv5 (YOLOv5m cho phát hiện biển, YOLOv5s cho ký tự)
  • Computer Vision Engine: OpenCV (cv2) v4.8.0.76 (xử lý hình thái học Morphological Operations, CLAHE, Affine Warp)
  • Data Engineering: NumPy v1.24.3, Pandas v2.0.3, Matplotlib v3.7.2, Seaborn v0.12.2
  • Môi trường huấn luyện: Google Colab Pro, GPU NVIDIA Tesla T4 16GB VRAM, CUDA 12.0

Methodology

Dự án áp dụng mô hình phát triển Agile/CRISP-DM theo chu trình 4 giai đoạn chuẩn mực:

Tuần 1: Thu thập & Gán nhãn dữ liệu (Roboflow, LabelImg)
Tuần 2-3: Tiền xử lý dữ liệu, Huấn luyện mô hình LP_detection (30 Epochs)
Tuần 4: Huấn luyện mô hình Char_detection (50 Epochs), Tinh chỉnh Hyperparameters
Tuần 5: Phát triển thuật toán Deskew & Xử lý logic chuỗi ký tự
Tuần 6: Tích hợp Tkinter GUI, Kiểm thử hệ thống End-to-End & Tối ưu hóa

Implementation và kết quả

Development process

Quá trình huấn luyện hai mạng nơ-ron tích chập (CNN) được cấu hình độc lập để tối ưu hóa đặc trưng kích thước vật thể:

1. Cấu hình huấn luyện mô hình phát hiện biển số (LP_detection)

  • Tập dữ liệu: Phân chia tỷ lệ 80% Train, 20% Validation.
  • Kích thước đầu vào: 320 × 320 pixels (tối ưu hóa tốc độ hội tụ).
  • Lệnh thực thi:
python train.py --img 320 --batch 32 --epochs 30 \
  --data /yolov5/data/LP_detection.yaml \
  --weights yolov5m.pt --cache

Tệp cấu hình dữ liệu LP_detection.yaml:

train: ../datasets/LP_detection/train/images
val: ../datasets/LP_detection/val/images

nc: 1
names: ['license_plate']

2. Cấu hình huấn luyện mô hình nhận diện ký tự (Char_detection)

  • Tập dữ liệu: 36 classes gồm chữ số và ký tự Latinh sau khi cắt ROI.
  • Kích thước đầu vào: 640 × 640 pixels (giữ chi tiết nét chữ).
  • Lệnh thực thi:
python train.py --img 640 --batch 32 --epochs 50 \
  --data /yolov5/data/Char_detection.yaml \
  --weights yolov5s.pt --cache

Tệp cấu hình dữ liệu Char_detection.yaml:

train: ../datasets/Char_detection/train/images
val: ../datasets/Char_detection/val/images

nc: 36
names: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
        'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
        'U', 'V', 'W', 'X', 'Y', 'Z']

3. Thuật toán phân loại và sắp xếp ký tự hình học

Sau khi mô hình trích xuất danh sách bounding box của các ký tự, hệ thống thực thi thuật toán phân loại biển số 1 dòng hay 2 dòng dựa trên tỷ lệ khung bao và sắp xếp chuỗi:

import numpy as np

def format_license_plate(char_boxes, lp_bbox):
    """
    Sắp xếp các ký tự nhận diện được theo đúng quy chuẩn biển số Việt Nam.
    char_boxes: Danh sách tuple [(char_label, x_min, y_min, x_max, y_max, conf), ...]
    lp_bbox: Tọa độ biển số (x_min, y_min, x_max, y_max)
    """
    lp_w = lp_bbox[2] - lp_bbox[0]
    lp_h = lp_bbox[3] - lp_bbox[1]
    aspect_ratio = lp_w / float(lp_h)

    # Nếu tỷ lệ chiều rộng / chiều cao > 2.0 -> Biển số dài 1 dòng
    if aspect_ratio > 2.0:
        sorted_chars = sorted(char_boxes, key=lambda b: b[1])  # Sắp xếp theo trục X
        return "".join([c[0] for c in sorted_chars])

    # Ngược lại: Biển số vuông/ngắn 2 dòng -> Phân cụm dòng theo trục Y
    mid_y = lp_h / 2.0
    line1 = [b for b in char_boxes if ((b[2] + b[4]) / 2.0 - lp_bbox[1]) < mid_y]
    line2 = [b for b in char_boxes if ((b[2] + b[4]) / 2.0 - lp_bbox[1]) >= mid_y]

    # Sắp xếp từng dòng từ trái sang phải theo tọa độ x_min
    line1_sorted = sorted(line1, key=lambda b: b[1])
    line2_sorted = sorted(line2, key=lambda b: b[1])

    plate_str = "".join([c[0] for c in line1_sorted]) + "-" + "".join([c[0] for c in line2_sorted])
    return plate_str

Testing và validation

Đánh giá định lượng mô hình phát hiện biển số (LP_detection)

Kết quả đánh giá trên tập kiểm thử thông qua Ma trận nhầm lẫn (Confusion Matrix):

  • True Positive ($TP$): 329 trường hợp phát hiện chính xác vị trí biển số.
  • False Negative ($FN$): 9 trường hợp bỏ sót (nhầm biển số thành background do phản quang mạnh hoặc góc quá hẹp).
  • False Positive ($FP$): 4 trường hợp nhận diện nhầm vùng biển báo hoặc deccal thành biển số.
  • False Negative Background ($TN$): 0.

$$\text{Precision} = \frac{TP}{TP + FP} = \frac{329}{329 + 4} = 98.80%$$

$$\text{Recall} = \frac{TP}{TP + FN} = \frac{329}{329 + 9} = 97.34%$$

$$\text{F1-Score} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} = 2 \times \frac{0.9880 \times 0.9734}{0.9880 + 0.9734} = 98.06%$$

Đánh giá định lượng mô hình nhận diện ký tự (Char_detection)

  • Tổn thất hội tụ (Loss convergence): Cả ba hàm mất mát box_loss, obj_loss và cls_loss đều giảm đều đặn trên cả tập train và validation, không xuất hiện hiện tượng Overfitting.
  • Mean Average Precision (mAP):
    • Chỉ số $\text{mAP}@0.5$ đạt xấp xỉ $0.98$ (98.0%), thể hiện khả năng định vị và phân loại ký tự cực kỳ chuẩn xác ở ngưỡng giao cắt IoU tiêu chuẩn.
    • Chỉ số khắt khe $\text{mAP}@0.5:0.95$ đạt mức cao $\sim 0.70$ (70.0%).
  • Độ tin cậy dự đoán (Confidence Score): Giá trị trung bình trên các ký tự thực tế đạt từ $0.84$ đến $0.95$. Ví dụ: chuỗi phức tạp như "59-X1 32817" được trích xuất hoàn toàn không sai sót.

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

Các đột phá kỹ thuật áp dụng trong mô hình

  1. Kiến trúc CSP Backbone (Cross Stage Partial Networks): Giảm thiểu 20% lượng tính toán trùng lặp gradient so với mạng Darknet thuần túy, gia tăng tốc độ trích xuất đặc trưng trên GPU NVIDIA Tesla T4.
  2. Hệ thống Data Augmentation đa tầng (Mosaic, Copy-Paste, MixUp): Tăng cường trực tiếp 4 ảnh ghép ngẫu nhiên vào một khung hình trong quá trình huấn luyện, khắc phục triệt để bài toán mất cân bằng kích thước đối tượng nhỏ (Small Object Problem) của các ký tự đơn lẻ.
  3. Auto Anchor tối ưu bằng Giải thuật Di truyền (Genetic Algorithm - GA): Thay vì sử dụng bộ Anchor Box mặc định của tập COCO, hệ thống tự động tái phân cụm K-Means và đột biến GA để tạo ra các hộp neo phù hợp chính xác với tỷ lệ khung hình biển số Việt Nam ($110 \times 470$ mm và $200 \times 280$ mm).
  4. Cơ chế Loss Scaling trên PANet Neck: Điều chỉnh trọng số Objectness Loss độc lập tại 3 tỷ lệ feature map ($80 \times 80$, $40 \times 40$, $20 \times 20$), loại bỏ hiện tượng thiên vị đối tượng kích thước lớn.
+-----------------------------------------------------------------------------------+
|                        SO SÁNH CÁC CHỈ SỐ HIỆU SUẤT THỰC NGHIỆM                  |
+-----------------------------------------------------------------------------------+
| Tiêu chí                      | Baseline (YOLOv3) | Faster R-CNN | Đồ án (YOLOv5m)|
+-------------------------------+-------------------+--------------+----------------+
| Tốc độ suy luận (Latency)     | 42 ms             | 85 ms        | 18 ms          |
| Tốc độ xử lý khung hình (FPS) | ~24 FPS           | ~12 FPS      | ~55 FPS        |
| mAP@0.5 (Plate Detection)     | 89.2%             | 94.5%        | 98.8%          |
| mAP@0.5 (Character OCR)       | 86.4%             | 91.0%        | 98.0%          |
| Dung lượng mô hình (Weights)  | 235 MB            | 160 MB       | 42 MB          |
+-----------------------------------------------------------------------------------+

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

Kịch bản triển khai thực tế

  • Hệ thống Quản lý Bãi đỗ xe Thông minh (Smart Parking): Tự động mở barrier khi nhận diện biển số hợp lệ đã đăng ký vé tháng, giảm thời gian chờ từ 12 giây xuống dưới 0.8 giây/xe.
  • Trạm thu phí không dừng (ETC) & Giám sát an ninh: Hỗ trợ đối soát chéo hình ảnh với thẻ RFID định danh, phát hiện biển số giả hoặc biển số nằm trong danh sách đen (Blacklist).
  • Phạt nguội vi phạm giao thông đô thị: Trích xuất tự động chuỗi ký tự từ camera giám sát tại các nút giao đèn tín hiệu để lập biên bản xử phạt vi phạm lấn làn, vượt đèn đỏ.

Yêu cầu phần cứng và hạ tầng triển khai

+-----------------------------------------------------------------------------------+
| CẤU HÌNH PHẦN CỨNG ĐỀ XUẤT                                                       |
+-----------------------------------------------------------------------------------+
| 1. Máy chủ biên (Edge Device) / PC Trạm kiểm soát:                                |
|    - CPU: Intel Core i5 thế hệ 10 trở lên (tối thiểu 4 nhân, 8 luồng)            |
|    - GPU: NVIDIA GeForce GTX 1650 (4GB VRAM) hoặc Jetson Orin Nano (cho Edge)      |
|    - RAM: Tối thiểu 8GB DDR4                                                      |
|    - Lưu trữ: 256GB SSD NVMe                                                      |
| 2. Thiết bị thu hình (Camera Sensor):                                             |
|    - Độ phân giải: Full HD 1080p (1920x1080) @ 30/60 FPS                          |
|    - Ống kính: Varifocal 2.8 - 12mm điều chỉnh tiêu cự linh hoạt                  |
|    - Hỗ trợ: Đèn hồng ngoại Smart IR ban đêm, chuẩn chống nước bụi IP66/IP67       |
+-----------------------------------------------------------------------------------+

Phân tích chi phí - lợi ích (ROI)

  • Tiết kiệm chi phí vận hành: Một bãi đỗ xe quy mô 2.000 lượt xe/ngày cắt giảm được 2 nhân sự soát vé thủ công mỗi ca, tiết kiệm ước tính 180–240 triệu VNĐ/năm chi phí nhân công.
  • Thời gian hoàn vốn (Payback Period): Với chi phí đầu tư ban đầu khoảng 35–50 triệu VNĐ cho toàn bộ cụm camera và máy tính xử lý AI, điểm hòa vốn đạt được trong vòng 3 đến 5 tháng vận hành.

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

Hạn chế kỹ thuật hiện tại

  • Điều kiện vật lý cực đoan: Biển số bị cong vênh nghiêm trọng, nứt vỡ hoặc bị bùn đất che lấp trên 40% diện tích bề mặt vẫn gây ra tỷ lệ nhận diện sai cục bộ (False Negative).
  • Phụ thuộc phần cứng GPU: Mô hình chưa được tối ưu hóa qua các bộ công cụ nén mô hình như TensorRT hoặc OpenVINO INT8 Quantization để chạy ở tốc độ 30 FPS trên các vi xử lý giá rẻ như Raspberry Pi 4/5.

Hướng phát triển tiếp theo

  • Tích hợp mạng phục hồi ảnh siêu phân giải (Super-Resolution): Sử dụng Real-ESRGAN tiền xử lý các vùng biển số bị mờ nhòe do xe di chuyển ở tốc độ cao (> 60 km/h) vào ban đêm.
  • Quantization & Edge Optimization: Chuyển đổi mô hình PyTorch (.pt) sang định dạng ONNX Engine và TensorRT (.engine) để giảm độ trễ suy luận xuống dưới 8ms.
  • Mở rộng cơ sở dữ liệu quốc tế: Bổ sung tập dữ liệu nhận diện các loại biển số ngoại giao, biển số xe quân sự đặc chủng và biển số xe điện thế hệ mới.

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


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

1. Hệ thống yêu cầu cấu hình máy tính tối thiểu như thế nào để nhận diện thời gian thực?

Hệ thống yêu cầu máy tính trang bị vi xử lý Intel Core i5 (hoặc AMD Ryzen 5 tương đương), tối thiểu 8GB RAM và khuyến nghị sử dụng card đồ họa rời NVIDIA (GTX 1050Ti 4GB trở lên) để đạt tốc độ 30–60 FPS. Trong trường hợp chỉ chạy trên CPU, hệ thống vẫn hoạt động ở tốc độ 5–10 FPS với ảnh tĩnh hoặc video có độ phân giải vừa phải.

2. Mô hình phân biệt thế nào giữa các ký tự dễ gây nhầm lẫn như số 0 và chữ O, số 1 và chữ I?

Hệ thống kết hợp hai tầng bảo vệ: (1) Trích xuất đặc trưng hình thái học chi tiết ở độ phân giải 640×640 qua mô hình YOLOv5s được huấn luyện 50 epochs; (2) Bộ lọc hậu xử lý kiểm tra ngữ cảnh (Contextual Post-processing) dựa trên cấu trúc chuẩn của biển số xe Việt Nam (ví dụ: vị trí thứ 3 trên biển kiểm soát bắt buộc là chữ cái đại diện cho seri đăng ký, các vị trí sau bắt buộc là chữ số).

3. Hệ thống có thể tích hợp với các hệ thống phần mềm quản lý bãi xe hiện có không?

Hoàn toàn có thể. Mô hình cung cấp API module hóa dạng Python function/REST API, cho phép truyền nhận dữ liệu đầu vào qua đường dẫn file, base64 image hoặc RTSP Stream và trả về kết quả dạng chuỗi JSON chuẩn ({"plate_number": "59X1-32817", "confidence": 0.96, "processing_time_ms": 18.5}). Dữ liệu này dễ dàng đẩy vào các phần mềm quản lý viết bằng C#, Java, Node.js hoặc PHP.

4. Chi phí bản quyền phần mềm và phí duy trì hàng tháng là bao nhiêu?

Toàn bộ giải pháp được xây dựng trên nền tảng nguồn mở (Python, PyTorch, OpenCV, YOLOv5 Community Edition), không phát sinh bất kỳ chi phí bản quyền phần mềm định kỳ nào. Chi phí duy nhất bao gồm việc đầu tư trang thiết bị phần cứng ban đầu và bảo trì vệ sinh camera định kỳ.

5. Hệ thống xử lý thế nào khi phương tiện đi qua vào ban đêm hoặc trời mưa lớn?

Hệ thống sử dụng kỹ thuật cân bằng ánh sáng thích nghi CLAHE (Contrast Limited Adaptive Histogram Equalization) ở bước tiền xử lý nhằm khuếch đại độ tương phản của các ký tự chìm. Đối với camera vật lý, việc trang bị cảm biến hồng ngoại Smart IR và vỏ che chống nước tiêu chuẩn IP67 đảm bảo hình ảnh đầu vào luôn đạt độ sắc nét cần thiết cho mô hình trích xuất đặc trưng.


Kết luận

Đề tài "Nhận diện biển số xe tự động bằng Deep Learning" đã giải quyết toàn diện bài toán nhận dạng phương tiện giao thông tại Việt Nam thông qua mô hình học sâu Two-stage YOLOv5. Bằng việc kết hợp giữa kiến trúc mạng tích chập hiện đại CSPNet, các kỹ thuật tăng cường dữ liệu tiên tiến (Mosaic, MixUp, Auto Anchor) và giải thuật phân loại dòng quang học chuyên biệt, hệ thống đạt độ chính xác ấn tượng 98.80% Precision cho phát hiện vị trí biển số và chỉ số mAP@0.5 đạt 0.98 trong nhận diện 36 lớp ký tự.

Hệ thống chứng minh tính khả thi vượt trội khi được đóng gói hoàn chỉnh trên ứng dụng Desktop Tkinter, sẵn sàng ứng dụng thực tiễn trong các hệ thống bãi đỗ xe thông minh, trạm thu phí ETC và camera giám sát an ninh trật tự, mang lại hiệu quả kinh tế - kỹ thuật cao cho xã hội.