Tổng quan các bước thực hiện: - Bao gồm 4 bước như trên để phát hiện biển số: Định vị biển số Bước 1: hay còn gọi là phát hiện biển số: tìm khung chữ nhật gồm x, y, width, height bao lấy
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ GTVT KHOA CÔNG NGHỆ THÔNG TIN
Báo cáo môn học: Trí tuệ nhân tạo
Đề tài: Ứng dụng kỹ thuật học máy trong nhận dạng biển số xe
Giảng viên hướng dẫn : Th.S Đoàn Thị Thanh Hằng
Nhóm 9 - Lớp: 70DCTT23
Hà Nội, tháng 12 năm 2021
Trang 2TRƯỜNG ĐẠI HỌC CÔNG NGHỆ GTVT
KHOA CÔNG NGHỆ THÔNG TIN
Báo cáo môn học: Trí tuệ nhân tạo
Đề tài: Ứng dụng kỹ thuật học máy trong nhận dạng biển số xe Giảng viên hướng dẫn : Th.S Đoàn Thị Thanh Hằng
Nhóm 9 - Lớp: 70DCTT23 Thành viên
Đỗ Trung Nghĩa Nguyễn Ngọc Ánh
Hà Thị Ngọc Lan Phùng Quang Nhật
Lê Văn Thao
Hà Nội, tháng 12 năm 2021
Trang 3MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU 3
1.1 Đặt vấn đề: 4
1.2 Bố cục đề tài: 4
CHƯƠNG 2: TỔNG QUAN VỀ BÀI TOÁN NHẬN DẠNG BIỂN SỐ XE 5
2.1.Trạng thái bài toán: 5
2.2 Tổng quan các bước thực hiện: 5
CHƯƠNG 3: QUY TRÌNH NHẬN DẠNG BIỂN SỐ XE 7
3.1 Tách biển số xe: 7
3.1.1 Tổng quan về tách biển số: 7
3.1.2 Tìm vùng màu trắng: 8
3.1.3 Xác định vùng chứa biển số: 9
3.1.4 Khử nhiễu: 10
3.1.5 Chỉnh mức xám: 10
3.1.6 Cắt vùng chứa biển số: 11
3.1.7 Cắt biển số chính xác: 12
3.2 Định vị ký tự: 12
3.2.1 Tổng quan về định vị kí tự: 12
3.2.2 Nhị phân biển số xe: 13
3.2.3 Chuẩn hóa biển số xe: 14
3.2.4 Phân đoạn ký tự 15
3.3.Nhận dạng ký tự(SVM) 18
3.1 SVM hoạt động như thế nào 18
3.2 Margin trong SVM 19
3.3 Ứng dụng 20
Trang 4CHƯƠNG 1: GIỚI THIỆU 1.1 Đặt vấn đề:
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 ra 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
1.2 Bố cục đề tài:
Chương 2 bao gồm trạng thái bài toán và các bước thực hiện nhận diện biển số xe Chương 3 bao gồm các quy trình nhận dạng biển số xe Phần cuối là kết luận và tài liệu tham khảo
Trang 5CHƯƠNG 2: TỔNG QUAN VỀ BÀI TOÁN NHẬN DẠNG BIỂN SỐ XE 2.1.Trạng thái bài toán:
Hình 2.1: Sơ đồ tổng quát
2.2 Tổng quan các bước thực hiện:
- Bao gồm 4 bước như trên để phát hiện biển số:
Định vị biển số
Bước 1: hay còn gọi là phát hiện biển số: tìm khung chữ nhật gồm (x, y, width, height) bao lấy biển số trong ảnh Nếu tìm thấy thì cắt biển số ra để xử lý bước tiếp theo, kết quả của bước này là ảnh biển số đã cắt
Trang 6Hình 2.2: Mẫu tách biển số Bước 2: Định vị ký tự hay còn gọi là tìm vị trí của ký tự trên biển số đã cắt Kết quả của bước này là các ký tự màu đen, sau đó resize tất cả về cùng 1 kích thước Bước này dùng thuật toán
Hình 2.3: Mẫu tách kí tự Bước 3: Nhận dạng ký tự bằng thuật toán Machine Learning, trong trường hợp này
là SVM để phân lớp các ký tự
Hình 2.4: Mẫu nhận diện kí tự
Cuối cùng là dùng SVM để nhận dạng ký tự
Bước 4: Sắp xếp các kết quả nhận dạng và hiển thị ký tự theo định dạng biển số xe máy
Trang 7CHƯƠNG 3: QUY TRÌNH NHẬN DẠNG BIỂN SỐ XE 3.1 Tách biển số xe:
3.1.1 Tổng quan về tách biển số:
Bước 1: Định nghĩa vài thông số cho bài toán như: Kích thước biển số lớn nhất và kích thước biển số nhỏ nhất Tùy bài toán mà định nghĩa Ví dụ bài toán trông xe vào bãi thì camera để gần, kích thước biển số to hơn nhưng nếu bài toán nhận diện xe đi qua cửa bằng camera trên cao chẳng hạn thì kích thước biển số sẽ nhỏ hơn
Bước 2: Load ảnh và thực hiện resize(thay đổi) về kích thước mong muốn
Bước 3: Chuyển về đen trắng và thực hiện thuật toán tìm cạnh
Bước 4 Tìm các viền có trong hình.:
Bước 5: Với các viền tìm được ở bước 4, lặp qua 1 lượt và chọn viền lớn nhất hội đủ các điều kiện:
Có 4 cạnh (sau khi đã approx): vì biển số là đối tượng có 4 cạnh
Có kích thước nằm trong vùng kích thước đã định nghĩa ở bước 1
Contour đó sẽ là biển số chúng ta cần tìm
Bước 6: Tiến hành tìm các điểm góc của viền nói trên và trích hình ảnh biển số ra khỏi hình ảnh của xe
Hình 3.1: Sơ đồ tổng quát xác định vùng chứa biển số xe
Trang 8Hình 3.2: Sơ đồ chi tiết của khối tách biển số
3.1.2 Tìm vùng màu trắng:
- Vì biển số màu trắng nên người thực hiện sẽ nhị phân hóa ảnh bằng cách gắn giá trị cho các pixel trắng là 1, còn ngược lại là 0
Đầu tiên, chúng ta sẽ biến đổi ảnh gốc thành ảnh xám (có mức sáng từ 0 đến 255), sau đó nhị phân hóa với một ngưỡng thích hợp
Nếu ảnh được chụp vào ban đêm hay ban ngày nhưng ít ánh sáng thì mức ngưỡng sẽ là 120 Còn ban ngày, nhiều ánh sáng là 190
- Vấn đề ở đây là làm sao chúng ta nhận biết được đó là ảnh sáng hay ảnh tối? Người thực hiện đã dựa vào lược đồ mức xám ( histogram – tần số xuất hiện của mức xám) của ảnh Nếu tần số xuất hiện các pixel có giá trị <64 thì đó là ảnh tối, ngược lại là ảnh sáng
- Ví dụ cho 2 ảnh gốc có biển số như nhau:
Trang 9Hình 3.3: Ảnh sáng tối.
Ảnh sau khi nhị phân hóa sẽ như sau:
Hình 3.4: Ảnh sau khi nhị phân
3.1.3 Xác định vùng chứa biển số:
- Ảnh nhận được sau khi nhị phân hóa sẽ có nhiều vùng màu trắng, và biển số sẽ nằm trong vùng màu trắng thỏa điều kiện:
0.75 < chiều cao / chiều ngang < 0.91
16000 ≤ S_pixel_trắng ≤ 61000
≤ S_pixel_trắng / S_biển số ≤ 0.7
- Với:
Chiều cao là H { H = start(i).Boundingbox(4) }
Chiều ngang là W { W = start(i).Boundingbox(3) }
Diện tích vùng trắng là S_pixel_trắng { S_pixel_trắng = start(i).Area }
Diện tích biển số là S_biển số { S_biển số = W × H }
- Tỉ số 2 kích thước của biển số là 0.75 nhưng khi bị nghiêng thì là 0.91
Trang 10Hình 3.5: Hình dạng biển số khi bị nghiêng
- Sau điều kiện thứ nhất, sẽ có những vùng trắng không chứa biển số nhưng có tỉ số giữa chiều cao và chiều ngang phù hợp thì vẫn được chọn Ta sẽ loại bỏ những vùng này bằng điều kiện thứ hai – diện tích vùng trắng Vì khoảng cách từ webcam tới xe cố định (ta lấy trước khoảng cách chụp ) nên số lượng pixel trắng chứa trong biển số cố định
- Đối với điều kiện thứ ba, nếu biển số nằm ngay ngắn thì tỉ số là 0.7 còn nếu biển
số bị nghiêng, sẽ xuất hiện pixel đen nên tỉ số này giảm còn 0.38
Hình 3.6: Biển số sau khi nhị phân
3.1.4 Khử nhiễu:
Có 2 loại nhiễu cơ bản trong quá trình thu nhận ảnh:
Nhiễu hệ thống: là nhiễu có quy luật có thể thử bằng các phép biến đổi
Nhiễu ngẫu nhiên: vết bẩn không rõ nguyên nhân -> khắc phục bằng các phép lọc
3.1.5 Chỉnh mức xám:
Trang 11- Nhằm khắc phục tính không đồng đều của hệ thống gây ra Thông thường có hai hướng tiếp cận:
Giảm số mức xám: Thực hiện bằng cách nhóm các mức xám gần nhau thành một bó trường hợp chỉ có 2 mức xám thì chính là chuyển về ảnh đen trắng
Tăng số mức xám: Thực hiện nội suy ra các mức xám trung gian bằng kỹ thuật nội suy Kỹ thuật này nhằm tăng cường độ mịn cho ảnh
3.1.6 Cắt vùng chứa biển số:
- Sau khi xác định được vùng nào chứa biển số, ta tiến hành cắt biển số trên ảnh màu RBG Do sự tương đồng của ảnh nhị phân và ảnh màu RBG nên toạ độ một pixel trên ảnh nhị phân tương ứng tọa độ trên ảnh màu RBG Do đó khi xác định được tọa độ trên ảnh nhị phân, ta dùng tọa độ này để cắt trên ảnh màu RBG
- Khi ta cắt biển số ra khỏi ảnh mà biển số bị nghiêng thì ta tiến hành cắt theo hình chữ nhật lớn hơn hình chữ nhật lớn thực sự một lượng biên an toàn để tránh việc mất thông tin biển số
Hình 3.7: Hình thể hiện vùng ảnh cần tách ra với biên an toàn
- Trong chương trình, người thực hiện chọn vùng biên an toàn là 30 pixel Trong bước này, ta không cắt biển số ra khỏi ảnh ngay mà chỉ cắt vùng chứa biển số Việc cắt này có thể xem như là cắt thô
Trang 12Hình 3.8: Ảnh chụp ban đầu
Hình 3.9: Ảnh sau khi cắt thô
3.1.7 Cắt biển số chính xác:
- Sau khi xoay biển số về phương thẳng đứng ta thực hiện việc cắt biển số Đây là một việc rất quan trọng, kết quả của nó quyết định tới kết quả của hệ thống nhận dạng biển số
- Ta thực hiện lại việc chọn vùng biển số nhưng với biên là 0 pixel và 3 điều kiện chính xác hơn:
1600 < diện tích vùng trắng < 6100
0.73 < width/height < 0.77
0.6 < số pixel trắng / số pixel đen < 0.7
Hình 3.10: Biển số sau khi cắt hoàn chỉnh
- Sau khi cắt được biển số ta tiến hành phân đoạn ký tự
3.2 Định vị ký tự:
3.2.1 Tổng quan về định vị kí tự:
Kết quả của khối tách biển số là một ảnh màu RGB có chứa biển số xe Để nhận dạng các ký tự trong biến số, ta tiến hành phân đoạn ký tự trong biến số Phân đoạn ký tự
là việc cắt các ký tự trong biển số xe
Trang 13Sau khi nhận kết quả của khối tách biển số, khối phân đoạn ký tự bắt đầu tiến hành tách từng ký tự trong biến số Trước khi phân đoạn ký tự, ảnh của biến số được chuyển thành ảnh nhị phân Ảnh nhị phân được chuẩn hóa về kích chuẩn, sau đó tiến hành cắt các ký tự Kết quả của quá trình phân đoạn là một ma trận chứa các ảnh đen trắng của ký tự
Hình 3.11: Sơ đồ khối phân đoạn ký tự
3.2.2 Nhị phân biển số xe:
- Đây là bước quan trọng để nhận dạng biển số xe Bước này sẽ tìm mức ngưỡng tối
ưu, sau đó tiến hành nhị phân hóa ảnh với ngưỡng vừa tìm được ( nhằm làm tăng độ tương phản của ký tự với nền biển số)
- Vì đôi khi biển số xe được chụp có độ sáng không đồng nhất mà có thể chuyển dần
từ sáng sang tối hoặc ngược lại Đây là lý do chính mà tách ngưỡng toàn phần (global thresholding) bị lỗi Chính vì lý do này mà em đã chọn tách ngưỡng thích ứng (adaptive thresholding) để nhị phân hóa ảnh đầu vào Tách ngưỡng thích ứng tốt hơn tách ngưỡng toàn phần trong đa số trường hợp nhưng lại làm cho chương trình chậm hơn do có tính ngưỡng cục bộ cho từng pixel
- Nếu ảnh lớn, độ phân giải cao thì đây là một vấn đề Tuy nhiên biển số xe có kích thước khá nhỏ nên tốc độ chương trình sẽ không bị ảnh hưởng mấy
Trang 14Hình 3.12: Ảnh qua quá trình nhị phân hóa
3.2.3 Chuẩn hóa biển số xe:
Biển số xe được chuẩn hóa sau đó được lấy bù
Hình 3.13: Hình sau khi chuẩn hóa
Trang 15Hình 3.14: Thuật toán giải chuẩn hóa biển số
3.2.4 Phân đoạn ký tự
Ma trận nhị phân của biến số chính là ngõ vào chương trình phân vùng ký tự Trước khi phân vùng ký tự, ta chia ma trận ảnh biển số thành từng hàng và lần lượt đưa từng hàng vào chương trình phân vùng Tuy nhiên ở đây, ta chỉ tiến hành nhận dạng ký tự của hàng 2 nên ta chỉ ngõ của chương trình phân vùng ký tự là ma trận của hàng 2
Để phân chia thành nhiều ma trận ký tự từ ma trận biến số, ta dựa vào tổng số pixel mức 1 ( mức 1 là màu trắng - màu của ký tự, mức 0 là màu đen - màu nền ) Với ma trận của hàng 2 sau khi đã chia đôi, giữa 2 ký tự có rất ít pixel có mức 1 ( trong trường hợp lý tưởng, thì sẽ là mức 0 ) Như vậy khi cộng giá trị các pixel theo từng cột, như hình
ta thấy giá trị tại các vùng giữa 2 ký tự thấp ( đây cũng à tổng số pixel mức 1 ) Từ đó, giải thuật phân vùng sẽ những vùng này vào giá trị của nó nhỏ hơn những vùng lân cận
và sẽ phân chia theo từng vùng Ở đây, ta sẽ tìm 4 phân vùng với 4 ký tự
Hình 3.15: Tổng số các bit theo 1 hàng của biển số Chương trình có lựa chọn 2 thông số: Min_area và digit_width
Min_area là diện tích cho phép nhỏ nhất của 1 ký tự, là tích của giá trị cột lớn nhất với độ rộng của phân vùng đó
Trang 16Hình 3.16: Hình thể hiện thông số Min_area
Digit_width là độ rộng tối đa cho phép của 1 phân vùng ký tự
Hình 3.17: Hình thể hiện thông số Digit_width
Sau khi phân vùng được các ký tự ta tiến hành cắt các ký tự ra khỏi biến số
Trang 17Hình 3.18: Các ký tự được cắt khỏi biển số
Dưới đây là sơ đồ giải thuật phân vùng 9 ký tự trên biển số xe:
Hình 3.19: Giải thuật phân vùng ký tự
3.2.4.1 Chương trình chia đôi biển số
Đây là chương trình đơn giản, biến số sau khi được chuẩn hóa về kích thước [50 150] thì kích thước từng hàng sau khi chia đôi là [25 150]
3.2.4.2 Chương trình phân vùng từng ký tự
Trang 18- Chương trình con này thực hiện việc tìm vùng ranh giữa 2 ký tự, tương ứng giữa
2 vùng ranh giới liên tiếp sẽ là vùng ký tự, chương trình sẽ trả về vị trí của vùng ký tự Tuy nhiên, chương trình cũng có thể trả về vùng ký tự lớn hơn 9 do ảnh hưởng của môi trường Trường hợp này ta vẫn có thể tối ưu chương trình để tăng độ chính xác
- Với kết quả trả về nhỏ hơn 9, ta sẽ xóa xá pixel tại các vùng ranh giới ( gần các giá trị bằng 0 ) Điều này làm cho việc thực hiện chương trình chính xác hơn
- Với kết quả trả về lớn hơn 9 ( nghĩa là có 1 hay nhiều vùng không chứa ký tự ), ta
sẽ lấy 9 vùng có diện tích lớn nhất ( thông thường vùng không có ký tự nhỏ hơn các vùng
có ký tự)
3.3.Nhận dạng ký tự(SVM)
3.1 SVM hoạt động như thế nào
- Ý tưởng của SVM là tìm một siêu phẳng (hyper lane) để phân tách các điểm dữ liệu Siêu phẳng này sẽ chia không gian thành các miền khác nhau và mỗi miền sẽ chứa một loại dữ liệu
Quy tắc 1: để chọn 1 hyper-lane, chọn một hyper-plane để phân chia hai lớp tốt nhất Trong ví dụ này chính là đường B
đến đường hyper-plane Trong hình dưới đây là đường C
Trang 19 SVM có khả năng mạnh trong việc chấp nhận ngoại lệ
3.2 Margin trong SVM
Trang 20Margin là khoảng cách giữa siêu phẳng đến 2 điểm dữ liệu gần nhất tương ứng với các phân lớp Trong ví dụ quả táo quả lê đặt trên mặt bàn, margin chính là khoảng cách giữa cây que và hai quả táo và lê gần nó nhất Điều quan trọng ở đây đó là phương pháp SVM luôn cố gắng cực đại hóa margin này, từ đó thu được một siêu phẳng tạo khoảng cách xa nhất so với 2 quả táo và lê Nhờ vậy, SVM có thể giảm thiểu việc phân lớp sai (misclassification) đối với điểm dữ liệu mới đưa vào
3.3 Ứng dụng
- Thuật toán: với mỗi ảnh 2D chuyển thành ảnh 1D Sau đó ghép các ảnh 1D thành ảnh 2D dùng để huấn luyện
- Ảnh ký tự 2D và chuyển sang 1D