- Chương 2: SỬ DỤNG MƠ HÌNH SVM ĐỂ NHẬN DẠNG BIỂN SỐ XE Nội dung của chương bao gồm giới thiệu về mô hình SVM ,tổng quancác bước thực hiện, quy trình nhận dạng biển số xe- Chương 3: MỘT
TỔNG QUAN VỀ BÀI TOÁN NHẬN DẠNG BIỂN SỐ XE
Tổng quan về nhận dạng
1.1.1 Khái quát về xử lý ảnh
Xử lý ảnh là một trong những mảng quan trọng nhất trong kỹ thuật thị giác máy tính, là tiền đề cho nhiều nghiên cứu thuộc lĩnh vực này Hai nhiệm vụ cơ bản của quá trình xử lý ảnh là nâng cao chất lượng thông tin hình ảnh và xử lý số liệu cung cấp cho các quá trình khác trong đó có việc ứng dụng thị giác vào điều khiển.
Quá trình bắt đầu từ việc thu nhận ảnh nguồn (từ các thiết bị thu nhận ảnh dạng số hoặc tương tự) gửi đến máy tính Dữ liệu ảnh được lưu trữ ở định dạng phù hợp với quá trình xử lý Người lập trình sẽ tác động các thuật toán tương ứng lên dữ liệu ảnh nhằm thay đổi cấu trúc ảnh phù hợp với các ứng dụng khác nhau.
1.1.2 Khái quát về nhận dạng biển số xe Ứng dụng nhận dạng biển số xe là ứng dụng có khả năng phân tích hình ảnh và xác định biển số xe từ các hình ảnh chụp được từ các thiết bị thu hình.
Nguồn hình ảnh cho ứng dụng có rất nhiều Hình ảnh được trực tiếp thu nhận từ camera Trong báo cáo thực nghiệm này của em chỉ dừng lại ở mức xác định được biển số xe (xác định các chữ) từ ảnh.
Bài toán nhận dạng biển số xe qua ảnh
Có nhiều cách thức khác nhau để phân loại các ứng dụng nhận dạng biển số xe Có thể chia ứng dụng nhận dạng biển số xe thành hai loại: Loại 1 là ảnh thu trực tiếp từ các thiết bị ghi nhận ảnh kỹ thuật số, ảnh được ghi nhận thường chỉ giới hạn trong vùng có biển số xe Loại 2 là ảnh đầu vào thu được từ các thiết bị ghi hình tự động, không phụ thuộc vào góc độ, các đối tượng xung quanh, ảnh không cần bắt buộc chỉ chụp vùng chứa biển số xe, mà có thể ảnh tổng hợp như chứa thêm các đối tượng như người, cây, đường phố miễn là vùng biển số xe phải đủ rõ để có thể thực hiện
- Loại 1 là ảnh thu trực tiếp từ các thiết bị ghi nhận ảnh kỹ thuật số, ảnh được ghi nhận thường chỉ giới hạn trong vùng có biển số xe. o Nguyên lý hoạt động: Các phương tiện giao thông phải chạy với một tốc độ đủ chậm để máy ghi nhận hình ảnh có thể thu được ảnh vùng biển số xe. o Ứng dụng: Những ứng dụng nhận dạng biển số xe loại này thường được dụng tại các trạm kiểm soát, các trạm thu phí, các bãi gửi xe tự động, các trạm gác cổng
- Loại 2 là ảnh đầu vào thu được từ các thiết bị ghi hình tự động, không phụ thuộc vào góc độ, các đối tượng xung quanh, ảnh không cần bắt buộc chỉ chụp vùng chứa biển số xe, mà có thể ảnh tổng hợp như chứa thêm các đối tượng như người, cây, đường phố miễn là vùng biển số xe phải đủ rõ để có thể thực hiện nhận dạng được các ký tự trong vùng đó. o Nguyên lý hoạt động: Do đặc tính không giới hạn vùng nhìn mà ảnh đầu vào có thể thu được từ một thiết bị ghi hình (camara, máy ảnh…) Và do đó, công việc đầu tiên là dò tìm trong ảnh, để xác định đúng vùng nào là biển số xe Sau đó, thực hiện tách vùng và nhận dạng Cuối cùng tùy thuộc vào mục đích sử dụng mà kết quả nhận dạng được truyền đi hay lưu trữ để phục vụ nhu cầu của người dùng cuối. o Ứng dụng: Vì không phụ thuộc vào hình ảnh thu được nên có thể dùng ứng dụng tại nhiều nơi như tại những nơi điều tiết giao thông, tại các vị trí nhạy cảm của giao thông như ngã ba, ngã tư đường giao nhau Kiểm soát, phát hiện những hành vi vi phạm an toàn giao thông.
Trong quá trình tìm hiểu, xây dựng ứng dụng của mình Ứng dụng mà em hướng tới trong quá trình xây dựng là ứng dụng loại 2 Vì vậy, trong toàn bộ báo cáo này, chỉ nêu cách thức giải quyết là làm sao nhận dạng (lọc ra) được các ký tự số và chữ.
1.3.2 Mô tả chi tiết đầu vào và đầu ra bài toán Đầu vào: Ảnh thu được từ các thiết bị ghi hình tự động, không phụ thuộc vào góc độ, các đối tượng xung quanh, ảnh không cần bắt buộc chỉ chụp vùng chứa biển số xe, mà có thể ảnh tổng hợp như chứa thêm các đối tượng như người, cây, đường phố miễn là vùng biển số xe phải đủ rõ để có thể thực hiện nhận dạng được các ký tự trong vùng đó. Đầu ra: Hiển thị thông tin biển số xe bao gồm các ký tự số và chữ.
1.3.3 Các khó khăn và thách thức của bài toán
Một số khó khăn và thách thức của bài toán:
- Hình ảnh chụp không rõ chữ và số trên biển số xe ví dụ như biển số xe bị gãy, bị bám bẩn, chụp trong điều kiện thiếu sáng …
- Việc xử lý ảnh để tách biển số xe ra khỏi nền ảnh.
- Góc chụp và độ nghiêng của ảnh: Nếu ảnh chụp biển số xe ở góc nghiêng hoặc có tỉ lệ nghiêng, điều này có thể làm giảm khả năng nhận diện Mô hình cần có khả năng xử lý và tự điều chỉnh cho các biến đổi này.
1.3.4 Ứng dụng của bài toán
Bài toán nhận dạng biển số xe có nhiều ứng dụng quan trọng trong nhiều lĩnh vực khác nhau Dưới đây là một số ứng dụng phổ biến của nó:
- Giao thông và an ninh: o Giám sát giao thông: Hệ thống nhận dạng biển số xe có thể được sử dụng để giám sát giao thông, theo dõi tốc độ, đếm số lượng xe, và phát hiện vi phạm giao thông. o An ninh công cộng: Các hệ thống an ninh trong các khu vực công cộng như sân bay, ga tàu, trung tâm mua sắm có thể sử dụng nhận dạng biển số xe để theo dõi và kiểm soát phương tiện.
- Quản lý đỗ xe và Trạm thu phí: o Quản lý đỗ xe: Hệ thống có thể giúp quản lý bãi đỗ xe tự động, tự động ghi lại thời gian và vị trí xe. o Trạm thu phí tự động: Hệ thống nhận dạng biển số xe có thể được tích hợp vào các trạm thu phí tự động để thu phí mà không cần dừng lại.
- Quy hoạch đô thị: o Phân tích dữ liệu giao thông: Cung cấp thông tin quan trọng cho quy hoạch đô thị và phát triển hạ tầng giao thông.
SỬ DỤNG MÔ HÌNH SVM ĐỂ NHẬN DẠNG BIỂN SỐ XE
Tổng quan về mô hình SVM
Mô hình Support Vector Machine (SVM) là một phương pháp học có giám sát trong lĩnh vực máy học, được áp dụng chủ yếu cho các bài toán phân loại và hồi quy. SVM là một trong những thuật toán phổ biến nhất trong học máy và thường được sử dụng để giải quyết các vấn đề phân loại.
Mục tiêu chính của SVM là xây dựng một đường ranh giới (siêu phẳng) tốt nhất có thể để phân tách không gian đa chiều thành các lớp, từ đó giúp dự đoán và phân loại dữ liệu mới Siêu phẳng này được tối ưu hóa để có độ rộng lớn nhất giữa các lớp, tăng tính tổng quát và khả năng tỏ ra chống chịu với dữ liệu mới.
Trong quá trình xây dựng siêu phẳng, SVM chọn ra các điểm cực đại, còn được gọi là vectơ hỗ trợ, để hỗ trợ định rõ vị trí và hình dạng của siêu phẳng Thật vậy, SVM thường được gọi là "Máy vectơ hỗ trợ" do sự quan trọng của các vectơ hỗ trợ này trong quá trình xây dựng mô hình.
Dưới đây là mô tả cơ bản về SVM: Đối với bài toán phân loại, SVM tìm kiếm siêu phẳng tối ưu để phân tách các lớp, và đối với bài toán hồi quy, nó cố gắng xây dựng một siêu phẳng để dự đoán giá trị đầu ra dựa trên dữ liệu đầu vào.
Một điều quan trọng là SVM có khả năng xử lý cả dữ liệu không tuyến tính thông qua việc sử dụng các hàm nhân để chuyển đổi không gian dữ liệu, làm cho nó trở thành một công cụ linh hoạt và mạnh mẽ trong nhiều tình huống khác nhau.
Hình 2.2: Siêu phẳng có lề cực đại trong không gian 3 chiều
- SVM tuyến tính: SVM tuyến tính được sử dụng cho dữ liệu có thể phân tách tuyến tính, có nghĩa là nếu một tập dữ liệu có thể được phân loại thành hai lớp bằng cách sử dụng một đường thẳng, thì dữ liệu đó được gọi là dữ liệu có thể phân tách tuyến tính và bộ phân loại được sử dụng được gọi là bộ phân loại SVM tuyến tính.
- SVM phi tuyến tính: SVM phi tuyến tính được sử dụng cho dữ liệu được phân tách phi tuyến tính, có nghĩa là nếu một tập dữ liệu không thể được phân loại bằng cách sử dụng một đường thẳng, thì dữ liệu đó được gọi là dữ liệu phi tuyến tính và trình phân loại được sử dụng được gọi là phi tuyến tính bộ phân loại SVM tuyến tính.
Trong mô hình SVM có những từ khóa như:
- Siêu phẳng : Có thể có nhiều đường/ranh giới quyết định để phân tách các lớp trong không gian n chiều, nhưng chúng ta cần tìm ra ranh giới quyết định tốt nhất giúp phân loại các điểm dữ liệu Ranh giới tốt nhất này được gọi là siêu phẳng của SVM. o Kích thước của siêu phẳng phụ thuộc vào các đối tượng có trong tập dữ liệu, nghĩa là nếu có 2 đối tượng (như trong hình), thì siêu phẳng sẽ là một đường thẳng Và nếu có 3 đặc trưng thì siêu phẳng sẽ là mặt phẳng 2 chiều. o Chúng tôi luôn tạo một siêu phẳng có lề tối đa, có nghĩa là khoảng cách tối đa giữa các điểm dữ liệu.
- Vectơ hỗ trợ : Các điểm dữ liệu hoặc vectơ gần siêu phẳng nhất và ảnh hưởng đến vị trí của siêu phẳng được gọi là vectơ hỗ trợ Vì các vectơ này hỗ trợ siêu phẳng, do đó được gọi là vectơ hỗ trợ.
Hoạt động của thuật toán SVM có thể được hiểu bằng cách sử dụng một ví dụ. Giả sử chúng ta có một tập dữ liệu có hai thẻ và tập dữ liệu có hai tính năng x1 và x2
Vì là không gian 2 chiều nên chỉ cần dùng một đường thẳng là ta có thể tách hai lớp này ra dễ dàng Nhưng có thể có nhiều dòng có thể phân tách các lớp này.
Do đó, thuật toán SVM giúp tìm đường hoặc ranh giới quyết định tốt nhất; ranh giới hoặc vùng tốt nhất này được gọi là siêu phẳng Thuật toán SVM tìm điểm gần nhất của các đường từ cả hai lớp Những điểm này được gọi là vectơ hỗ trợ Khoảng cách giữa các vectơ và siêu phẳng được gọi là lề Và mục tiêu của SVM là tối đa hóa mức ký quỹ này Siêu phẳng có lề lớn nhất được gọi là siêu phẳng tối ưu.
Nếu dữ liệu được sắp xếp tuyến tính, thì chúng ta có thể tách nó ra bằng cách sử dụng một đường thẳng, nhưng đối với dữ liệu phi tuyến tính, chúng ta không thể vẽ một đường thẳng duy nhất.
Vì vậy, để giải quyết vấn đề này, có hai giải pháp:
Thuật toán này cho phép SVM mắc một số lỗi nhất định và giữ cho lề càng rộng càng tốt để các điểm khác vẫn có thể được phân loại chính xác Nói một cách khác, nó cân bằng giữa việc phân loại sai và tối đa hóa lề.
Có hai kiểu phân loại sai có thể xảy ra:
- Dữ liệu nằm ở đúng bên nhưng phạm vào lề
- Dữ liệu nằm ở sai bên
Mức độ chấp nhận lỗi
Mức độ chấp nhận lỗi là một siêu tham số quan trọng trong SVM Khi lập trình với sklearn, mức độ chấp nhận lỗi được coi như một tham số phạt (C) Hình dưới thể hiện SVM với các giá trị C khác nhau.
Tổng quan về các bước thực hiện
Hình 2.6: Sơ đồ tổng quát
Bao gồm 4 bước để phát hiện biển số:
- Bước 1: Định vị biển số 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
Hình 2.7: 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.8: 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ự Sau đó dùng SVM để nhận dạng ký tự.
Hình 2.9: Mẫu nhận diện 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.
Quy trình nhận dạng biển số xe
2.3.1 Tách biển số xe Đây là quy trình định vị và lọc biển số xe từ ảnh đưa vào
Bước 1: Lọc ảnh để loại bỏ nhiễu bằng cách sử dụng hàm cv2.cvtColor() để chuyển đổi ảnh từ màu sang xám, sau đó sử dụng hàm cv2.GaussianBlur() để làm mờ ảnh Việc làm mờ ảnh giúp loại bỏ nhiễu, giúp cho các vùng có độ tương phản cao hơn dễ dàng nhận diện hơn.
Bước 2: Tìm kiếm các vùng có độ tương phản cao trong ảnh bằng sử dụng hàm cv2.Canny() để tìm kiếm các vùng có độ tương phản cao trong ảnh Hàm này sử dụng hai ngưỡng, ngưỡng thấp và ngưỡng cao Các vùng có độ tương phản cao hơn ngưỡng cao sẽ được xác định là các vùng có thể là biển số xe.
Bước 3: Tìm kiếm các vùng có hình dạng giống biển số xe bằng cách sử dụng hàm cv2.findContours() để tìm kiếm các vùng có hình dạng giống biển số xe. Hàm này trả về một danh sách các vùng, trong đó mỗi vùng là một tập hợp các điểm.
Bước 4: Loại bỏ các vùng không phải biển số xe bằng cách sử dụng một số tiêu chí để loại bỏ các vùng không phải biển số xe Trong ví dụ này, tiêu chí được sử dụng là diện tích của vùng Các vùng có diện tích lớn hơn một giá trị nhất định sẽ được giữ lại.
2.3.2 Định vị ký tự Đây là quy trình định vị và tách từng ký tự ra từ biển số xe được lọc từ ảnh ở bước trên
Bước 1 : Chuyển đổi ảnh sang ảnh xám, Bước này giúp giảm thiểu nhiễu và tăng cường ký tự Ảnh màu thường chứa nhiều nhiễu, có thể khiến việc nhận diện biển số xe trở nên khó khăn Việc chuyển đổi ảnh sang xám giúp giảm thiểu nhiễu, giúp các vùng có độ tương phản cao hơn nổi bật hơn.
Bước 2 : Làm mờ ảnh , Bước này giúp giảm thiểu nhiễu và tăng cường ký tự. Việc làm mờ ảnh giúp giảm thiểu nhiễu, giúp các vùng có độ tương phản cao hơn nổi bật hơn.
Bước 3 : Phát hiện cạnh sử dụng Canny, Bước này giúp tìm kiếm các vùng có độ tương phản cao trong ảnh, bao gồm cả ký tự trên biển số xe. Hàm cv2.Canny() sử dụng hai ngưỡng, ngưỡng thấp và ngưỡng cao Các vùng có độ tương phản cao hơn ngưỡng cao sẽ được xác định là các vùng có thể là ký tự.
Bước 4 : Áp dụng kỹ thuật morphology để tìm vùng chứa ký tự, Kỹ thuật morphology là một kỹ thuật xử lý ảnh sử dụng các phép toán hình học để biến đổi hình dạng của các đối tượng trong ảnh Trong trường hợp này, kỹ thuật morphology được sử dụng để tìm các vùng chứa ký tự bằng cách mở rộng các vùng có độ tương phản cao.Kỹ thuật morphology có thể được sử dụng để mở rộng các vùng có độ tương phản cao, giúp các vùng này dễ dàng nhận diện hơn.
Bước 5 : Tìm contours trên ảnh đã xử lý, Hàm cv2.findContours() trả về một danh sách các contours, mỗi contours là một tập hợp các điểm Contours là các đường bao quanh các đối tượng trong ảnh.
Bước 6 : Tìm vùng chứa ký tự dựa trên diện tích và hình dạng, Các vùng chứa ký tự sẽ có diện tích và hình dạng phù hợp với ký tự trên biển số xe Trong hàm này, các vùng chứa ký tự được xác định dựa trên các tiêu chí sau:
- Diện tích: Diện tích của vùng chứa ký tự phải nằm trong khoảng từ 1100 đến 4300 pixel.
- Tỷ lệ chiều rộng/chiều cao: Tỷ lệ chiều rộng/chiều cao của vùng chứa ký tự phải nằm trong khoảng từ 1,5 đến 7,5.
Các vùng chứa ký tự có diện tích và hình dạng phù hợp với ký tự trên biển số xe sẽ có nhiều khả năng là ký tự thực sự.
2.3.3 Nhận dạng ký tự Đây quy trình nhận dạng các ký tự vừa được định vị và tách ra ở bước định vị ký tự
Bước 1: Chuyển đổi ảnh sang ảnh xám, Hàm cv2.cvtColor() được sử dụng để chuyển đổi ảnh sang ảnh xám Ảnh màu thường chứa nhiều nhiễu, có thể khiến việc nhận diện biển số xe trở nên khó khăn Việc chuyển đổi ảnh sang xám giúp giảm thiểu nhiễu, giúp các vùng có độ tương phản cao hơn nổi bật hơn.
Bước 2: Làm mờ ảnh để giảm nhiễu và tăng cường ký tự, Hàm cv2.GaussianBlur() được sử dụng để làm mờ ảnh Việc làm mờ ảnh giúp giảm thiểu nhiễu, giúp các vùng có độ tương phản cao hơn nổi bật hơn.
Bước 3: Phát hiện cạnh sử dụng Canny, Hàm cv2.Canny() sử dụng hai ngưỡng, ngưỡng thấp và ngưỡng cao Các vùng có độ tương phản cao hơn ngưỡng cao sẽ được xác định là các vùng có thể là ký tự.
Bước 4: Tìm contours trên ảnh đã xử lý, Hàm cv2.findContours() trả về một danh sách các contours, mỗi contours là một tập hợp các điểm Contours là các đường bao quanh các đối tượng trong ảnh.
MỘT SỐ KẾT QUẢ THỰC NGHIỆM
Bộ dữ liệu thực nghiệm
Bộ dữ liệu dùng để thực nghiệm
Bộ dữ liệu bao gồm các bộ chữ cái: A, B, C, D, E, F, G, H, I, J, K, L, M, N, P,
→ Có tất cả 35 kí tự.
Đánh giá kết quả thực nghiệm
Bao gồm 200 ảnh train và 100 ảnh test vơi mô hình SVM sử dụng Kernel ‘Linear’ :
Hình 3.2 bảng đánh giá kết quả thực nghiệm Đánh giá :
Mô hình có hiệu suất tốt đối với một số lớp như lớp 1, 2, 3, 5, 6, 7, 8, 9, A, C,
Một số lớp có độ chính xác và nhớ thấp, như lớp 0, B, I, và W.
Cần xem xét kỹ về việc cải thiện hiệu suất đối với những lớp có độ chính xác và nhớ thấp.
Trung bình macro và có trọng số đều cao, nhưng nên chú ý đến những lớp có hiệu suất thấp để đảm bảo sự cân bằng. Điều này chỉ là một đánh giá tổng quan dựa trên số liệu, và quyết định cuối cùng về mức độ chấp nhận được của hiệu suất phụ thuộc vào yêu cầu cụ thể của ứng dụng và sự quan trọng của từng lớp.
Quy trình thực nghiệm
3.3.1 Phân tích thiết kế hệ thống
Hình 3.3: Biểu đồ usecase Xem kết quả chẩn đoán
3.3.1.2 Mô tả chi tiết usecase
Tên usecase Chẩn đoán biển số xe
Usecase này cho phép người dùng chẩn đoán được thông tin biển số xe thông qua việc gửi ảnh chụp lên server
Actor Người dùng Đảm bảo tối thiểu Thông báo chọn ảnh khi chưa chọn Đảm bảo thành công Kết quả chẩn đoán bệnh cây được trả về cho phía người dùng
Kích hoạt Người dùng nhấp nút “chọn file” để chọn ảnh và bấm nút chẩn đoán
1 Người dùng nhấp chọn nút “Chọn file” trên giao diện để thực hiện gửi ảnh lên server:
1.1 Người dùng nhấp chọn nút “Chọn file” trên giao diện, hệ thống sẽ hiển thị danh sách các ảnh của người dùng trong máy tính hiện tại, người dùng chọn ảnh tại địa chỉ bất kỳ trên máy tính.
2 Sau khi chọn ảnh, người dùng nhấp chọn nút “dự đoán” trên giao diện để thực hiện gửi ảnh lên server Hệ thống sẽ trả về kết quả cho người dùng là thông tin biển số xe chẩn đoán được
- Tại bước 2, nếu hình ảnh cung cấp chưa đủ ánh sáng và sắc nét thì ảnh sẽ không thể cung cấp thông tin biển số
Giao diện được thiết kế đơn giản để tối ưu thời gian chẩn đoán, nếu giao diện sử dụng nhiều công nghệ mới thì khi trả về kết quả sẽ cần thời gian để render lại các thành phần của giao diện, việc đó có thể ảnh hưởng đến thời gian chẩn đoán.
Hình 3.4: Giao diện của hệ thống
3.3.2.1 Chức năng của hệ thống
- Thực hiện chức năng chẩn đoán của hệ thống:
Hình 3.5: Hình ảnh biển số 60A-99999
Hình 3.6: Hình ảnh biển số 17-MD7 88888
Hình 3.7: Hình ảnh biển số 37A-55555
Một số kết quả
Kết quả chẩn đoán lần 1:
Hình 3.8: Kết quả chẩn đoán hệ thống hiển thị lần 1 Sau khi chẩn đoán lần 1 ta thấy kết quả đưa ra trùng với biển số xe trong ảnh là
Kết quả chẩn đoán lần 2:
Hình 3.9: Kết quả chẩn đoán hệ thống hiển thị lần 2 Sau khi chẩn đoán lần 2 ra thấy kết quả đưa ra sai lệch nhỏ
Kết quả chẩn đoán lần 3:
Hình 3.10: Kết quả chẩn đoán hệ thống hiển thị lần 3
Sau khi chẩn đoán lần 3 ra thấy kết quả đưa ra sai lệch hoàn toàn