Bối cảnh và vấn đề nghiên cứu

Sự gia tăng nhanh chóng của các phương tiện giao thông đường bộ tạo ra áp lực lớn đối với công tác quản lý bãi đỗ xe và kiểm soát giao thông. Phương thức quản lý thủ công truyền thống đòi hỏi nhiều nhân lực, tiêu tốn thời gian, đồng thời dễ phát sinh sai sót, nhầm lẫn gây thiệt hại cho người sử dụng dịch vụ. Nhằm tự động hóa và giảm tải các quy trình như thu phí, kiểm soát an ninh và quản lý phương tiện cá nhân, công nghệ nhận dạng biển số xe tự động đã trở thành một hướng nghiên cứu then chốt nhờ vào tính duy nhất và định danh cao của biển số xe.

Đề tài "Tìm hiểu thuật toán nhận dạng biển số xe Việt Nam" được thực hiện với 4 mục tiêu nghiên cứu cụ thể:

  1. Tìm hiểu tổng quan về cấu trúc biển số xe và hệ thống nhận dạng biển số xe.
  2. Phát biểu bài toán nhận dạng và xác định các hướng tiếp cận kỹ thuật giải quyết.
  3. Nghiên cứu các thuật toán xử lý ảnh số và nhận dạng ký tự quang học phục vụ bài toán nhận dạng biển số xe.
  4. Xây dựng chương trình thực nghiệm (demo) nhằm nhận dạng biển số xe cơ giới tại Việt Nam.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Hình ảnh biển số xe cơ giới Việt Nam, bao gồm cả hai định dạng: biển số 1 hàng (biển dài) và biển số 2 hàng (biển vuông/ngắn).
  • Phạm vi nghiên cứu: Đề tài tập trung xây dựng quy trình nhận dạng từ dữ liệu ảnh tĩnh (chụp trực tiếp hoặc thu thập từ Internet), sử dụng thư viện xử lý ảnh OpenCV và mô hình học máy K-Nearest Neighbors (KNN) trên ngôn ngữ lập trình Python trong khoảng thời gian nghiên cứu gần 3 tháng.

Cơ sở lý thuyết và phương pháp

Khóa luận thiết lập nền tảng dựa trên lý thuyết xử lý ảnh số, thị giác máy tính và học máy có giám sát:

  • Hệ thống nhận dạng mẫu: Mô tả không gian đối tượng $X = {x_1, x_2, \dots, x_n}$ và không gian diễn dịch $\Omega = {w_1, w_2, \dots, w_k}$. Quá trình nhận dạng là ánh xạ $f: X \rightarrow \Omega$ nhằm gán đối tượng vào một lớp định danh. Tác giả phân tích hai hướng mô hình hóa: mô hình tham số (sử dụng vectơ đặc trưng hình học, diện tích $S$, chu tuyến $p$, tỷ lệ $T = 4\pi S/p^2$, moment trung tâm $\mu_{pq}$) và mô hình cấu trúc (dựa trên văn phạm $G = (V_t, V_n, P, S)$).
  • Thuật toán phân lớp K-Nearest Neighbors (KNN): Thuật toán học có giám sát xác định nhãn của đối tượng dựa trên $K$ láng giềng gần nhất trong không gian mẫu huấn luyện thông qua độ đo khoảng cách Euclid:

$$d(x, y) = \sqrt{\sum_{i=1}^{n} (x_i - y_i)^2}$$

  • Kỹ thuật xử lý ảnh số với OpenCV: Sử dụng không gian màu HSV (trích xuất kênh độ sáng Value để hạn chế ảnh hưởng của điều kiện chiếu sáng); các phép toán hình thái học (Morphological Operations) gồm phép co (Erosion), giãn nở (Dilation), mở (Opening), đóng (Closing), phép Top Hat (làm nổi bật chi tiết sáng trên nền tối) và Black Hat (làm nổi bật chi tiết tối trên nền sáng); lọc nhiễu Gauss; phân ngưỡng động (Adaptive Gaussian Thresholding); giải thuật phát hiện biên Canny; thuật toán truy vết đường bao Suzuki (Suzuki’s Contour Tracing).
  • Quy chuẩn biển số xe Việt Nam: Phân tích đặc tính kích thước thực tế theo tiêu chuẩn: biển dài có kích thước $110 \times 470\text{ mm}$, biển ngắn có kích thước $200 \times 280\text{ mm}$ (tỷ lệ kích thước cao/rộng giới hạn xấp xỉ 3); số lượng ký tự từ 7 đến 9; kích thước ký tự chuẩn cao $80\text{ mm}$, rộng $40\text{ mm}$. Đồng thời hệ thống hóa bảng phân loại biển số của 64 tỉnh thành và các quy định màu sắc đặc thù (biển xanh cơ quan hành chính, biển đỏ quân đội với các ký hiệu đơn vị, biển trắng định dạng NG/NN dành cho đối tượng nước ngoài, biển 80 cơ quan trung ương, biển A xe công an - cảnh sát).
Nhóm biển số Quy cách màu sắc Đối tượng / Ký hiệu đặc thù tiêu biểu
Dân sự (64 tỉnh thành) Nền trắng, chữ và số màu đen Mã tỉnh từ 11 đến 99 (Hà Nội: 29-32, TP.HCM: 50-59, Cà Mau: 69...)
Cơ quan hành chính Nền xanh, chữ và số màu trắng Cơ quan nhà nước trực thuộc trung ương (đầu số 80) hoặc cấp tỉnh
Quân đội Nền đỏ, chữ và số màu trắng Ký hiệu đơn vị: TM (Bộ Tổng tham mưu), TC (Tổng cục Chính trị), TH (Tổng cục Hậu cần), VT (Viettel)...
Ngoại giao / Quốc tế Nền trắng, chữ và số màu đen NG (Ngoại giao), NN (Tổ chức/cá nhân nước ngoài), 80 NG xxx-yy
Công an - Cảnh sát Nền xanh hoặc trắng có ký hiệu A Ví dụ: 31A (Công an thành phố Hà Nội)

Nội dung chính theo từng chương

Chương 1: Cơ sở lý thuyết

Chương 1 trình bày tổng quan về Trí tuệ nhân tạo (AI), Học máy (Machine Learning) với hai nhánh chính là học có giám sát (phân loại, hồi quy) và học không giám sát (phân nhóm, kết hợp). Tác giả giới thiệu thư viện OpenCV viết bằng C/C++, hỗ trợ đa nền tảng và tối ưu hóa cho các tác vụ thời gian thực.

Chương này cũng tổng hợp lý thuyết nhận dạng mẫu, nguyên lý hoạt động 4 bước của thuật toán KNN, phân loại các ứng dụng nhận dạng biển số thành 2 nhóm: Loại 1 (giới hạn vùng nhìn tại trạm thu phí, bãi xe) và Loại 2 (không giới hạn vùng nhìn, môi trường phức tạp). Tác giả so sánh hai hướng giải quyết bài toán:

  • Hướng tiếp cận phát triển vùng (Nigel Whyte & Adrien Kiernan): Đơn giản, tốc độ cao với ảnh ít chi tiết thừa nhưng giảm hiệu quả khi phông nền phức tạp.
  • Hướng tiếp cận dò biên và biến đổi Hough (Michael Lindenbaum và cộng sự): Độ chính xác cao nhưng khối lượng tính toán lớn.

Chương 2: Phân tích thiết kế bài toán nhận dạng biển số xe

Chương 2 mô tả chi tiết giải pháp kỹ thuật theo chuỗi xử lý 3 giai đoạn:

[Ảnh đầu vào] 
[Giai đoạn 1: Định vị và tách biển số]
[Giai đoạn 2: Phân đoạn ký tự]
[Giai đoạn 3: Nhận dạng ký tự]

Tác giả phân tích sâu các giải thuật dò đường biên: Square Tracing (chỉ tối ưu trên cấu trúc liên thông 4-connected), Moore-Neighbor Tracing (liên thông 8-connected) và giải thuật Suzuki tích hợp trong hàm findContours của OpenCV.

Chương 3: Thực nghiệm và đánh giá

Chương 3 trình bày cấu hình môi trường phát triển trên Visual Studio Code và ngôn ngữ Python kết hợp các thư viện chuyên dụng (OpenCV, NumPy, Math). Tác giả thử nghiệm trên các ảnh mẫu biển số xe 1 hàng và 2 hàng, đồng thời phân tích chi tiết các trường hợp lỗi phát sinh trong quá trình chạy thực nghiệm.

Môi trường / Công cụ Vai trò trong hệ thống Chi tiết kỹ thuật theo đồ án
Visual Studio Code Môi trường phát triển tích hợp (IDE) Hỗ trợ debug, snippets, syntax highlighting, quản lý mã nguồn
Python Ngôn ngữ lập trình chính Xử lý logic điều khiển, kết nối pipeline giải thuật
OpenCV Thư viện thị giác máy tính Xử lý hình thái học, biến đổi màu, phân ngưỡng, trích xuất contour
NumPy & Math Thư viện tính toán số học Xử lý ma trận điểm ảnh 20x30, tính toán góc xoay hình học

Thiết kế và quy trình triển khai hệ thống

Hệ thống nhận dạng được hiện thực hóa qua ba phân hệ kỹ thuật chính:

1. Phân hệ phát hiện và tách biển số xe

  • Chuyển đổi ảnh xám: Ảnh đầu vào từ camera hoặc tệp ảnh được chuyển sang không gian màu HSV; kênh cường độ sáng $V$ (Value) được trích xuất thành ảnh xám 8-bit (256 mức xám) để giảm dung lượng xử lý và chống chịu biến động ánh sáng.
  • Tăng cường độ tương phản: Kết hợp hai phép toán hình thái học Top Hat và Black Hat: $$\text{Ảnh tương phản} = \text{Ảnh gốc} + \text{TopHat}(\text{Ảnh gốc}) - \text{BlackHat}(\text{Ảnh gốc})$$
  • Khử nhiễu và phân ngưỡng: Nhân chập ảnh với ma trận lọc Gauss để loại bỏ nhiễu tần số cao, tiếp tục áp dụng nhị phân hóa ngưỡng động ADAPTIVE_THRESH_GAUSSIAN_C để xử lý các vùng quá sáng hoặc quá tối cục bộ.
  • Phát hiện biên Canny: Thực hiện 4 bước gồm lọc mờ Gauss kích thước $5 \times 5$, tính toán Gradient qua toán tử Sobel $3 \times 3$ theo 4 hướng ($0^\circ, 45^\circ, 90^\circ, 135^\circ$), khử các điểm không phải cực đại (Non-maximum suppression) và phân ngưỡng kép (Double thresholding).
  • Lọc vùng biển số: Dò tìm contour bằng giải thuật Suzuki (CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE), tiến hành xấp xỉ đa giác để chọn các vùng có đúng 4 đỉnh, sau đó lọc theo diện tích và tỷ lệ kích thước (chiều cao / chiều rộng giới hạn $\le 3$).

2. Phân hệ căn chỉnh và phân đoạn ký tự

  • Hiệu chỉnh góc nghiêng: Xác định tọa độ hai đỉnh đáy $A(x_1, y_1)$ và $B(x_2, y_2)$ của khung biển số; tính toán góc quay $\theta$ dựa trên tam giác vuông $ABC$ và tiến hành xoay ma trận ảnh về trục ngang chuẩn.
  • Tách ký tự: Thực hiện dò contour trên ảnh nhị phân đã xoay, áp dụng các ngưỡng ràng buộc về tỷ lệ khung bao và diện tích để loại trừ nhiễu biên, ốc vít, dấu gạch ngang và dấu chấm. Các ký tự hợp lệ được cắt thành từng khối ảnh nhị phân độc lập.

3. Phân hệ huấn luyện và nhận dạng ký tự

  • Xây dựng tập dữ liệu huấn luyện: Tạo lập hình ảnh các chữ số và chữ cái (loại trừ các ký tự $O, I, J$) bằng phần mềm Paint với phông chữ "Biển số xe Việt Nam", thực hiện xoay mẫu theo nhiều góc độ khác nhau.
  • Chuẩn hóa dữ liệu: Toàn bộ ký tự mẫu được chuẩn hóa về kích thước cố định $20 \times 30\text{ pixels}$ (tương ứng ma trận 600 điểm ảnh nhị phân mang giá trị 0 hoặc 255). Quá trình gán nhãn thủ công tạo ra hai tệp dữ liệu: classifications.txt (lưu mã ASCII) và flattened_images.txt (lưu vectơ đặc trưng 600 chiều).
  • Phân lớp và sắp xếp thứ tự: Mô hình KNN tiếp nhận ảnh ký tự đầu vào đã chuẩn hóa $20 \times 30$, tính khoảng cách Euclid tới tập mẫu để gán mã ASCII tương ứng. Hệ thống phân định biển 1 hàng và 2 hàng dựa trên tọa độ trục dọc $Y$: ký tự có vị trí thấp hơn $1/3$ chiều cao biển số được xếp vào hàng trên (hàng 1), các ký tự còn lại xếp vào hàng dưới (hàng 2).

Kết quả và đóng góp của đề tài

Kết quả kỹ thuật

  • Xây dựng thành công chuỗi xử lý tự động nhận dạng biển số xe từ ảnh tĩnh, bao gồm các khâu: tiền xử lý hình thái học, phân ngưỡng thích nghi, định vị đa giác 4 đỉnh, căn chỉnh xoay mặt phẳng, phân đoạn và phân lớp ký tự.
  • Xử lý được cả hai định dạng biển số xe máy và ô tô phổ biến tại Việt Nam (biển dài 1 hàng và biển vuông 2 hàng).
  • Đóng gói bộ dữ liệu mẫu ký tự chuẩn hóa kích thước $20 \times 30\text{ pixels}$ kèm tập nhãn mã ASCII phục vụ trực tiếp cho bộ phân lớp KNN.

Đóng góp thực tiễn

  • Đồ án đã hệ thống hóa các đặc trưng quy chuẩn của biển số xe cơ giới Việt Nam (kích thước, tỷ lệ, phông chữ, màu sắc theo cơ quan/tỉnh thành) thành các tham số tiền xử lý và lọc biên trong thuật toán thị giác máy tính.
  • Hiện thực hóa phương pháp căn chỉnh góc nghiêng tự động dựa trên tọa độ 2 đỉnh đáy biển số, giúp tăng độ chính xác phân đoạn ký tự khi góc chụp camera bị lệch.

Hạn chế và hướng nghiên cứu tiếp theo

Hạn chế được ghi nhận qua thực nghiệm

  • Chất lượng ảnh và phân ngưỡng: Khi ảnh chụp có độ tương phản quá thấp hoặc bị đứt nét nhị phân, giải thuật xấp xỉ contour không nhận diện đủ 4 đỉnh đa giác, dẫn đến thất bại trong việc định vị khung biển số.
  • Nhiễu phân đoạn: Xuất hiện các trường hợp không khoanh được vùng ký tự hoặc nhận diện nhầm nhiều vùng biển số giả trên ảnh gốc phức tạp.
  • Hạn chế của mô hình KNN: Thuật toán KNN phụ thuộc lớn vào tập mẫu huấn luyện; khi giá trị $K$ nhỏ, mô hình dễ nhạy cảm với nhiễu; thời gian tính toán khoảng cách tăng tuyến tính theo kích thước dữ liệu kiểm tra.
  • Phạm vi dữ liệu: Đồ án mới dừng lại ở việc thử nghiệm trên các ảnh tĩnh đơn lẻ, chưa tích hợp xử lý luồng video trực tiếp từ camera giám sát thời gian thực.

Hướng phát triển

  • Nghiên cứu áp dụng các mô hình học sâu (Deep Learning) như Mạng nơ-ron tích chập (CNN) hoặc mô hình phát hiện đối tượng chuyên dụng (YOLO, SSD) để thay thế giải thuật trích xuất đặc trưng thủ công và KNN, nâng cao độ bền vững trong điều kiện môi trường ánh sáng phức tạp.
  • Phát triển hệ thống nhận dạng biển số trên luồng video thời gian thực phục vụ bài toán kiểm soát xe ra vào bãi đỗ và trạm thu phí tự động.

Giá trị tham khảo

Đồ án là tài liệu tham khảo hữu ích cho sinh viên các ngành Công nghệ thông tin, Kỹ thuật phần mềm, Robot và Trí tuệ nhân tạo khi bắt đầu tiếp cận lĩnh vực Xử lý ảnh và Thị giác máy tính:

  • Kỹ thuật tiền xử lý ảnh: Cung cấp phương pháp chi tiết kết hợp phép toán hình thái học Top Hat, Black Hat và phân ngưỡng động để tách đối tượng trong điều kiện ánh sáng không đồng đều.
  • Giải thuật hình học: Đoạn phân tích kỹ thuật tính góc quay biển số dựa trên tọa độ đỉnh và tam giác lượng giác là giải pháp trực quan, dễ áp dụng cho các bài toán căn chỉnh tài liệu/khung hình.
  • Quy trình phân lớp ký tự mẫu: Phương pháp tạo tập dữ liệu huấn luyện bằng đồ họa, chuẩn hóa kích thước ma trận $20 \times 30$ và lưu trữ dưới dạng ma trận điểm ảnh kết hợp mã ASCII là hướng dẫn chi tiết cho các bài toán OCR cơ bản sử dụng KNN.

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

1. Tại sao tác giả chọn trích xuất ảnh xám từ không gian màu HSV thay vì hệ màu RGB?

Hệ màu RGB biểu diễn màu sắc bằng 3 kênh màu kết hợp, dễ bị biến đổi khi cường độ ánh sáng môi trường thay đổi. Không gian màu HSV tách biệt rõ ba thành phần: Vùng màu (Hue), Độ bão hòa (Saturation) và Cường độ sáng (Value). Việc trích xuất ma trận kênh sáng $V$ làm ảnh xám giúp hệ thống kháng nhiễu ánh sáng tốt hơn và giảm khối lượng dữ liệu tính toán từ 3 kênh xuống 1 kênh.

2. Hệ thống xử lý trường hợp biển số bị nghiêng hoặc méo góc chụp bằng cách nào?

Tác giả xác định tọa độ hai đỉnh dưới cùng của biển số là $A(x_1, y_1)$ và $B(x_2, y_2)$. Từ hai điểm này, hệ thống tính toán chiều dài cạnh đối và cạnh kề của tam giác vuông $ABC$ để xác định góc lệch $\theta$. Nếu điểm $A$ nằm cao hơn điểm $B$, góc quay được đặt giá trị âm. Sau đó, ảnh được xoay theo góc đã tính để đưa biển số về phương nằm ngang chuẩn trước khi cắt ký tự.

3. Tập dữ liệu huấn luyện cho thuật toán KNN được xây dựng như thế nào?

Tập mẫu được tạo thủ công trên phần mềm Paint bằng phông chữ "Biển số xe Việt Nam" (loại bỏ ba ký tự dễ nhầm lẫn là $O, I, J$) và được xoay ở các góc độ khác nhau. Sau khi lấy ngưỡng và tách biên, mỗi ký tự được chuẩn hóa về kích thước $20 \times 30\text{ pixels}$ (600 điểm ảnh mang giá trị 0 hoặc 255). Người thực hiện gán nhãn bàn phím để lưu mã ASCII vào tệp classifications.txt và dữ liệu điểm ảnh vào flattened_images.txt.

4. Thuật toán phân biệt thứ tự ký tự giữa biển số 1 hàng và biển số 2 hàng bằng nguyên lý nào?

Sau khi tách được các khung bao ký tự trên biển số, hệ thống xét tọa độ vị trí trục dọc $Y$ của từng ký tự. Nếu vị trí ký tự nằm ở khoảng $1/3$ chiều cao phía trên của biển số, ký tự đó sẽ được xếp vào hàng thứ nhất; các ký tự nằm thấp hơn ngưỡng này sẽ được xếp vào hàng thứ hai.

5. Những thông số kích thước thực tế nào của biển số Việt Nam được dùng làm điều kiện lọc biên?

Đồ án sử dụng tỷ lệ kích thước thực tế của biển số dài ($110 \times 470\text{ mm}$) và biển số ngắn ($200 \times 280\text{ mm}$) để thiết lập ngưỡng tỷ lệ chiều cao / chiều rộng không vượt quá 3. Đồng thời, hệ thống áp dụng ràng buộc số lượng ký tự trong biển số xe Việt Nam nằm trong khoảng từ 7 đến 9 ký tự và tỷ lệ kích thước ký tự chuẩn ($80 \times 40\text{ mm}$) để loại bỏ các đường viền nhiễu.


Kết luận

Đồ án ngành của sinh viên Trần Hằng Ny đã trình bày một quy trình hoàn chỉnh về mặt kỹ thuật trong bài toán nhận dạng biển số xe Việt Nam bằng cách kết hợp thư viện OpenCV và giải thuật học máy KNN trên ngôn ngữ Python. Tác giả đã giải quyết tuần tự các mắt xích từ tiền xử lý hình thái học, hiệu chỉnh góc nghiêng hình học, phân đoạn đối tượng cho đến phân lớp ký tự quang học trên cả hai định dạng biển 1 hàng và 2 hàng. Mặc dù còn hạn chế về độ ổn định khi gặp ảnh nhiễu phức tạp và chỉ mới thực nghiệm trên dữ liệu ảnh tĩnh, công trình là tài liệu tham khảo có giá trị học thuật rõ ràng, cung cấp phương pháp luận thực nghiệm cụ thể cho các nghiên cứu nhập môn về thị giác máy tính.