Professional Documents
Culture Documents
HCM
Tên MSSV
NGUYỄN NGỌC YẾN 31231026864
NHI
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
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.
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.
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:
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 đó.
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.
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
12
Hình 3.6: Lọc ngưỡng
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
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.
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].
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
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ự.
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
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
Biển 1 hàng 17 6 4 2 6
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.
25
Hình 5.2: Kết quả nhận diện biển số xe 2 hàng
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.
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 !
Biển số xe các tỉnh tại Việt Nam cập nhật mới nhất | dienlanhmiennam.
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:OpenCV
30