You are on page 1of 31

ĐẠI HỌC KINH TẾ TP.

HCM

VIỆN CÔNG NGHỆ VÀ ĐỔI MỚI SÁNG TẠO


KHOA LIÊN VIỆN CTD

NHẬN DIỆN BIỂN SỐ XE VIỆT NAM

Giáo viên hướng dẫn: NGÔ HIẾU TRƯỜNG


Nhóm trưởng:

Tên MSSV
NGUYỄN NGỌC YẾN 31231026864
NHI

TP HCM, 2 tháng 4 năm 2024


DANH SÁCH THÀNH VIÊN VÀ NHIỆM VỤ

Họ tên MSSV Nhiệm vụ nhóm giao Mức độ Trưởng


hoàn nhóm
thành đánh giá
Sinh viên 1 NGUYỄN  Tìm hiểu code và thư viện OpenCV 100% 100%
NGỌC YẾN  Viết báo cáo chương 1, chương 2.1,
NHI 2.2
 Định dạng
 Thuyết trình
Sinh viên 2 TRẦN THỊ  Tìm hiểu code, sửa lại cho phù hợp 100% 100%
NGỌC THƯ với đề tài.
 Viết báo cáo chương 2.5, chương 3
Sinh viên 3 LÝ NGUYỆT  Tìm hiểu code, nghiên cứu thư viện 100% 100%
HOÀNG Pytesseract
DUNG  Viết báo cáo chương 2.4
 Thuyết trình
Sinh viên 4 ĐỖ MINH  Viết báo cáo chương 2.3 90% 80%
HẠNH  Nghiên cứu các thuật toán

Sinh viên 5 VÕ LÊ BẢO  Viết báo cáo chương 2.3 100% 80%
CHÂU  Nghiên cứu các thuật toán
Sinh viên 6 TRẦN THANH  Viết báo cáo chương 2.4 90% 80%
HUYỀN  Nghiên cứu các thuật toán và
phương pháp OCR

1
MỤC LỤC
DANH SÁCH THÀNH VIÊN VÀ NHIỆM VỤ.......................................................................................................1
DANH MỤC HÌNH ẢNH.........................................................................................................................................3
DANH MỤC BẢNG BIỂU......................................................................................................................................3
CHƯƠNG I: TỔNG QUAN VỀ ĐỀ TÀI VÀ THUẬT TOÁN................................................................................4
1. TỔNG QUAN VÀ NHIỆM VỤ ĐỀ TÀI..........................................................................................................4
1.1 Nội dung:....................................................................................................................................................4
1.2. Nhiệm vụ đề tài..........................................................................................................................................4
2. TỔNG QUAN BÀI TOÁN NHẬN DIỆN BIỂN SỐ XE.................................................................................4
CHƯƠNG II: BÀI TOÁN NHẬN DIỆN BIỂN SỐ XE............................................................................................5
1. KHÁI NIỆM BIỂN SỐ XE..........................................................................................................................5
2. XỬ LÝ ẢNH VÀ OPENCV.........................................................................................................................6
2.1. Xử lý ảnh....................................................................................................................................................6
2.2. OpenCV ( Open Computer Vision)............................................................................................................7
3. PHÁT HIỆN VỊ TRÍ VÀ TÁCH BIỂN SỐ XE...........................................................................................8
3.1. Hướng giải quyết.......................................................................................................................................8
3.2. Chuyển ảnh xám.........................................................................................................................................8
3.3. Giảm nhiễu bằng bộ lọc Gauss..................................................................................................................9
3.4. Phát hiện cạnh Canny (Canny Edge Detection)......................................................................................11
3.5. Lọc biển số với contour............................................................................................................................14
4. NHẬN DIỆN KÝ TỰ.................................................................................................................................20
4.1. Tìm vùng đối tượng:.................................................................................................................................20
4.2. Tổng quát về nhận diện ký tự...................................................................................................................20
4.3. Hướng giải quyết.....................................................................................................................................22
5. KẾT QUẢ THỰC HIỆN............................................................................................................................23
5.1. Công cụ và đo lường................................................................................................................................23
5.2. Kết quả và giải thích................................................................................................................................23
CHƯƠNG III: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN.........................................................................................26
1. ƯU ĐIỂM VÀ KHUYẾT ĐIỂM.....................................................................................................................26
1.1. Ưu điểm:..................................................................................................................................................26
1.2. Khuyết điểm:............................................................................................................................................26
2. HƯỚNG PHÁT TRIỂN..................................................................................................................................27
LỜI CẢM ƠN..........................................................................................................................................................28
TÀI LIỆU THAM KHẢO.......................................................................................................................................29

2
DANH MỤC HÌNH ẢNH
HÌNH 2.1: GIẢI MÃ KÝ HIỆU TRÊN BIỂN SỐ XE Ở VIỆT NAM.......................................6
HÌNH 3.1: CÁC BƯỚC PHÁT HIỆN BIỂN SỐ XE..................................................................8
HÌNH 3.2: CHUYỂN ẢNH XÁM..............................................................................................9
HÌNH 3.3: NHIỄU.....................................................................................................................10
HÌNH 3.4: MA TRẬN LỌC GAUSS........................................................................................10
HÌNH 3.5: LOẠI BỎ NHỮNG ĐIỂM KHÔNG PHẢI CỰC ĐẠI...........................................12
HÌNH 3.6: LỌC NGƯỠNG.......................................................................................................13
HÌNH 3.7: ẢNH SAU KHI PHÁT HIỆN BIÊN CANNY........................................................14
HÌNH 3.8: THUẬT TOÁN SQUARE TRACING....................................................................15
HÌNH 3.9: THUẬT TOÁN SQUARE TRACING CHẠY ĐÚNG...........................................15
HÌNH 3.10: THUẬT TOÁN SQUARE TRACING CHẠY SAI..............................................16
HÌNH 3.11: THUẬT TOÁN MOORE-NEIGHBOR................................................................16
HÌNH 3.12: VẼ CONTOUR VỚI OPENCV............................................................................18
HÌNH 3.13: CONTOUR CHƯA XẤP XỈ ĐA GIÁC...............................................................19
HÌNH 3.14: CONTOUR ĐÃ XẤP XỈ ĐA GIÁC.....................................................................19
HÌNH 4.1: BIỂN SỐ XE KHI VẼ CẠNH CONTOUR............................................................20
HÌNH 5.1: KẾT QUẢ NHẬN DIỆN BIỂN SỐ XE 1 HÀNG..................................................25
HÌNH 5.2: KẾT QUẢ NHẬN DIỆN BIỂN SỐ XE 2 HÀNG..................................................26

DANH MỤC BẢNG BIỂU


BẢNG 5.1: KẾT QUẢ THỬ NGHIỆM TRÊN HAI LOẠI BIỂN SỐ XE...............................24
BẢNG 5.2: KẾT QUẢ THỬ NGHIỆM TRÊN BIỂN 1 HÀNG...............................................24
BẢNG 5.3: KẾT QUẢ THỬ NGHIỆM TRÊN BIỂN 2 HÀNG...............................................24

3
CHƯƠNG I: TỔNG QUAN VỀ ĐỀ TÀI VÀ THUẬT TOÁN
1. TỔNG QUAN VÀ NHIỆM VỤ ĐỀ TÀI
1.1 Nội dung:
- Tìm hiểu về biển số xe và hệ thống nhận dạng biển số xe
- Phát biểu bài toán và hướng giải quyết
- Nghiên cứu một số thuật toán xử lý ảnh và nhận dạng ký tự ứng dụng trong
việc nhận dạng biển số xe
1.2. Nhiệm vụ đề tài
Từ nội dung nêu trên, đề tài của em sẽ bao gồm các nhiệm vụ sau:
- Tìm hiểu khái quát về xử lý ảnh và bài toán nhận dạng biển số xe.
- Tìm hiểu thông tin về biển số xe và phân loại biển số xe của Việt Nam.
- Tìm hiểu các công đoạn chính của bài toán nhận dạng biển số xe gồm 3
khâu chính:
● Phát hiện vị trí và tách biển số xe
● Phân đoạn ký tự trong biển số xe
● Nhận dạng ký tự
- Cài đặt thử nghiệm.
2. TỔNG QUAN BÀI TOÁN NHẬN DIỆN BIỂN SỐ XE
Ngày nay trên thế giới bên cạnh việc tăng trưởng kinh tế là sự phát triển của các ngành khoa
học kỹ thuật nói chung, mà trong đó ngành công nghiệp sản xuất các phương tiện giao thông
lại là một trong những ngành có tốc độ phát triển cực nhanh. Sự phát triển ấy, được thể hiện rõ
ràng nhất thông qua hình ảnh các phương tiện giao thông trên thế giới ngày một tăng cao và đa
dạng. Tuy nhiên, điều đó lại gây một áp lực đối với những người và cơ quan các cấp quản lý,
làm cho công tác quản lý và giám sát sẽ khó khăn hơn.
Nhận diện biển số xe hiện nay đang là một bài toán quan trọng trong nhiều lĩnh vực như giao
thông thông minh, an ninh, hỗ trợ người khuyết tật. Trong những năm gần đây, với sự phát
triển của công nghệ trí tuệ nhân tạo, các phương pháp nhận diện biển số xe ngày càng tiên tiến
và hiệu quả.

4
Phương pháp sử dụng thư viện OpenCV và ngôn ngữ lập trình Python là một trong những
cách phổ biến và dễ thao tác để thực hiện nhận diện biển số xe. Phương pháp này có nhiều ưu
điểm cũng như độ chính xác cao, khả năng áp dụng cho nhiều loại biển số khác nhau và có
thể sử dụng cho cả ảnh và video.

CHƯƠNG II: BÀI TOÁN NHẬN DIỆN BIỂN SỐ XE


1. KHÁI NIỆM BIỂN SỐ XE
- Khái niệm biển số xe: Biển số xe (hay còn gọi là biển xe cơ giới) là biển được sử dụng
để hiển thị dấu đăng ký của phương tiện tại Việt Nam. Đây là biển bắt buộc đối với
phương tiện cơ giới sử dụng trên đường công cộng để hiển thị biển đăng ký xe. [1]
- Quy định định dạng:
+ Tại Việt Nam, hầu hết các biển số xe thuôc mẫu năm 2010 gồm một mã tỉnh,
một sêri đăng ký và năm chữ số tự nhiên, hoặc mẫu năm 1976 gồm một mã
tỉnh, một sêri đăng ký và bốn chữ số tự nhiên. Biển số xe quân sự là trường hợp
ngoại lệ điển hình.
+ Theo Thông tư 24/2023/TT-BCA, biển số được làm bằng kim loại, có màng
phản quang, ký hiệu bảo mật công an hiệu đóng chìm đóng chìm do đơn vị
được Bộ Công an cấp phép sản xuất biển số, do Cục Cảnh sát giao thông quản
lý, riêng biển số xe đăng ký tạm thời được in trên giấy. Về kích thước, xe ôtô
được gắn hai biển số, một biển ngắn có kích thước 330 × 165 mm và một biển
dài có kích thước 520 × 110 mm. Máy kéo, rơmoóc, sơmi rơmoóc được gắn
một biển số ở phía sau, kích thước 330 × 165 mm. Xe môtô được gắn một biển
số ở phía sau, kích thước 190 × 140 mm. [1]
+ Trên mỗi biển số xe các tỉnh có in những con số và chữ đã được quy định sẵn,
có hình Quốc huy dập nổi của nước Việt Nam.
+ Biển số xe được quy định là biển số nền màu trắng, chữ và số màu đen với 2 số
đầu theo thứ tự các tỉnh, 4 hoặc 5 số cuối là số thứ tự cấp ngẫu nhiên.

5
+ Số lượng ký tự trong biển số xe nằm trong khoảng [7,9]. Chiều cao của chữ
và số 80mm, chiều rộng của chữ và số: 40mm.

Hình 2.1: Giải mã ký hiệu trên biển số xe ở Việt Nam


2. XỬ LÝ ẢNH VÀ OPENCV
2.1. Xử lý ảnh
a) Khái niệm xử lý ảnh
Xử lý ảnh là quá trình chuyển đổi một hình ảnh sang dạng kỹ thuật số và thực hiện các thao
tác nhất định để nhận được một số thông tin hữu ích từ hình ảnh đó. Hệ thống xử lý hình ảnh
thường coi tất cả các hình ảnh là tín hiệu 2D khi áp dụng một số phương pháp xử lý tín hiệu đã
xác định trước. [2]
Các loại xử lý hình ảnh chính:
- Nhận diện: Phân biệt hoặc phát hiện các đối tượng trong hình ảnh
- Làm sắc nét và phục hồi: Tạo hình ảnh nâng cao từ hình ảnh gốc
- Nhận dạng mẫu: Đo các mẫu khác nhau xung quanh các đối tượng trong hình ảnh
- Truy xuất: Duyệt và tìm kiếm hình ảnh từ một cơ sở dữ liệu lớn gồm các hình ảnh kỹ
thuật số tương tự như hình ảnh gốc
b) Các bước xử lý ảnh
- Thu thập ảnh: Thu thập hình ảnh là bước đầu tiên trong quá trình xử lý hình ảnh, hay
còn được gọi là tiền xử lý. Nó liên quan đến việc lấy hình ảnh từ một nguồn, thường là
nguồn dựa trên phần cứng.
- Tăng cường hình ảnh: Điều chỉnh độ sáng, tương phản, và loại bỏ nhiễu

6
- Phục hồi hình ảnh: Phục hồi hình ảnh là quá trình cải thiện hình ảnh, sử dụng các mô
hình toán học hoặc xác suất nhất định.
- Xử lý hình ảnh màu: Xử lý ảnh màu bao gồm một số kỹ thuật tạo mô hình màu trong
miền kỹ thuật số.
- Wavelets và xử lý đa phân giải: Biểu diễn hình ảnh ở nhiều tỷ lệ
- Nén: Nén là một quá trình được sử dụng để giảm dung lượng lưu trữ hoặc băng thông
cần thiết để truyền tải hình ảnh đó.
- Xử lý hình thái: Xử lý hình thái liên quan đến các kỹ thuật trích xuất thành phần của
ảnh nhằm phục vụ việc biểu diễn và mô tả hình dạng.
- Phân đoạn: Phân chia hình ảnh thành các phần riêng biệt
- Trình bày và mô tả: Mô tả đặc điểm và thuộc tính của vùng.
- Nhận dạng: Nhận dạng gán nhãn cho một đối tượng dựa trên mô tả của nó.
c) Các loại dữ liệu hình ảnh thường được xử lý
- Ảnh nhị phân: loại ảnh này thường chỉ sử dụng hai giá trị pixel, 0 và 1, tương
ứng với màu đen và màu trắng. Đây còn được gọi là ảnh đơn sắc.
- Ảnh đen-trắng (grayscale image): đây là một định dạng hình ảnh phổ biến,
thường dùng cho các hình ảnh có thang độ xám. Trong định dạng này, giá trị 0
thường biểu thị màu đen, giá trị 255 biểu thị màu trắng, và giá trị 127 thường
biểu thị màu xám ở giữa.
- Ảnh màu 8 bit: loại hình ảnh này thường được sử dụng rộng rãi và được biết
đến với 256 mức màu sắc khác nhau. Nó thường được gọi là hình ảnh thang độ
xám, trong đó giá trị 0 là màu đen và giá trị 255 là màu trắng.
- Ảnh màu 16 bit: đây là một định dạng ảnh màu với 65.536 màu sắc khác nhau,
thường được gọi là định dạng màu cao. Trong định dạng này, màu sắc được
phân phối rộng rãi và thường được chia thành 3 kênh màu: đỏ, xanh lục, và
xanh lam.
2.2. OpenCV ( Open Computer Vision)
a) Khái niệm
OpenCV là tên viết tắt của open source computer vision library – có thể được hiểu là một thư
viện nguồn mở cho máy tính. Cụ thể hơn OpenCV là kho lưu trữ các mã nguồn mở được dùng
để xử lý hình ảnh, phát triển các ứng dụng đồ họa trong thời gian thực. [3]

7
OpenCV được phát hành theo giấy phép BSD, do đó nó hoàn toàn miễn phí cho cả học thuật
và thương mại. Nó có các interface C++, C, Python, Java và hỗ trợ Windows, Linux, Mac OS,
iOS và Android. OpenCV được thiết kế để tính toán hiệu quả và với sự tập trung nhiều vào
các ứng dụng thời gian thực. Được viết bằng tối ưu hóa C/C++, thư viện có thể tận dụng lợi
thế của xử lý đa lõi. Được sử dụng trên khắp thế giới, OpenCV có cộng đồng hơn 47 nghìn
người dùng và số lượng download vượt quá 6 triệu lần. Phạm vi sử dụng từ nghệ thuật tương
tác, cho đến lĩnh vực khai thác mỏ, bản đồ trên web hoặc công nghệ robot. [3]
3. PHÁT HIỆN VỊ TRÍ VÀ TÁCH BIỂN SỐ XE
3.1. Hướng giải quyết
Sơ đồ dưới đây sẽ tóm gọn các bước để xác định và tách biển số xe từ clip:

Hình 3.1: Các bước phát hiện biển số xe


Đầu tiên, từ clip ta sẽ cắt từng frame ảnh ra từ clip đầu vào để tiến hành xử lý và tách biển số
xe. Trong phạm vi đồ án này, nhóm sẽ tập trung vào việc nhận diện được biển số dựa trên sự
thay đổi đột ngột về cường độ ánh sáng giữa biển số và môi trường xung quanh. Do đó, một
cách tiếp cận phổ biến là ta sẽ chuyển đổi hình ảnh thành ảnh xám để loại bỏ thông tin màu
sắc RGB. Sau đó, ta giảm nhiễu bằng bộ lọc Gauss để loại bỏ những chi tiết nhiễu có thể gây
ảnh hưởng đến quá trình nhận diện, đồng thời cải thiện tốc độ xử lý.
Để phân tách thông tin biển số và nền, ta sử dụng ngưỡng động (Adaptive Threshold). Sau đó,
áp dụng thuật toán phát hiện cạnh Canny để trích xuất chi tiết cạnh của biển số. Trong quá
trình xử lý, máy tính có thể nhầm lẫn biển số với nhiễu. Để xác định đúng biển số, ta lọc cuối
cùng bằng tỉ lệ cao/rộng hoặc diện tích của biển số. Cuối cùng, vị trí của biển số được xác
định bằng cách vẽ Contour bao quanh.
3.2. Chuyển ảnh xám
Ảnh xám (Gray Scale) đơn giản là một hình ảnh trong đó các màu là các sắc thái của màu xám
với 256 cấp độ xám biến thiên từ màu đen đến màu trắng, nằm trong giải giá trị từ 0 đến 255,
nghĩa là cần 8 bits hay 1 byte để biểu diễn mỗi điểm ảnh này. Lý do cần phải phân biệt giữa

8
ảnh xám và các ảnh khác nằm ở việc ảnh xám cung cấp ít thông tin hơn cho mỗi pixel. Với
ảnh thông thường thì mỗi pixel thường được cung cấp 3 trường thông tin trong khi với ảnh
xám chỉ có 1 trường thông tin, việc giảm khối lượng thông tin giúp tăng tốc độ xử lý, đơn giản
hóa giải thuật nhưng vẫn đảm bảo các tác vụ cần thiết [4].
Ở bài này em sẽ chuyển ảnh xám từ hệ màu RGB thay vì HSV vì với không gian màu RGB ta
có ba ma trận xám tương ứng cho màu Red, Green, Blue là: Ma trận xám đỏ của ảnh (Red),
ma trận xám lục của ảnh (Green), ma trận xám lam của ảnh (Blue). Tuy đối với hệ màu RGB,
sự thay đổi ánh sáng có thể không được phản ánh rõ ràng trong các thành phần màu đỏ, xanh
lá cây và xanh dương nhưng chúng ta vẫn có thể sử dụng không gian màu RGB để chuyển đổi
hình ảnh thành ảnh xám bằng cách lấy trung bình của các giá trị trong các kênh màu.
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Hàm cv2.cvtColor sử dụng công thức chuyển đổi màu để chuyển đổi ảnh từ không gian màu
BGR sang không gian màu xám.
Trong không gian màu xám, mỗi pixel được biểu diễn bởi một giá trị duy nhất, thể hiện độ
sáng của pixel đó.

Hình 3.2: Chuyển ảnh xám


3.3. Giảm nhiễu bằng bộ lọc Gauss
3.3.1. Nhiễu ( Noise)
Noise được hiểu cơ bản là các dạng chấm hạt nhỏ phân bố trên hình ảnh. Noise có thể làm
biến dạng các chi tiết trong ảnh khiến cho chất lượng ảnh thấp.
Trên thực tế có nhiều loại nhiễu, nhưng người ta thường chia làm ba loại: nhiễu cộng, nhiễu
nhân và nhiễu xung. Bản chất của nhiễu thường tương ứng với tần số cao và cơ sở lý thuyết

9
của bộ lọc là chỉ cho những tín hiệu có tần số nhất định đi qua, nên người ta thường sử dụng
bộ lọc thông thấp hay trung bình.

Hình 3.3: Nhiễu


3.3.2. Bộ lọc Gauss
Bộ lọc Gauss được cho là bộ lọc hữu ích nhất, được thực hiện bằng cách nhân chập ảnh đầu
vào với một ma trận lọc Gauss sau đó cộng chúng lại để tạo thành ảnh đầu ra.
Ý tưởng chung là giá trị mỗi điểm ảnh sẽ ảnh hưởng nhiều bởi các điểm ảnh lân cận gần hơn
là các điểm ảnh ở xa. Trọng số của sự phụ thuộc được lấy theo hàm Gauss (một phương pháp
phổ biến cũng được áp dụng trong quy luật phân phối chuẩn) [4].

Hình 3.4: Ma trận lọc Gauss


Giả sử ảnh là một chiều. Điểm ảnh ở trung tâm sẽ có trọng số lớn nhất. Các điểm ảnh ở càng
xa trung tâm sẽ có trọng số giảm dần khi khoảng cách từ chúng tới điểm trung tâm tăng lên.
Như vậy điểm càng gần trung tâm sẽ càng đóng góp nhiều hơn vào giá trị điểm trung tâm.

10
blur = cv2.GaussianBlur(gray, (5, 5), 0)
Sử dụng bộ lọc Gaussian để tính toán giá trị trung bình cho mỗi pixel trong ảnh đầu vào.
Bộ lọc Gaussian là một hàm phân phối xác suất có dạng hình chuông. Hàm này có giá trị cao
nhất tại tâm và giảm dần theo khoảng cách từ tâm.
(5, 5): Kích thước của bộ lọc Gaussian được sử dụng. Kích thước này xác định độ rộng của
vùng ảnh được sử dụng để tính toán giá trị trung bình cho mỗi pixel.
0: Giá trị sigma của bộ lọc Gaussian. Sigma là tham số điều chỉnh mức độ làm mờ ảnh. Giá trị
sigma càng cao, ảnh càng bị làm mờ nhiều hơn.
3.4. Phát hiện cạnh Canny (Canny Edge Detection)
Trong hình ảnh, thường có các thành phần như vùng trơn, góc/cạnh và nhiễu. Cạnh trong ảnh
mang đặc trưng quan trọng và thường thuộc về đối tượng trong ảnh. Để phát hiện cạnh trong
ảnh, có nhiều giải thuật khác nhau như toán tử Sobel, toán tử Prewitt, Zero crossing, và nhiều
hơn nữa. Tuy nhiên, ở đây, chúng em chọn sử dụng giải thuật Canny vì nó có nhiều ưu điểm
hơn so với các phương pháp khác [4]. Canny ít bị ảnh hưởng bởi nhiễu và có khả năng phát
hiện các biên yếu. Phương pháp này hoạt động qua 4 bước chính:
Bước 1: Giảm nhiễu (Noise reduction)
Bước 2: Tính toán Gradient (Gradient calculation)
Bước 3: Loại bỏ những điểm không phải là cực đại (Non-maximum suppression)
Bước 4: Lọc ngưỡng (Double threshold)
3.4.1 Giảm nhiễu
Làm mờ ảnh, giảm nhiễu dùng bộ lọc Gauss kích thước 5x5. Kích thước 5x5 thường hoạt
động tốt cho giải thuật Canny
3.4.2 Tính toán Gradient
Ta dùng 2 bộ lọc Sobel X và Sobel Y (3x3) để tính đạo hàm Gx và Gy
Tìm gradient và hướng được làm tròn về 4 hướng: hướng ngang (0 độ), hướng chéo bên phải
(45 độ), hướng dọc (90 độ) và hướng chéo trái (135 độ).
3.4.3 Loại bỏ những điểm không phải là cực đại
Tại bước này, chúng ta sử dụng một bộ lọc 3x3 để duyệt qua từng pixel trên ảnh gradient.
Trong quá trình lọc, chúng ta kiểm tra xem độ lớn của gradient tại pixel trung tâm có phải là
cực đại so với gradient của các pixel xung quanh không. Nếu đúng, chúng ta giữ lại pixel đó.
Ngược lại, nếu pixel tại vị trí đó không phải là cực đại so với các pixel lân cận, chúng ta đặt độ
lớn của gradient tại pixel đó về zero. Chúng ta chỉ so sánh pixel trung tâm với hai pixel lân cận

11
theo hướng của gradient. Ví dụ, nếu hướng gradient là 0 độ, chúng ta so sánh pixel trung tâm
với pixel liền trái và pixel liền phải của nó. Trong trường hợp khác, nếu hướng gradient là 45
độ, chúng ta so sánh với hai pixel hàng xóm là góc trên bên phải và góc dưới bên trái của pixel
trung tâm
3.4.4. Lọc ngưỡng
Lọc ngưỡng: ta sẽ kiểm tra các pixel dương trên mặt nạ nhị phân tạo ra từ kết quả của bước
trước. Nếu giá trị gradient vượt ngưỡng max_value thì chúng ta xác định rằng pixel đó chắc

Hình 3.5: Loại bỏ những điểm không phải cực đại


chắn là cạnh. Các pixel có độ lớn gradient nhỏ hơn ngưỡng min_value sẽ bị loại bỏ. Còn các
pixel nằm trong khoảng 2 ngưỡng trên sẽ được xem xét rằng chúng có nằm liền kề với những
pixel được xác định là "chắc chắn là cạnh" hay không. Nếu liền kề thì ta giữ, còn không liền
kề bất cứ pixel cạnh nào thì ta loại. Sau bước này, ta có thể thực hiện thêm các bước hậu xử lý
để loại bỏ nhiễu, chẳng hạn như loại bỏ những pixel cạnh rời rạc hoặc cạnh ngắn nếu muốn
[4].

12
Hình 3.6: Lọc ngưỡng

edges = cv2.Canny(blur, 50, 150)


edges: Ma trận ảnh đầu ra, thể hiện các cạnh được phát hiện trong ảnh.
blur: Ma trận ảnh đầu vào, được biểu diễn dưới dạng ảnh xám đã được làm mờ.
50: Giá trị ngưỡng thấp. Các pixel có độ dốc cao hơn giá trị ngưỡng thấp sẽ được đánh dấu là
cạnh.
150: Giá trị ngưỡng cao. Các pixel có độ dốc cao hơn giá trị ngưỡng cao và được nối với các
pixel có độ dốc cao hơn giá trị ngưỡng thấp sẽ được xác định là cạnh mạnh.
cv2.Canny: sử dụng thuật toán Canny để phát hiện các cạnh trong ảnh
3.4.5. Kết quả

13
Sau khi sử dụng phát hiện biên canny, mặc dù đã trích xuất được những chi tiết cạnh của biển
số, tuy nhiên vẫn còn tồn tại quá nhiều chi tiết không cần thiết trong hình ảnh. Vì vậy, chúng

Hình 3.7: Ảnh sau khi phát hiện biên Canny


ta sẽ sử dụng kỹ thuật vẽ contour để áp dụng những đặc điểm cụ thể của biển số và lọc lấy ra
biển số chính xác từ đó.
3.5. Lọc biển số với contour
3.5.1 Một số phương pháp tìm contour
Contour là tập hợp các điểm tạo thành đường cong kín bao quanh một đối tượng trong ảnh.
Chúng thường được sử dụng để xác định vị trí và đặc điểm của đối tượng. Có tổng cộng 4
thuật toán phổ biến cho việc trích xuất Contour. Trong số đó, hai thuật toán thường được sử
dụng là Square Tracing và Moore – Neighbor Tracing, vì chúng dễ thực hiện và phù hợp để
tìm kiếm Contour của một mẫu [4]. Thư viện OpenCV thường áp dụng thuật toán Suzuki’s
Contour tracing. Dưới đây, em sẽ giải thích chi tiết hơn về ba phương pháp này:
a. Thuật toán Square Tracing
Duyệt từ pixel ngoài cùng bên trái phía dưới, đi lên cho tới khi gặp pixel có giá trị bằng 255
(pixel này sẽ được gọi là pixel start) thì bắt đầu di chuyển theo quy tắc sau:
- Nếu gặp Pixel có giá trị bằng 255 thì rẽ trái.
- Nếu gặp Pixel có giá trị bằng 0 thì rẽ phải.
- Di chuyển cho tới khi quay lại pixel start thì dừng lại.
Hình sau mô tả cách hoạt động của thuật toán:

14
Hình 3.8: Thuật toán Square Tracing

Thuật toán sẽ dừng khi di chuyển vào pixel khởi đầu lần thứ hai sau khi đã đi qua một số pixel
khác và theo hướng đúng như lần di chuyển đầu tiên. Nếu di chuyển vào pixel khởi đầu mà
không theo hướng ban đầu, thuật toán sẽ sai. Vì vậy, phương pháp này chỉ hoạt động chính
xác trên các đối tượng 4-connected.

Hình 3.9: Thuật toán Square Tracing chạy đúng

15
Hình 3.10: Thuật toán Square Tracing chạy sai
b. Thuật toán Moore – Neighbor
Thuật toán này khác biệt so với thuật toán Square Tracking. Khi gặp pixel có giá trị bằng 255
đầu tiên (pixel khởi đầu), chúng ta quay lại pixel trước đó và sau đó đi qua các pixel thuộc 8-
connected theo chiều kim đồng hồ cho tới khi gặp pixel khác có giá trị bằng 255. Điều kiện
kết thúc cũng tương tự như thuật toán Square Tracking [4].

Hình 3.11: Thuật toán Moore-Neighbor


c. Thuật toán Suzuki’s Tracing

16
Thuật toán này được thư viện OpenCV sử dụng, ngoài khả năng xác định được biên của vật
thể như hai phương pháp trước đó thì phương pháp Suzuki’s Tracing còn cung cấp khả năng
phân biệt được đường biên ngoài (Outer) và đường biên trong (Hole) của vật thể.
Hàm trong OpenCV được biểu diễn như sau:
findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray
hierarchy, int mode, int method, Point offset=Point())
Các tham số:
image : hình ảnh cần tìm biên, là ảnh nhị phân.
contours : lưu trữ các đường biên tìm được, mỗi đường biên được lưu trữ dưới dạng một
vector của các điểm.
hierarchy : chứa thông tin về hình ảnh như số đường viền, xếp hạng các đường viền theo kích
thước, trong ngoài,...
mode :
CV_RETR_EXTERNAL : khi sử dựng cờ này nó chỉ lấy ra những đường biên bên ngoài,
nhưng biên bên trong của vật thể bị loại bỏ.
CV_RETR_LIST : Khi sử dụng cờ này nó lấy ra tất cả các đường viền tìm được.
CV_RETR_CCOMP : khi sử dụng cờ này nó lấy tất cả những đường biên và chia nó làm 2
level, những đường biên bên ngoài đối tượng, và những đường biên bên trong đối tượng.
CV_RETR_TREE : khi sử dụng cờ này nó lấy tất cả các đường biên và tạo ra một hệ thống
phân cấp đầy đủ của những đường lồng nhau.
method :
CV_CHAIN_APPROX_NONE : sử dụng cờ này sẽ lưu trữ tất cả các điểm của đường viền .
CV_CHAIN_APPROX_SIMPLE : Ví dụ : một hình chữ nhật sẽ được mã hoá bằng toạ độ của
4 đỉnh.
CV_CHAIN_APPROX_TC89_L1 or CV_CHAIN_APPROX_TC89_KCOS : Áp dụng thuật
toán xấp xỉ Tech-Chin.

17
Hình 3.12: Vẽ Contour với OpenCV
Trong ảnh, những đường màu hồng là đường contour bao quanh vật thể. Tuy nhiên, vì có quá
nhiều đường contour bao quanh các vật thể không phải là biển số nên chúng ta sẽ áp dụng
những đặc trưng riêng về tỉ lệ chiều cao/ chiều rộng, diện tích trong một khung hình cố định
như đã đề cập ở mục 2.1 để lọc ra đúng biển số cần tìm [4].
3.5.2 Lọc biển số
Để xấp xỉ contour, ta chuyển chúng thành các hình đa giác và chỉ giữ lại những đa giác có
đúng 4 cạnh. Khi xấp xỉ, ta lưu trữ vị trí của các đỉnh của đa giác trong một mảng. Số cạnh của
đa giác sẽ bằng số đỉnh và bằng độ dài của mảng đó [4].

18
Hình 3.13: Contour chưa xấp xỉ đa giác

Hình 3.14: Contour đã xấp xỉ đa giác


Tiếp theo, chúng ta sẽ tính toán tỷ lệ giữa chiều cao và chiều rộng cũng như diện tích của các
biển số phù hợp. Sau đó, chúng ta sẽ lưu tất cả các biển số có trong hình dưới dạng các tọa độ
của các đỉnh của chúng.
Từ đây, chúng ta sẽ thực hiện việc cắt hình ảnh biển số từ các tọa độ vị trí đã biết để nhằm
phục vụ cho mục đích tiếp theo là “Nhận diện ký tự trong biển số ”. Đáng chú ý, ở đây chúng
ta sẽ cắt từ ảnh nhị phân luôn để giúp máy tính xử lý nhanh hơn và tốn ít thời gian hơn.
contours, _ = cv2.findContours(edgescopy(), cv2.RETR_EXTERAL,
cv2.CHAIN_APPROX_SIMPLE)
Hàm cv2.findContours duyệt qua ảnh edges và tìm các đường viền khép kín.
edges.copy(): Ma trận ảnh đầu vào, là bản sao của ảnh edges chứa thông tin các cạnh đã được
phát hiện.

19
cv2.RETR_EXTERNAL: Kiểu tìm kiếm các đường viền, chỉ tìm các đường viền ngoài cùng
(bên ngoài các đối tượng).
cv2.CHAIN_APPROX_SIMPLE: Phương pháp xấp xỉ các đường viền, loại bỏ các điểm thừa
và chỉ giữ lại các điểm quan trọng.
4. NHẬN DIỆN KÝ TỰ
4.1. Tìm vùng đối tượng:
- Sau khi lọc contour cho các kí tự. Ta phân biệt biển số để tránh nhầm lẫn với các vật
thể khác: area = cv2.contourArea(contour). Nếu contour lớn hơn 1000, thì có khả năng
contour đó là biển số xe, những contour có diện tích nhỏ thường là nhiễu.
- Sau đó, ta vẽ hình chữ nhật bao quanh các kí tự đó bằng hàm x, y, w, h =
cv2.boundingRect(contour). Chương trình sẽ trả về tọa độ (x, y) và chiều rộng w và
chiều cao h của hình chữ nhật đó. Tiếp theo, ta gán các giá trị này cho các biến lần lượt
là x, y, w, và h.
- Tiếp đó, ta dùng hàm roi = img[y:y+h, x:x+w] để cắt một phần của ảnh gốc, bắt đầu từ
điểm có tọa độ (x, y), có kích thước chiều rộng w và chiều cao h. Điều này cho phép
trích xuất một phần cụ thể của ảnh gốc để thực hiện các thao tác xử lý hoặc phân tích
dữ liệu trên phần đó.
- Tiếp theo, hiển thị vùng quan trọng đã nhận dạng được bằng hàm: cv2.imshow('ROI',
roi)
Trong ảnh, những đường màu xanh là đường contour. Sau khi đã áp dụng các điều kiện
thì sẽ vẽ ra những hình chữ nhật màu xanh bao quanh các kí tự.

Hình 4.1: Biển số xe khi vẽ cạnh Contour


4.2. Tổng quát về nhận diện ký tự
Quá trình nhận diện ký tự quang học (OCR) là công nghệ cho phép chuyển đổi văn bản từ
hình ảnh sang định dạng văn bản có thể chỉnh sửa được bằng máy tính. Công nghệ này sử

20
dụng các kỹ thuật từ AI và machine vision để phân tích hình ảnh, nhận diện các kí tự và
chuyển đổi chúng thành mã ASCII. Đặc biệt công nghệ này còn được ứng dụng vào rất nhiều
lĩnh vực trong cuộc sống từ các ứng dụng nhận dạng chữ viết, văn bản, cho tới các phần mềm
hệ thống ứng dụng nhận diện các biển số xe… [4]
Công cụ OCR hoặc phần mềm OCR hoạt động theo các bước sau:
Thu nhận hình ảnh
Một máy quét sẽ đọc tài liệu và chuyển đổi chúng thành dữ liệu nhị phân. Phần mềm OCR
phân tích hình ảnh đã quét và phân loại vùng sáng làm nền và vùng tối làm văn bản.
Tiền xử lý
Trước tiên, phần mềm OCR sẽ làm sạch hình ảnh và loại bỏ các lỗi để chuẩn bị cho bước đọc.
Sau đây là một số kỹ thuật làm sạch của phần mềm OCR:
● Chỉnh thẳng hoặc nghiêng nhẹ tài liệu đã quét để khắc phục lỗi về căn chỉnh trong quá
trình quét.
● Khử nhiễu đốm hoặc loại bỏ mọi đốm ảnh kỹ thuật số hay làm mịn các viền của hình
ảnh văn bản.
● Làm sạch đường viền khung và đường thẳng trong hình ảnh.
● Nhận dạng chữ viết cho công nghệ OCR đa ngôn ngữ
Nhận dạng văn bản
Hai loại thuật toán OCR hoặc quy trình phần mềm chính mà phần mềm OCR sử dụng để nhận
dạng văn bản được gọi là so khớp mẫu và trích xuất đặc điểm.
So khớp mẫu
Cách thức hoạt động của so khớp mẫu là tách biệt một hình ảnh ký tự, được gọi là hình dạng
chữ và so sánh với một hình dạng chữ tương tự được lưu trữ. Tính năng nhận dạng mẫu chỉ
hoạt động hiệu quả khi hình dạng chữ được lưu trữ có phông chữ và tỷ lệ tương tự với hình
dạng chữ đầu vào. Phương thức này hoạt động tốt đối với hình ảnh quét từ tài liệu được đánh
máy bằng phông chữ đã biết.
Trích xuất đặc điểm
Trích xuất đặc điểm sẽ chia nhỏ hoặc phân tách hình dạng chữ thành các đặc điểm như nét
thẳng, nét vòng khép kín, hướng nét và giao điểm nét. Sau đó, hệ thống sử dụng các đặc điểm
này để tìm kết quả phù hợp nhất hoặc kết quả gần đúng nhất trong số các hình dạng chữ khác
nhau được lưu trữ.
Hậu xử lý

21
Sau khi phân tích, hệ thống sẽ chuyển đổi dữ liệu văn bản được trích xuất thành tệp trên máy
tính. Một số hệ thống OCR có thể tạo các tệp PDF có chú thích bao gồm cả phiên bản trước và
sau của tài liệu được quét.
4.3. Hướng giải quyết
4.3.1. Sử dụng pytesseract
Pytesseract giúp người dùng dễ dàng sử dụng các chức năng của Tesseract trong Python mà
không cần phải tương tác trực tiếp với mã C++ của Tesseract. Với Pytesseract, chúng ta còn
có thể đưa hình ảnh chứa văn bản vào và nhận được văn bản đã được nhận dạng trong định
dạng plain text, cho phép thực hiện các thao tác xử lý văn bản khác nhau như tìm kiếm, phân
tích hoặc lưu trữ.
Tóm lại, với lý do trên, nhóm đã chọn sử dụng Pytesseract để thực hiện các nhiệm vụ nhận
diện ký tự.
4.3.2. Các bước thực hiện
Bước 1: Chuẩn bị ảnh đầu vào và các thư viện cần thiết
Import các thư viện
- cv2 : thư viện OpenCV để xử lý ảnh
- pytesseract: thư viện để nhận diện ký tự quang học
Bước 2: Xác định vùng chứa biển số xe (ROI)
Trước tiên chuyển đổi ảnh sang hệ màu xám ta sử dụng gray = cv2.cvtColor(img,
cv2.COLOR_BGR2GRAY)để giúp việc xử lý ảnh và phát hiện cạnh hiệu quả hơn đồng thời
áp dụng bộ lọc Gauss làm mờ ảnh để giảm nhiễu và cải thiện độ chính xác của việc phát hiện
cạnh: blur = cv2.GaussianBlur(gray, (5, 5), 0). Tiếp theo, ta sử dụng phương pháp Canny để
phát hiện cạnh: edges = cv2.Canny(blur, 100, 200)
Bước 3: Nhận diện văn bản trong ROI
Để nhận diện văn bản trong vùng ảnh ROI ta sẽ sử dụng hàm image_to_string của thư viện
pytesseract với config='--psm 11' đây là ham số cấu hình cho pytesseract. Trong trường hợp
này, --psm 11 cho biết hệ thống sẽ sử dụng chế độ Single Line Mode, phù hợp để nhận diện
văn bản trên một dòng như biển số xe. Sau đó dùng print("Biển số xe được nhận dạng:", text)
để in ra biển số xe được nhận diện
Bước 4: Hiển thị kết quả
- Vẽ hình chữ nhật quanh biển số xe ncv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 3)
trong đó cv2.rectangle sẽ vẽ hình chữ nhật lên img; (x, y), (x+w, y+h) lần lượt xác định vị trí
điểm bắt đầu và kết thúc của hình chữ nhật; , (0, 255, 0) là màu sắc được biểu diễn bởi 3 giá trị

22
tương ứng với kênh B (màu xanh dương), G (màu xanh lá cây) và R (màu đỏ). Trong trường
hợp này, (0, 255, 0) cho biết màu xanh lá cây; 3 là độ dày của đường viền được tính bằng
pixel. Như vậy, hàm cv2.rectangle sẽ vẽ một hình chữ nhật bao quanh biển số xe trên ảnh img
với màu xanh lá cây và độ dày 3 pixel.
- Cuối cùng, ta sử dụng hàm imshow của thư viện cv2 để hiển thị ảnh và chờ người dùng
nhấn phím bất kỳ để thoát chương trình bằng hàm cv2.waitKey
5. KẾT QUẢ THỰC HIỆN
Các hình ảnh biển số xe được sử dụng trong suốt dự án được thu thập từ nhiều nguồn khác
nhau và gồm cả quá trình thu thập thực tế từ các thành viên trong nhóm nghiên cứu.
Sau khi quá trình thu thập mẫu thử hoàn thành tiếp đến nhóm nghiên cứu tiến hành xây dựng
chương trình nhận diện trên nền tảng Visual Studio Code (2024) bằng ngôn ngữ Python 3.10
bao gồm các thư viện điển hình như Numy, Cv, Math.
5.1. Công cụ và đo lường
Dựa vào số mẫu thử và tỉ lệ nhận diện sau khi thực hiện chương trình cùng với sự tham khảo
từ các nghiên cứu trước đó nhóm nghiên cứu đưa ra công thức đo lường tỉ lệ tìm thấy và
nhận diện biển số xe như sau
Số biển tìm thấy
Tỉ lệ tìm thấy biển số xe =100× (%)
Số mẫu
Số biểnsai
Tỉ lệ nhận diện biển số xe =100 × (%)
Số biểntìm thấy
Lưu ý tỉ lệ nhận diện biển số xe ở đây chính là tỉ lệ biển sai n kí tự trên tổng số biển bắt được
trong ảnh, sai ở đây nghĩa là kí tự bị nhận diện sai, không khoanh được vùng hoặc khoanh
vùng ký tự sai vị trí.
Dù nhận diện được biển số xe và xử lý hình ảnh đầy đủ nhưng vẫn xảy ra lỗi ở một vài ký tự
hoặc không thể nhận diện được, do đó nhóm nghiên cứu tiến hành xây dựng thêm thang đo tỉ
lệ nhận diện sai ký tự ở biển 1 hàng và 2 hàng
5.2. Kết quả và giải thích

23
Loại biển Tổng biển số Số biển tìm thấy Tỉ lệ tìm thấy biển số xe

Loại biển 1 hàng 21 17 82.95%

Loại biển 2 hàng 29 10 34.48%

Bảng 5.1: Kết quả thử nghiệm trên hai loại biển số xe
Dù nhận diện được biển số xe và xử lý hình ảnh đầy đủ nhưng vẫn xảy ra lỗi ở một vài ký tự
hoặc không thể nhận diện được, do đó nhóm nghiên cứu tiến hành xây dựng thêm thang đo tỉ
lệ nhận diện sai ký tự ở biển 1 hàng và 2 hàng

Loại biển Số biển tìm Sai 1 ký tự Sai 2 ký tự Sai 3 ký tự Không sai


thấy đảo lên

Biển 1 hàng 17 6 4 2 6

Tỉ lệ phần trăm (%) 35.29% 23.52% 11.76% 35.29%

Bảng 5.2: Kết quả thử nghiệm trên biển 1 hàng


Loại biển Số biển tìm Sai 1 ký tự Sai 2 ký tự Sai 3 ký tự Không sai
thấy đảo lên
Biển 2 hàng 29 10 6 8 5
Tỉ lệ phần trăm (%) 34.48% 20.68% 27.58% 17.24%

Bảng 5.3: Kết quả thử nghiệm trên biển 2 hàng


Dựa vào kết quả đo lường tỉ lệ phần trăm của 2 loại biển, ta có thể nhận thấy:
-Mức độ nhận diện biển số xe 1 hàng cao hơn so với biển số xe 2 hàng:
○ Biển số xe 1 hàng có tỷ lệ nhận diện thành công 82,95%, trong khi biển số xe 2
hàng chỉ đạt 34,48%.
-Có một số trường hợp nhận diện sai ký tự:
○ Biển số xe 1 hàng có tỷ lệ sai 1 ký tự là 35,29%, sai 2 ký tự là 23,52% và sai 3
ký tự là 11,76%.
○ Biển số xe 2 hàng có tỷ lệ sai 1 ký tự là 34,48%, sai 2 ký tự là 27,58% và sai 3
ký tự là 17,24%

Dựa trên kết quả phân tích trên nhóm nghiên cứu đưa ra được nguyên nhân tại sao biển số xe 1
hàng có tỉ lệ phần trăm nhận diện cao hơn so với biển số xe 1 hàng gồm những yếu tố sau:

24
-Độ phức tạp: biển số xe 1 hàng có cấu trúc đơn giản hơn, với số lượng ký tự ít hơn và được
sắp xếp liền kề nhau. Điều này giúp cho việc xác định các ký tự và phân loại chúng dễ dàng
hơn.
-Kích thước: biển số xe 1 hàng thường có kích thước lớn hơn so với biển số xe 2 hàng, dẫn
đến việc thu thập được nhiều thông tin hơn và cải thiện độ chính xác trong quá trình nhận
diện.
-Vị trí: biển số xe 1 hàng thường được gắn ở vị trí cao hơn và dễ nhìn hơn so với biển số xe 2
hàng, giúp camera dễ dàng thu thập hình ảnh rõ ràng.
-Khoảng cách giữa các ký tự: Biển số xe 1 hàng có khoảng cách giữa các ký tự rộng hơn, giúp
cho việc phân biệt các ký tự riêng lẻ dễ dàng hơn.
-Độ nghiêng: biển số xe 1 hàng thường được gắn phẳng hơn so với biển số xe 2 hàng, giúp
giảm thiểu sự biến dạng hình ảnh và cải thiện độ chính xác trong quá trình nhận diện.

Hình 5.1: Kết quả nhận diện biển số xe 1 hàng

25
Hình 5.2: Kết quả nhận diện biển số xe 2 hàng

CHƯƠNG III: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN


1. ƯU ĐIỂM VÀ KHUYẾT ĐIỂM
Từ kết quả nhận diện biển số xe và cấu trúc chương trình được xây dựng, nhóm nghiên cứu rút
ra những ưu điểm và khuyết điểm sau đây:
1.1. Ưu điểm:
-Đơn giản và dễ hiểu: Code được viết đơn giản, dễ hiểu, phù hợp cho người mới bắt
đầu học về nhận diện biển số xe.
-Hiệu quả: Sử dụng các kỹ thuật xử lý ảnh cơ bản như chuyển đổi ảnh sang ảnh xám,
làm mờ ảnh, phát hiện cạnh và tìm contour để xác định vị trí biển số xe.
-Chính xác: Sử dụng thư viện pytesseract để nhận diện ký tự trên biển số xe với độ
chính xác cao.
-Linh hoạt: Có thể dễ dàng chỉnh sửa và điều chỉnh code để phù hợp với các yêu cầu
cụ thể của dự án.
1.2. Khuyết điểm:
-Hiệu suất: Chương trình có thể chạy chậm trên các thiết bị có cấu hình thấp.
-Độ chính xác: Độ chính xác của chương trình phụ thuộc vào chất lượng ảnh đầu vào,
vị trí biển số xe trong ảnh và khả năng nhận diện ký tự của thư viện pytesseract.

26
-Khả năng mở rộng: Khó khăn trong việc mở rộng chương trình để nhận diện biển số
xe trong các trường hợp phức tạp như biển số xe bị che khuất, biển số xe bị mờ, biển
số xe có phông nền phức tạp.
-Chương trình chưa thể quét chính xác đối với loại biển 2 hàng và còn sai ở nhiều ký
tự
-Đường dẫn đến địa chỉ ảnh còn hạn chế do sử dụng từ tệp có sẵn
2. HƯỚNG PHÁT TRIỂN
Thay đổi thuật toán nhận diện:
-Sử dụng các thuật toán tiên tiến hơn:
○ CNN (Convolutional Neural Network): Hiệu quả cao trong nhận diện ảnh, đặc
biệt là biển số xe.
○ SVM (Support Vector Machine): Phân loại tốt giữa biển số xe và các đối tượng
khác.
○ YOLO (You Only Look Once): Nhận diện biển số xe nhanh chóng và chính
xác.
○ YOLOv3: Phiên bản nâng cấp của YOLO với độ chính xác cao hơn.
-Sử dụng các thư viện sẵn có:
○ OpenCV: Thư viện mã nguồn mở cung cấp nhiều chức năng xử lý ảnh và nhận
diện.
○ TensorFlow: Thư viện học máy phổ biến hỗ trợ phát triển các mô hình nhận
diện biển số xe.
○ PyTorch: Khung học máy linh hoạt cho phép phát triển các mô hình tùy chỉnh.

Nâng cấp phần cứng:

-Sử dụng camera chuyên dụng:


○ Chống chịu tốt với điều kiện môi trường khắc nghiệt (sương mù, đêm tối, chói
sáng).
○ Có độ phân giải cao để thu thập hình ảnh rõ nét.
-Tăng cường sức mạnh xử lý:
○ Sử dụng các vi xử lý chuyên dụng cho AI (Artificial Intelligence) để tăng tốc
độ xử lý.
○ Sử dụng card đồ họa (GPU) để tăng hiệu quả xử lý ảnh.

Cải thiện thuật toán xử lý ảnh:

27
-Xác định vị trí biển số:
○ Phương pháp biến đổi Hough: Nhận diện đường thẳng để xác định vị trí biển
số.
○ Xác định bằng màu sắc: Phân biệt biển số với các đối tượng khác dựa trên màu
sắc.
○ Thuật toán theo dõi: Hạn chế sự di ảnh khi xe đang di chuyển.
-Cải thiện chất lượng ảnh:
○ Kỹ thuật khử nhiễu: Loại bỏ nhiễu ảnh do môi trường và điều kiện ánh sáng.
○ Kỹ thuật tăng cường độ tương phản: Làm rõ biển số trong điều kiện thiếu sáng.
○ Kỹ thuật cân bằng màu sắc: Đảm bảo màu sắc biển số chính xác.

LỜI CẢM ƠN
Để hoàn thành được đồ án này, em xin chân thành cảm ơn thầy Ngô Hiếu Trường đã tận tình
giúp đỡ, tạo điều kiện cho em trong quá trình học tập và hướng dẫn em thực hiện đồ án này
bằng tất cả lòng nhiệt tình và sự quan tâm sâu sắc. Trong quá trình thực hiện đồ án này, do
hiểu biết còn nhiều hạn chế nên mặc dù đã có những đầu tư nhất định trong quá trình làm đồ

28
án song cũng khó tránh khỏi bài làm còn những thiếu sót. Chúng em rất mong nhận được
những lờii góp ý của quý thầy cô để đồ án ngày càng hoàn thiện hơn.
Chúng em xin chân thành cảm ơn !

[1] WIKIPEDIA. [Online]. Available: https://vi.wikipedia.org/wiki/Bi%E1%BB%83n_xe_c%C6%A1_gi


%E1%BB%9Bi_Vi%E1%BB%87t_Nam.

[2] VINBIGDATA. [Trực tuyến]. Available: https://vinbigdata.com/kham-pha/xu-ly-du-lieu-anh-mot-so-kien-


thuc-can-ban.html.

[3] TEKY. [Online]. Available: https://teky.edu.vn/blog/opencv-la-gi/.

[4] Đ. h. Đ. Lực, "Nhận diện biển số xe Việt Nam," 09/2023.

[5] Amazon, "AWS AMAZON," [Online]. Available: https://aws.amazon.com/vi/what-is/ocr/.

TÀI LIỆU THAM KHẢO


Nhận diện biển số xe bằng OpenCV và Python: Phát hiện biển số trong ảnh bằng OpenCV thuần - Mì AI

Biển số xe các tỉnh tại Việt Nam cập nhật mới nhất | dienlanhmiennam.

Biển số xe Việt Nam- wikipedia

Thông tư 24/2023/TT-BCA cấp thu hồi đăng ký biển số xe cơ giới mới nhất

29
Xử lý dữ liệu ảnh: Một số kiến thức căn bản - vinbigdata

Xử lý dữ liệu ảnh: Tất tần tật những điều bạn cần biết - MPBPO.

OpenCV là gì? Cách sử dụng OpenCV như thế nào

OpenCV With Python Part 1

OCR là gì?- Giải thích về Nhận dạng ký tự quang học

pytesseract: Tesseract Open Source OCR Engine (main repository)

OpenCV:OpenCV

-A Survey of License Plate Recognition Methods and


Application:https://www.researchgate.net/publication/348052755_Automated_License_Plate_Recognition_A_Su
rvey_on_Methods_and_Techniques

-Deep Learning-Based Methods for Automatic License Plate Recognition: A


Survey :https://link.springer.com/chapter/10.1007/978-981-99-7954-7_46“

- “Computer Vision: Algorithms and Applications “ by Richard Szeliski

-“ Deep Learning for Computer Vision ” by Andrej Karpathy

30

You might also like