Trong phạm vi đồ án tốt nghiệp này, sinh viên đã xây dựng được thành công hệ thống tự động nhận dạng biển số xe Việt Nam, trong thời gian sắp tới sinh viên xin đề xuất hướng phát triển sau này để cải tiến độ chính xác cũng như hiệu năng của hệ thống như sau: • Thu thập thêm dữ liệu ảnh biển số xe một dòng và xây dựng mô hình nhận dạng biển số 1 dòng • Thử nghiệm một số mô hình nhận diện vật thể khác ngoài YOLO như SSD, Faster R-CNN,… • Ứng dụng mạng nơ-ron vào bài toán nhận dạng ký tự
Giới thiệu đề tài
Đặt vấn đề
Hiện nay, cùng với sự phát triển về khoa học kỹ thuật và công nghệ thông tin thì tốc độ đô thị hoá ngày càng tăng, kéo theo đó là nhu cầu đi lại của người dân ngày một tăng cao Do đó dẫn đến số lượng phương tiện giao thông tham gia trên đường ngày càng lớn Với số lượng lớn phương tiện như vậy thì việc quản lý các phương tiện gặp phải rất nhiều khó khăn Công tác quản lý các phương tiện giao thông rất phức tạp, dễ nhầm lẫn, tốn nhiều thời gian và nhân công Đặc biệt với lưu lượng giao thông dày đặc thì việc ùn tắc ở những điểm ra vào bãi đỗ xe là chuyện thường xuyên xảy ra Để giải quyết vấn đề ở trên thì giải pháp đưa ra là áp dụng các hệ thống hoạt động tự động Mỗi một phương tiện đều có một biển số của riêng nó Vì vậy sinh viên hướng đến mục tiêu xây dụng hệ thống nhận dạng biển số xe tự động nhằm giúp các bãi đỗ xe giảm thiểu thời gian và nhân công trong công tác quản lý các phương tiện giao thông
Nhận dạng biển số tự động (Automatic Number Plate Recognition) là một quá trình trong đó phương tiện được xác định hoặc nhận dạng bằng biển số xe ANPR sử dụng các kỹ thuật xử lý hình ảnh để trích xuất biển số xe từ hình ảnh kỹ thuật số ANPR có thể được sử dụng để lưu trữ hình ảnh được chụp bởi camera cũng như văn bản trích xuất từ biển số xe, và thêm một số cấu hình để lưu trữ hình ảnh của người điều khiển phương tiện
Các hệ thống ANPR thường bao gồm một camera, bộ xử lý và ứng dụng có khả năng thực hiện nhận dạng ký tự quang học (OCR), để biến đổi hình ảnh của biển số xe thành các ký tự chữ và số; Cung cấp giao diện người dùng để hiển thị hình ảnh được chụp, kết quả về chuyển đổi OCR
Việc triển khai thành công hệ thống nhận dạng biển số tự động mang lại kết quả nhanh hơn và dễ dàng hơn trong nhận dạng xe Điều này dẫn đến việc tìm kiếm và lấy các thông tin liên quan đến phương tiện nhanh hơn và chính xác hơn
Chương 1 Giới thiệu đề tài
Mục tiêu và phạm vi đề tài
Nhận dạng biển số tự động là một phương pháp giám sát được phát triển lần đầu tiên vào năm 1976 tại Chi nhánh phát triển khoa học cảnh sát Vương quốc Anh (Police Scientific Development Branch) với mục đích chống tội phạm
Một hệ thống nhận dạng biển số tự động thường được chia làm 3 mô-đun chính như sau:
• Phát hiện vùng biển số
Trong mô-đun phát hiện vùng biển số, có nhiều kỹ thuật được đề xuất như: phương pháp hình thái học và biến đổi mũ [1], xác định cạnh, tương quan và biến đổi hình thái học [2], cường độ phương sai cục bộ & mật độ cạnh dọc và mô hình mật độ cạnh [3], xác định cạnh dọc sobel và phân tích mật độ cạnh [4], thông tin màu sắc và hình dạng [5], phương pháp biến đổi Hough và thuật toán xác định viền [6], xác định cạnh dọc và ngang [7], thuật toán adaboost [8]…
Trong mô-đun phân đoạn ký tự, có một số các kỹ thuật như: phát hiện cạnh, biến đổi mô hình màu, phân tích thành phần [4], một khung hình thông minh phác thảo đặc tính của biển số xe bằng nhiều cách chiếu sáng khác nhau [9], thuật toán đa cụm [10], ngưỡng và thành phần kết nối [11], biến đổi hình thái học và thành phần kết nối [12]…
Trong mô-đun nhận dạng ký tự có một số kỹ thuật đề xuất như: cây quyết định [13], xử lý ảnh màu [5], máy vectơ hỗ trợ [14], mạng nơ-ron đa lớp và đa cụm [10], khớp mẫu [12], các phần mềm OCR [8]…
Mặc dù, có nhiều phương pháp được đề xuất cho hệ thống ANPR Nhưng không có phương pháp duy nhất nào có thể cung cấp hiệu suất thỏa đáng cho tất cả các trường hợp phức tạp khác nhau, chẳng hạn như: sự không chắc chắn của các cạnh, các dạng biển khác nhau, biển nhỏ, ánh sáng mờ, hình ảnh mờ, hình ảnh được chiếu sáng thấp hoặc cao, các loại biển với màu sắc, phông chữ, cú pháp, kích thước, khoảng cách, góc khác nhau; thời tiết và môi trường; biển với nhiều hàng Mặt khác, mỗi nhà nghiên cứu đã sử dụng nhiều nguồn hình ảnh, môi trường với chất lượng hình ảnh, thông số của hình ảnh không giống nhau và hình ảnh xe không được thu thập tại Việt Nam Do đó, hầu hết các phương pháp trước đây không thể áp dụng cho tất cả các quốc gia, tất cả các môi trường, tất cả các loại biển số xe nói chung và biển Việt Nam nói riêng
Ngày nay, với sự tiến bộ trong lĩnh vực Học máy (Machine learning) nói chung và học sâu (Deep learning) nói riêng có rất nhiều phương pháp đã chứng minh được tính hiệu quả trong việc giải quyết những bài toán phức tạp mà các cách tiếp cận truyền thống chưa thể giải quyết triệt để được Do đó sinh viên xin đề xuất áp dụng các phương pháp trong lĩnh vực máy học và học sâu vào trong bài toán xây dựng hệ thống tự động nhận dạng biển số xe.
Định hướng giải pháp
Sau khi nghiên cứu các đặc điểm của biển số xe Việt Nam, để có thể xây dựng được một hệ thống ANPR hoàn toàn tự động, sinh viên đề xuất các giải pháp sau:
• Ở mô-đun phát hiện biển số: ta quy bài toán phát hiện biển số về bài toán phát hiện vật thể và áp dụng deep learning với mô hình nhận diện vật thể YOLO (You only look once)
• Ở mô-đun phân đoạn ký tự: kết hợp các phương pháp xử lý ảnh được cung cấp bởi thu viện mã nguồn mở OpenCV như biến đổi hình thái học trên ảnh màu xám để tăng độ tương phản, sử dụng kỹ thuật làm mờ ảnh để loại bỏ các vật thể nhỏ (nhiễu), xác định viền, xoay ảnh, thay đổi kích thước ảnh,… để phân đoạn biển ra thành dòng rồi từ đó phân đoạn ra từng ký tự riêng lẻ
• Ở mô-đun nhận diện ký tự: sử dụng thuật toán machine learning K nearest neighbor (KNN) để xây dựng mô hình dự đoán ký tự và chữ số trong biển số xe Việt Nam.
Bố cục đồ án
Phần còn lại của báo cáo đồ án tốt nghiệp này được tổ chức như sau.
Tình hình nghiên cứu hiện nay
Lịch sử phát triển của hệ thống nhận dạng biển số tự động ANPR
ANPR được phát minh vào năm 1976 tại Anh, nơi được gọi là Chi nhánh phát triển khoa học cảnh sát (PSDB) và các hệ thống ban đầu được phát triển để sử dụng từ năm 1979 Các hệ thống thử nghiệm ban đầu đã được triển khai ở Anh trên tuyến đường A1 và tại đường hầm Dartford trên đường cao tốc M25 và vụ bắt giữ đầu tiên được ghi nhận nhờ vào ANPR phát hiện một chiếc xe bị đánh cắp là vào năm 1981 Kể từ khi thành lập, công nghệ ANPR đã phát triển và thích nghi với thời đại, tìm ra nhiều hướng đi mới Dưới đây là một vài cột mốc đáng chú ý trong suốt hành trình phát triển của ANPR cho đến nay:
1993 - ANPR được triển khai lần đầu tiên như một phần của mạng lưới camera "Vành đai thép" quanh thành phố Luân Đôn Dự án này là hoạt động lớn nhất vào thời điểm đó và được cảnh sát thủ đô Luân Đôn triển khai trong nỗ lực chấm dứt chuỗi các vụ đánh bom khủng bố tại khu tài chính, bởi IRA
1997 - Trung tâm dữ liệu ANPR cảnh sát quốc gia (NADC) được thành lập Trước khi tạo ra NADC, dữ liệu được thu thập từ các hệ thống ANPR đã được lưu trữ cục bộ trong lực lượng cảnh sát vận hành camera, nhưng trung tâm dữ liệu ANPR quốc gia đã cho phép phân tích toàn bộ dữ liệu của khắp các cục cảnh sát, bằng cách tập trung tất cả dữ liệu của cảnh sát ANPR từ khắp nước Anh
2003 - Chương trình Phí tắc nghẽn được giới thiệu nhằm mục đích giảm lưu lượng ở trung tâm Luân Đôn Vùng thu phí, bao gồm 20km2 của thủ đô, được vận hành bởi cục giao thông vận tải Luân Đôn và gần 700 camera ANPR được lắp đặt trên mọi con đường trong và ngoài khu vực Điều này đánh dấu việc sử dụng ANPR quy mô lớn đầu tiên cho mục đích dân sự
2005 - ANPR International Limited được thành lập ngày 18 tháng 5 năm 2005 Xuất phát từ niềm tin rằng công nghệ ANPR có thể làm được nhiều hơn so với trước đây Sự thành lập
Chương 2 Tình hình nghiên cứu hiện nay lý dữ liệu ANPR từ nhiều nguồn khác nhau và xử lý dữ liệu thông qua một loạt các ứng dụng mô-đun
2006 - ANPR International đã triển khai hệ thống camera tĩnh đầu tiên cho quản lý đỗ xe - bayGAURDIAN, đây là mô-đun đầu tiên được xây dựng cho văn phòng hỗ trợ eyeTRAFFIC Hệ thống cho phép người điều khiển bãi đỗ xe giám sát các phương tiện ra vào bãi đỗ xe, tính toán thời gian phương tiện sử dụng tại chỗ và tự động xác định những phương tiện không được ủy quyền hoặc ở lại quá lâu
2007 - mô-đun bayGUARDIAN được mở rộng với sự tích hợp vào thiết bị Charge Car Hệ thống tích hợp hoàn toàn với một loạt các máy thu phí đậu xe, để cho phép các hệ thống văn phòng hỗ trợ tự động phát hiện một chiếc xe chưa trả tiền đỗ xe hoặc trả quá ít
2009 - ANPR International phát triển sản phẩm ANPR di động đầu tiên của mình - streetSweEPER, được thiết kế dành cho nhiều ứng dụng bao gồm khảo sát giao thông, giám sát di động cho Cơ quan cấp phép lái xe Vào ngày đầu tiên trên đường ở trung tâm Luân Đôn, streetSweEPER phát hiện hơn 27 phương tiện chưa đóng thuế chỉ trong vài giờ
2011 - hệ thống roadGUARDIAN được phát triển và triển khai để chống lại vấn đề xe cộ đi cắt qua các tuyến đường bị cấm để tránh tắc nghẽn Hệ thống được triển khai cùng với Hội đồng quận và các vụ phát hiện được xử lý bởi Cảnh sát, đưa ra thông báo phạt cho bất kỳ người phạm tội nào
2012 - Hệ thống ghi nhận thiệt hại phương tiện đầu tiên được phát triển để ghi lại tình trạng của phương tiện đến khu vực đỗ xe tại sân bay, nhằm ngăn chặn các yêu cầu bảo hiểm gian lận về thiệt hại xe cộ đối với nhân viên sân bay Hệ thống liên kết 360 độ hình ảnh của chiếc xe đến số đăng ký của nó, cung cấp một phương pháp nhanh chóng và dễ dàng để phục hồi và phân tích các hình ảnh trong trường hợp có yêu cầu từ người lái xe
2013 - ANPR International giành Giải thưởng Công nghệ cho công việc khảo sát giao thông di động được thực hiện cho Hội đồng Hạt Gloucestershire Cuộc khảo sát sử dụng một đội xe được trang bị StreetSweEPER để thu thập dữ liệu về hồ sơ giao thông và thói quen đỗ xe quanh một số thị trấn và thành phố để giúp Hội đồng hiểu rõ hơn về lưu lượng giao thông và sử dụng phương tiện
2014 - speedSENTINEL được phát triển để giải quyết các vấn đề về tốc độ trong các nút giao thông công cộng Sentinel được thiết kế để trở thành một hệ thống camera tốc độ triển khai ngẫu nhiên để đảm bảo tuân thủ các giới hạn tốc độ giúp cho người đi bộ có thể đi bộ an toàn tại các điểm giao thông bộn rộn
2016 - Hệ thống ghi nhận thiệt hại phương tiện được mở rộng để chụp làn đường kép, cho phép chụp nhiều làn đường và tối đa 14 camera được tích hợp với dữ liệu ANPR để tăng trải nghiệm của khách hàng và tăng sự thuận tiện.
Phân tích cấu trúc hệ thống ANPR thông thường
Hệ thống ANPR thường bao gồm hai thành phần: máy ảnh hay camera được sử dụng để chụp ảnh biển số xe, và phần mềm trích xuất biển số từ ảnh chụp được bằng cách sử dụng một công cụ nhận dạng ký tự cho phép các pixel được dịch thành các ký tự có thể đọc được
Một hệ thống nhận dạng biển số xe thường hoạt động theo bốn phần chính là thu thập hình ảnh, phát hiện biển số xe, phân đoạn ký tự và cuối cùng là nhận dạng ký tự
Hình 1 bên dưới là quy trình cơ bản của một hệ thống ANPR
Hình 1 Quy trình cơ bản của hệ thống ANPR
Bản mô tả cơ bản chức năng của các quá trình trong ANPR là:
• Bước 1: Camera chụp ảnh xe chứa biển số (Thu thập hình ảnh) Ảnh từ camera Tiền xử lý Phát hiện biển số
Nhận dạng ký tự Các ký tự đầu ra
• Bước 2: Cô lập biển số, điều chỉnh độ sáng và độ tương phản và phân đoạn nó thành các ký tự (Phát hiện biển số và phân đoạn ký tự)
• Bước 3: Mẫu của mỗi ký tự được phân tích để chuyển đổi hình ảnh thành văn bản (Nhận dạng ký tự)
Bước đầu tiên là công đoạn thu nhận hình ảnh Hình ảnh của xe sẽ được chụp bằng camera Yêu cầu cơ bản là hình ảnh của xe phải được chụp theo cách sao cho hình ảnh đầu vào phải có chứa hình ảnh của biển số Hình ảnh thường được chụp trong mô hình màu RGB (Đỏ, Xanh lục và Xanh lam) Hình ảnh được chụp bị ảnh hưởng bởi nhiều yếu tố như: hệ thống quang học, méo hình, nhiễu hệ thống, thiếu phơi sáng hoặc chuyển động quá mức của máy ảnh hoặc phương tiện, do đó làm giảm chất lượng hình ảnh biển xe do đó ảnh hưởng xấu đến kết quả xử lý hình ảnh tổng thể Như một cơ chế để chỉnh sửa, công đoạn tiền xử lý ảnh được đưa vào để xử lý bất kỳ lỗi nào có thể xảy ra trong bước thu thập hình ảnh Tiền xử lý ảnh chủ yếu liên quan đến việc chuyển đổi hình ảnh RGB thành màu xám, loại bỏ nhiễu và tăng cường đường viền cho độ sáng Việc tiền xử lý ảnh thường được thực hiện thông qua lọc ảnh
Phát hiện biển số tìm kiếm hình ảnh đầu vào, xác định hình ảnh nào có chứa biển số Biển số có thể được tìm thấy ở bất cứ đâu trong một hình ảnh, phi thực tế khi kiểm tra tất cả các pixel của ảnh để xác định vị trí biển số Vì vậy, chỉ tập trung vào những pixel có biển số
Phân đoạn ký tự có thể được định nghĩa là một kỹ thuật, trong đó phân vùng hình ảnh chứa dòng hoặc cụm từ thành các ký tự riêng lẻ Đây là quá trình tìm cách phân tách một hình ảnh chứa chuỗi ký tự thành các hình ảnh phụ chứa các biểu tượng riêng lẻ
Phân đoạn ký tự là quá trình mà thông qua đó thành phần văn bản trong ảnh được cô lập khỏi nền Để nhận dạng văn bản diễn ra chính xác, dòng văn bản được phân đoạn đầu tiên, sau đó từ dòng được phân đoạn, ta phân đoạn các từ và sau đó là phân đoạn ký tự
Nhận dạng ký tự là quá trình phát hiện và nhận dạng các ký tự từ hình ảnh đầu vào và chuyển đổi nó thành văn bản ASCII có ý nghĩa (Mã tiêu chuẩn Mỹ cho trao đổi thông tin) Nhận dạng ký tự là quá trình phân loại ký tự đầu vào theo lớp ký tự được xác định trước.
Các nghiên cứu liên quan
2.3.1 Nghiên cứu về phát hiện vùng biển số
Bước phát hiện biển số ảnh hưởng rất lớn đến độ chính xác của các bước tiếp theo Đầu vào là một hình ảnh không chứa, chứa một hoặc nhiều biển số xe và đầu ra chỉ là một phần của hình ảnh chỉ chứa biển số xe Rất nhiều thuật toán đã được đề xuất trong những năm qua để giải quyết vấn đề đầy thách thức này Độ chính xác đã được cải thiện trong những năm gần đây, nhưng việc xác định biển số xe trong hình ảnh được chụp từ một vị trí tùy ý với nhiều yếu tố ảnh hưởng đến quá trình như chiếu sáng vẫn còn là một thách thức Cách tiếp cận vét cạn là xử lý mọi pixel trong ảnh khiến mất nhiều thời gian xử lý Thay vào đó, cách tiếp cận phổ biến là sử dụng các đặc trưng nổi bật trong biển số xe và chỉ xử lý các pixel có các đặc trưng này giúp giảm đáng kể thời gian xử lý Năm phương pháp chính sẽ được trình bày ở đây là: dựa trên cạnh, dựa trên màu sắc, dựa trên kết cấu, dựa trên ký tự và kết hợp hai hoặc nhiều phương pháp Tóm tắt về ưu điểm và nhược điểm của từng phương pháp được nêu trong Bảng 1
Bảng 1 So sánh các phương pháp phát hiện vùng biển số Phương pháp tiếp cận Ưu điểm Nhược điểm
Dựa trên cạnh Đơn giản và nhanh chóng Trả về quá nhiều ứng viên khi hình ảnh có nhiều cạnh và gặp sự cố khi hình ảnh bị mờ
Dựa trên màu sắc Không bị ảnh hưởng bởi hình ảnh nghiêng hoặc biến dạng
Kết quả hạn chế khi sử dụng một mình
Dựa trên cấu trúc Không phụ thuộc vào việc biển có hình dạng thông thường hay không
Tính toán phức tạp khi hình ảnh đầu vào có nhiều cạnh hoặc độ chiếu sáng khác nhau
Dựa trên ký tự Tỉ lệ bỏ sót thấp và dễ để xoay ảnh
Gặp sự cố khi hình ảnh chứa văn bản khác
Kết hợp 2 hoặc nhiều Nhanh và hiệu quả Tính toán rất phức tạp a) Phương pháp tiếp cận dựa trên cạnh
Phương pháp tiếp cận dựa trên cạnh phát hiện biển số xe bằng cách khai thác thực tế là biển số xe có hình chữ nhật với tỷ lệ khung hình đã biết Bằng cách sử dụng chuyển đổi màu giữa biển số và nền, ranh giới của biển số xe có thể được nhìn thấy Các khu vực có mật độ cạnh cao được xem là biển số xe tiềm năng và cả phát hiện cạnh ngang và dọc có thể được thực hiện để đề xuất các khu vực ứng cử viên Nhiều người chỉ sử dụng phát hiện cạnh dọc vì phát hiện cạnh ngang đã cho thấy lỗi cao hơn, vì các cạnh ngang của biển số xe có thể dễ dàng bị nhầm lẫn với các cạnh ngang của đầu xe Hơn nữa, chỉ các hình chữ nhật có cùng tỷ lệ như biển số xe được xem xét để loại trừ các ứng viên và cải thiện kết quả chung Tỷ lệ phát hiện được báo cáo là 99,7% Biến đổi Hough cũng có thể được sử dụng để phát hiện biển số xe trong ảnh bằng cách phát hiện các đường thẳng Ưu điểm của biến đổi Hough là nó có thể phát hiện các đường thẳng với độ nghiêng lên tới 30° Tuy nhiên, đó là một quá trình tiêu tốn thời gian và bộ nhớ
Nói chung, các phương pháp dựa trên cạnh là cách đơn giản nhất và nhanh nhất để thực hiện phát hiện biển số xe Tuy nhiên, nó gặp vấn đề khi hình ảnh đầu vào phức tạp Nó có thể trả lại quá nhiều ứng cử viên nếu hình ảnh đầu vào chứa quá nhiều cạnh hoặc gặp vấn đề khi tìm biển số xe nếu hình ảnh bị mờ b) Phương pháp tiếp cận dựa trên màu sắc
Phương pháp tiếp cận dựa trên màu sắc sử dụng màu sắc để phát hiện biển số xe Biển số xe thường có màu khác so với nền và điều này có thể được sử dụng để tìm biển số Sự kết hợp màu sắc của biển số và các ký tự của nó hiếm khi được tìm thấy ở những nơi khác ngoài khu vực biển số Một thuật toán di truyền được sử dụng để tìm hiểu cách nhận biết các kết hợp màu này Bằng cách đào tạo trong các điều kiện chiếu sáng khác nhau, nó học được những màu sắc cần tìm Với độ sáng trung bình của từng khu vực, nó có thể phân biệt khu vực biển số xe với các khu vực khác Các tác giả báo cáo độ chính xác 92,8% Thuật toán dịch chuyển trung bình được sử dụng để phân vùng dựa trên các màu khác nhau Và để tìm biển số xe trong khu vực ứng cử viên sau khi áp dụng thuật toán đó, phương pháp dựa trên cạnh được sử dụng Tỷ lệ phát hiện biển số xe là 97,6% Thời gian thực hiện không được đề cập
Các phương pháp dựa trên màu thường được sử dụng kết hợp với các phương pháp khác, nhưng có thể được sử dụng một mình Chúng không bị ảnh hưởng bởi biển số nghiêng hoặc biến dạng Tuy nhiên, các phương pháp dựa trên màu sắc có thể có kết quả hạn chế khi được sử dụng một mình vì chúng chỉ xem xét điều kiện chiếu sáng c) Phương pháp tiếp cận dựa trên cấu trúc
Phương pháp tiếp cận dựa trên kết cấu sử dụng phân bố mật độ pixel độc đáo bên trong biển số xe để phát hiện biển trong hình ảnh Các ký tự trên biển số tương phản với phần còn lại của biển và có thể được phát hiện bằng các phương pháp dựa trên kết cấu khác nhau Một phương pháp sử dụng cửa sổ trượt đồng tâm được đề xuất Biển số xe được xem là một sự bất thường trong kết cấu của hình ảnh Những thay đổi đột ngột trong kết cấu được sử dụng để phát hiện biển số xe tiềm năng Một phương pháp kết hợp các cửa sổ trượt đồng tâm và biểu đồ, tăng độ chính xác được đề xuất
Bởi vì cách tiếp cận dựa trên kết cấu không phụ thuộc vào biển số xe có hình dạng và hoạt động ngay cả khi ranh giới của biển số bị biến dạng, chúng có thể phát hiện nhiều hơn các đặc điểm màu sắc và cạnh Nhược điểm với các phương pháp dựa trên kết cấu là chúng phức tạp về mặt tính toán Nếu hình ảnh đầu vào có nhiều cạnh hoặc độ chiếu sáng khác nhau, thời gian xử lý có thể cao d) Phương pháp tiếp cận dựa trên ký tự
Phương pháp tiếp cận dựa trên ký tự xử lý biển số xe dưới dạng chuỗi ký tự Các phương pháp này kiểm tra hình ảnh cho sự hiện diện của các ký tự không Các khu vực nơi các ký tự được tìm thấy được đề xuất là các khu vực tiềm năng có chứa biển số Một mạng nơ-ron được sử dụng để phân loại các vùng trong hình ảnh dựa trên các vùng giống như ký tự và biển số được phát hiện nếu tìm thấy sự kết hợp tuyến tính của các vùng giống như ký tự Có người đưa phương pháp này tiến thêm một bước bằng cách phát hiện tất cả các ký tự trong ảnh bằng cách sử dụng mạng nơ-ron tích chập đầu ra 37 chiều (CNN) và sau đó sử dụng CNN mới để loại bỏ các kết quả false positive Quá trình này khá chậm, tốn khoảng 5s cho mỗi hình ảnh, nhưng loại bỏ được bước phân đoạn ký tự
Phương pháp tiếp cận dựa trên ký tự thường có tỷ lệ bỏ sót thấp và dễ dàng xử lý đối với các hình ảnh bị xoay Tuy nhiên, các phương pháp này có thể gây ra lỗi cao khi tìm thấy văn bản khác trong ảnh Các phương pháp cũng có xu hướng tốn thời gian e) Phương pháp tiếp cận dựa trên 2 hoặc nhiều phương pháp
Khi giá cả phải chăng, kết hợp nhiều tính năng là một cách hiệu quả để phát hiện biển số xe mạng nơ-ron có thể phát hiện các biển số xe bằng cách huấn luyện để nhận biết vùng có biển số và vùng không có biển số Có thể sử dụng hai mạng nơ-ron để thực hiện phát hiện biển số Mạng nơ-ron đầu tiên phân tích màu sắc của biển số xe trong khi mạng nơ-ron thứ hai phân tích kết cấu Đầu ra của hai mạng nơ-ron sau đó được kết hợp để tìm các khu vực ứng cử viên Tỷ lệ phát hiện được trong báo cáo của họ ở mức 100% trên bộ dữ liệu chứa 1000 chuỗi video từ các cổng thu phí
Các cách tiếp cận kết hợp hai hoặc nhiều tính năng thường đáng tin cậy và hiệu quả hơn các cách tiếp cận sử dụng một tính năng duy nhất Tuy nhiên, các phương pháp phức tạp hơn về mặt tính toán so với các phương pháp đơn tính năng
2.3.2 Nghiên cứu về phân đoạn ký tự
Trước khi nhận dạng ký tự, thì ta cần thiết phải phân đoạn các ký tự Thông thường tiền xử lý được thực hiện trước bước này để tránh các vấn đề gây ra bởi việc hình ảnh bị nghiêng hoặc thay đổi độ sáng trên hình ảnh Về cơ bản, có 2 loại thuật toán phù hợp chính: dựa trên quy chiếu và dựa trên kết nối của pixel Cả hai đều yêu cầu hình ảnh đầu vào phải là hình ảnh nhị phân Tóm tắt về ưu điểm và nhược điểm của từng phương pháp được nêu trong Bảng 2
Bảng 2 So sánh các phương pháp phân đoạn ký tự Phương pháp tiếp cận Ưu điểm Nhược điểm
Dựa trên quy chiếu Đơn giản và dễ dàng để xoay ảnh
Yêu cầu kiến thức trước, nhạy cảm với thay đổi phông chữ và nhiễu ảnh hưởng đến kết quả
Dựa trên sự kết nối của pixel Đơn giản và dễ dàng để xoay ảnh
Gặp vấn đề với các ký tự bị hỏng và liền với nhau a) Phương pháp tiếp cận dựa trên quy chiếu
Các cách tiếp cận dựa trên phép quy chiếu dựa trên việc các ký tự và nền của biển số xe có các màu khác nhau nên sẽ cho các giá trị ngược nhau sau khi nhị phân ảnh Hình ảnh nhị phân được chiếu theo chiều dọc để tìm vị trí bắt đầu và kết thúc của mỗi ký tự Sau đó, hình ảnh được chiếu theo chiều ngang để phân đoạn từng ký tự Điều này dẫn đến tỷ lệ phân đoạn là 97,5%
Phương pháp chiếu dọc và ngang rất đơn giản và thường được sử dụng Nó hoạt động độc lập với vị trí ký tự và hoạt động cả khi biển số xe hơi bị nghiêng Tuy nhiên, nó đòi hỏi kiến thức trước về các ký tự chữ và số khiến nó nhạy cảm với các thay đổi phông chữ Nhiễu cũng ảnh hưởng đến kết quả b) Phương pháp tiếp cận dựa trên kết nối của pixel
Phương pháp tiếp cận dựa trên sự kết nối pixel thực hiện phân đoạn bằng cách gắn nhãn tất cả các pixel được kết nối trong hình ảnh nhị phân Các pixel có các thuộc tính giống như các ký tự được coi là một phần của ký tự
Giới thiệu công nghệ nhận diện vật thể YOLO
Ta có thể quy bài toán phát hiện biển số về bài toán phát hiện vật thể, với vật thể ở đây là biển số xe Việt Nam Có rất nhiều phương pháp được đề xuất để giải quyết bài toán nhận diện vật thể Sau đâu em xin giới thiệu và áp dụng phương pháp sử dụng kiến trúc YOLO (You Only Look Once) để nhận diện vật thể
Khi bạn muốn phát hiện ra vật thể trong một bức ảnh, sau đó đánh nhãn cho vật thể đó, các phương pháp lúc bấy giờ quá chậm để phục vụ trong thời gian thực, hoặc đòi hỏi thiết bị mạnh mẽ, đắt đỏ cho đến khi YOLO ra đời YOLO có khả năng gán nhãn cho toàn bộ vật trong khung hình với chỉ duy nhất một lần thực thi
YOLO là một trong những thuật toán nhận diện vật thể nhanh nhất thời điểm hiện tại Mặc dù không phải là phương pháp chính có độ xác cao nhất nhưng Yolo vẫn là được ứng dụng rất nhiều trong những dự án thực tế khi mà độ chính xác không phải là ưu tiên hàng đầu Những lợi thế của YOLO :
• "Hiểu" được khái quát về đại diện của mỗi đối tượng Qua đó có thể phát hiện và phân loại chính xác vật thể trong đời thực và các tác phẩm hội hoạ
3.1.1 Phân tích giải pháp YOLO
YOLO chỉ dùng một mạng nơ-ron tích chập và áp dụng lên ảnh đầu vào một lần duy nhất để học các đặc trưng trên ảnh Nó giống như là ta nhìn toàn thể bức ảnh và bắt đầu dò tìm các đối tượng trong nó Do đó thế nên thời gian thực thi thuật toán của YOLO là rất nhanh (171 khung hình trên một giây với cấu trúc mạng Darknet-19) và có thể áp dụng cho các bài toán
Chương 3 Cơ sở lý thuyết
YOLO mô hình bài toán nhận dạng đối tượng thành bài toán hồi quy trong miền không gian các rời rạc của các bounding box Thuật toán chia nhỏ ảnh đầu vào thành lưới gồm S x S ô Nếu tâm của đối tượng cần xác định rơi vào một ô nào đó thì ô đó sẽ chịu trách nhiệm xác định đối tượng đó và bounding box của nó Thuật toán sử dụng một mạng nơ-ron đơn với đặc trưng có được từ các feature map của các lớp tích chập để dự đoán B bounding box ở mỗi ô và xác suất loại đối tượng nào đang được chứa bên trong Cuối cùng, ta sẽ có rất nhiều bounding box được thuật toán đưa ra với kích thước khác nhau Sử dụng thuật toán Non- Maximum Suppresstion (NMS) ta có thể loại bỏ được hầu hết các bounding box là miền bao của cùng một đối tượng, có chỉ số score thấp và giữ lại các bounding box có score cao
Hình 2 Mô hình YOLO 3.1.2 Cách hoạt động của Yolo
Tại mỗi ô sẽ có trách nhiệm xác định B bounding box có kích thước và tỉ lệ khác nhau, để bắt lấy các đối tượng cần xác định trong hình Sau khi thuật toán được thực thi, mỗi bounding box sẽ được gán những confident rate Chỉ số này phản ánh cho ta biết box có đang chứa một đối tượng nào hay không, với xác suất cụ thể Thông thường, trong quá trình huấn luyện, confident rate thường được thiết lập với công thức sau:
Với 𝑃𝑟(𝑜𝑏𝑗𝑒𝑐𝑡) có giá trị trong khoảng [0, 1] thể hiện xác suất có một đối tượng được chứa bên trong bounding box đó 𝐼𝑂𝑈 89:; và confident rate Giá trị (𝑏 A , 𝑏 B ) là tọa độ của tâm điểm của box, 𝑏 > và 𝑏 C lần lượt là chiều cao và chiều rộng của box 4 giá trị 𝑏 A , 𝑏 B , 𝑏 C , và
𝑏 > sẽ lần lượt được tính thông qua 𝑡 A , 𝑡 B , 𝑡 C , và 𝑡 > theo công thức sau:
𝑇𝑟𝑜𝑛𝑔 đó 𝑝 C , 𝑝 > là kích thước box được định sẵn ban đầu (anchor) và có tỉ lệ tương ứng với kích thước ảnh đầu vào (𝑐 A , 𝑐 B ) là tọa độ trên trái của ô đang xét Bốn tham số 𝑡 A , 𝑡 B , 𝑡 C , và 𝑡 > được học trong quá trình huấn luyện Ta thấy rằng, tọa độ và kích thước của mỗi bounding box sẽ được xác định dựa trên tọa độ của ô đang xét và kích thước của anchor mặc định ban đầu thông qua giá trị từ một hàm phi tuyến của các tham số t (𝜎(𝑡) và 𝑒 < ) Hình 4 minh họa cho mối liên hệ giữa các tham số với nhau Ở YOLO phiên bản 2 trở đi, các kích thước của anchor được thiết lập dựa trên kích thước của các đối tượng trong tập huấn luyện bằng thuật toán gom nhóm k-means
Hình 4 Minh họa cho mối liên hệ giữa các tham số
Ngoài giá trị confident rate đã được nói đến ở trên, thuật toán cần xác định cụ thể đối tượng nào đang được chứa trong từng box bằng cách tính xác suất có điều kiện 𝑃𝑟(𝐶𝑙𝑎𝑠𝑠 R |𝑂𝑏𝑗𝑒𝑐𝑡) Cuối cùng, ta tổng hợp xác suất này với confident rate được nêu trên để tạo thành confident scores cho từng loại đối tượng (class)
Tóm lại, network được thiết kế để trả về một ma trận khối 3 chiều (tensor) có
𝑆 × 𝑆 × (𝐵 × 5 + 𝐶) giá trị, với C là số lượng đối tượng của bài toán Sau khi có được đầu ra này, ta sẽ có rất nhiều bounding box được đưa ra bởi mỗi ô Tuy nhiên hầu hết trong số chúng đều có confident scores thấp hoặc cùng bao phủ một đối tượng trong ảnh Vì thế ta cần phải loại bỏ hết các miền bao “dư thừa” này càng nhiều càng tốt Các bước để chọn các bounding box của các đối tượng trong ảnh và loại các box dư thừa sẽ được trình bày ở phần dưới đây Để dễ dàng mô tả quá trình chọn các bounding box, ta giả sử số lượng bounding box mà mỗi cell cần xác định là bằng 2 (B=2), số lượng đối tượng là 20 (C ) và S=7 Hình 5 mô tả chi tiết các giá trị được lưu trong tensor trả ra từ mạng nơ-ron tích chập, bao gồm các tham số của 2 bounding box và các xác suất có điều kiện 𝑃𝑟(𝐶𝑙𝑎𝑠𝑠|𝑂𝑏𝑗𝑒𝑐𝑡) đã được đề cập ở trên
Hình 5 Giá trị lưu trong tensor trả về từ mạng CNN Đầu tiên, ta cần tính được vector của confident scores cho mỗi bounding box bằng tích confident rate của mỗi bounding box và vector xác suất Pr(〖Class〗_i│Object) (được mô tả ở hình 6) Sau khi lần lượt tính được các vector của confident scores cho mỗi bounding box, ta có được một mảng các vector được mô tả ở hình 7
Hình 6 Mô tả vector confident scores cho mỗi bounding box
Hình 7 Mô tả toàn bộ vector confident scores cho ảnh
Kế tiếp, sau khi có được toàn bộ confident scores, ta bắt tay vào xét từng class để xem có đối tượng nào thuộc class này tồn tại trong ảnh đang xét hay không Với mỗi class, ta lần lượt lấy những score tương ứng của class đó ở từng bounding box Đồng thời ta loại bỏ những trường hợp có score thấp hơn một ngưỡng nhất định nào đó bằng cách gán 0 cho score đó Mảng chứa score này sẽ được sắp xếp theo chiều giảm dần để có thể dễ dàng áp dụng thuật toán NMS Ý tưởng của NMS rất đơn giản như sau:
Bước 1: Ta lấy bounding box có score của class đang xét cao nhất làm chuẩn và cho rằng đây chính là bounding box của một đối tượng thuộc class đó có trong ảnh Ta tạm gọi là box_max
Xử lý ảnh với OpenCV
OpenCV là một thư viện mã nguồn mở chuyên dùng để giải quyết các bài toàn liên quan đến thị giác máy tính Trong đó xử lý ảnh là một trong những ứng dụng nổi bật của thư viện này Sau đây sinh viên xin phép giới thiệu một số phương pháp xử lý ảnh thường hay sử dụng được cài đặt bởi thư viện OpenCV mà sinh viên sử dụng trong đồ án tốt nghiệp này
3.2.1 Các loại ảnh Đối với máy tính, ảnh kỹ thuật số được cấu thành bởi những điểm ảnh Máy tính lưu ảnh dưới dạng ma trận bao gồm các giá trị từ 0 đến 255 Ảnh kỹ thuật số được chia làm 3 loại chính: ảnh nhị phân, ảnh xám, ảnh màu a) Ảnh nhị phân Ảnh nhị phân là loại ảnh đơn giản nhất và có thể có hai giá trị, thường là đen và trắng hoặc
0 và 1 Hình ảnh nhị phân được gọi là hình ảnh 1 bit vì chỉ mất 1 chữ số nhị phân để thể hiện mỗi điểm ảnh Những loại ảnh này thường được sử dụng trong các ứng dụng trong đó thông tin duy nhất cần có là hình dạng chung hoặc phác thảo, ví dụ như nhận dạng ký tự quang học (OCR) Ảnh nhị phân thường được tạo từ ảnh xám thông qua thao tác ngưỡng (threshold), trong đó mọi điểm ảnh trên giá trị ngưỡng được chuyển sang màu trắng (‘1’) và những hình ảnh bên dưới nó chuyển sang màu đen (‘0’) Trong hình 14 dưới đây, chúng ta thấy các ví dụ về hình ảnh nhị phân
Hình 14 Ví dụ ảnh nhị phân b) Ảnh xám Ảnh xám còn có cách gọi khác là ảnh đơn sắc (1 màu) Số lượng bit được sử dụng cho mỗi điểm ảnh xác định số lượng các mức xám khác nhau Ảnh xám điển hình chứa 8 bit/điểm ảnh, cho phép chúng ta có 256 mức xám khác nhau thể hiện cường độ sáng khác nhau Từ 0 (màu đen) với cường độ sáng yếu nhất đến 255 (màu trắng) thể hiện cường độ sáng mạnh nhất Hình dưới đây cho thấy các ví dụ về hình ảnh tỷ lệ xám
Hình 15 Ví dụ ảnh xám c) Ảnh màu Ảnh màu có thể được mô hình thành ảnh đơn sắc với ba dải, trong đó mỗi dải dữ liệu tương ứng với một màu khác nhau Thông tin thực tế được lưu trữ trong hình ảnh kỹ thuật số là thông tin cấp độ xám trong mỗi dải quang phổ
Hình ảnh màu điển hình được thể hiện dưới dạng đỏ, xanh lá cây và xanh dương (thang màu RGB) Sử dụng tiêu chuẩn đơn sắc 8 bit làm mô hình, ảnh màu tương ứng sẽ có 24 bit/điểm ảnh (8 bit cho mỗi ba dải màu đỏ, lục và lam)
3.2.2 Nhị phân ảnh với ngưỡng thích ứng (Adaptive threshold)
Một trong những thao tác được sử dụng phổ biến nhất trong xử lý ảnh là nhị phân hoá một ảnh xám với một giá trị cố định để có được ảnh nhị phân Ví dụ: mọi thứ lớn hơn 127 trong thang màu xám, có thể được đặt thành 1 trong hình ảnh nhị phân và bất cứ thứ gì nhỏ hơn hoặc bằng 127 trong ảnh xám đều có thể được đặt thành 0 trong hình ảnh nhị phân Quá trình này được gọi là ngưỡng cố định vì giá trị ngưỡng của chúng ta đặt ra là cố định 127
Trong ngưỡng thích ứng không giống như ngưỡng cố định, giá trị ngưỡng tại mỗi vị trí điểm ảnh phụ thuộc vào cường độ điểm ảnh lân cận Để tính ngưỡng T(x, y) tức là giá trị ngưỡng tại vị trí điểm ảnh (x, y) trong hình ảnh, chúng ta thực hiện các bước sau:
• Một vùng bxb xung quanh vị trí pixel được chọn b được lựa chọn bởi người dùng
• Bước tiếp theo là tính trọng số trung bình của vùng bxb OpenCV cung cấp 2 phương pháp để tính trọng số trung bình này Chúng ta có thể sử dụng giá trị trung bình của tất cả các vị trí điểm ảnh nằm trong hộp bxb hoặc chúng ta có thể sử dụng trọng số Gaussian trung bình của các giá trị điểm ảnh nằm trong hộp Trong trường hợp sau, các giá trị điểm ảnh nằm gần trung tâm của hộp sẽ có trọng số cao hơn Chúng ta sẽ gọi cho giá trị này là WA(x, y)
• Tiếp theo đó là tìm giá trị ngưỡng T(x, y) bằng cách trừ đi một tham số không đổi, ta gọi tham số này là param1 Từ giá trị trung bình có trọng số WA(x, y) được tính cho mỗi điểm ảnh trong bước trước, giá trị ngưỡng T(x, y) tại vị trí điểm ảnh (x, y) sau đó được tính bằng công thức được đưa ra sau đây: T(x,y) = WA(x,y) - param1
3.2.3 Đường viền (contour) Đường viền có thể được giải thích đơn giản là một đường cong nối tất cả các điểm liên tục (dọc theo đường biên), có cùng màu hoặc cường độ Đường viền là một công cụ hữu ích để phân tích hình dạng và phát hiện và nhận dạng đối tượng
3.2.4 Phương pháp hình thái học
Biến đổi hình thái học là một số thao tác đơn giản dựa trên hình dạng hình ảnh Nó thường được thực hiện trên hình ảnh nhị phân Nó cần hai đầu vào, một là hình ảnh gốc, thứ hai được gọi là phần tử cấu trúc hoặc hạt nhân (kernel) quyết định tính chất của hoạt động Hai toán tử hình thái cơ bản là phép co (Erosion) và giãn nở (Dilation) Sau đó, các hình thức biến thể của nó như phép mở (Open), phép đóng (Close), Gradient,… cũng được sử dụng a) Phép co (Erosion) Ý tưởng cơ bản về phép co cũng giống như xói mòn đất, nó làm xói mòn ranh giới của đối tượng foreground (Luôn cố gắng giữ foreground trong màu trắng) Hạt nhân (kernel) trượt qua hình ảnh (như trong tích chập 2D) Một pixel trong ảnh gốc (1 hoặc 0) sẽ chỉ được coi là 1 nếu tất cả các pixel trong kernel là 1, nếu không nó bị xói mòn (được tạo thành 0)
Vì vậy tất cả các pixel gần ranh giới sẽ bị loại bỏ tùy thuộc vào kích thước của kernel Do đó, độ dày hoặc kích thước của đối tượng forground sẽ giảm hoặc đơn giản là vùng trắng trong ảnh sẽ giảm Nó rất hữu ích để loại bỏ các nhiễu nhỏ màu trắng, tách hai đối tượng được kết nối,… a) Ảnh gốc b) Sau khi thực hiện phép co
Hình 16 Ví dụ thực hiện phép co b) Phép giãn nở (Dilation)
Phép giãn nở ngược lại với phép co Với giãn nở, một phần tử pixel là '1' nếu ít nhất một pixel trong kernel là '1' Vì vậy, nó làm tăng vùng trắng trong hình ảnh hoặc kích thước của đối tượng foreground Thông thường, trong các trường hợp như nhiễu, phép co được theo sau bởi phép giãn nở Bởi vì, phép co loại bỏ nhiễu trắng, nhưng nó cũng thu nhỏ đối tượng của chúng ta Vì vậy, chúng ta cần mở rộng nó Do nhiễu đã biến mất nên nó sẽ không thể phục hồi, nhưng diện tích đối tượng lại tăng lên Nó cũng hữu ích trong việc nối các phần bị hỏng của một đối tượng a) Ảnh gốc b) Sau khi thực hiện phép giãn nở
Hình 17 Ví dụ thực hiện phép giãn nở c) Phép mở (Opening)
Phép mở là thao tác thực hiện phép co và sau đó thực hiện phép giãn nở Nó rất hữu ích trong việc loại bỏ nhiễu
Hình 18 Ví dụ thực hiện phép mở d) Phép đóng (Closing)
Phép đóng ngược lại với phép mở Nó thực hiện phép giãn nở tiếp sau đó là thực hiện phép co Nó rất hữu ích trong việc đóng các lỗ nhỏ bên trong các đối tượng hoặc các điểm đen nhỏ trên đối tượng
Hình 19 Ví dụ thực hiện phép đóng e) Thuật toán Top-hat
Top-hat là kết quả của phép trừ ảnh đầu vào cho ảnh sau khi thực hiện phép mở
Hình 20 Ví dụ thực hiện thuật toán Top-hat f) Thuật toán Black-hat
Black-hat là kết quả của phép trừ ảnh sau khi thực hiện phép đóng cho ảnh đầu vào
Hình 21 Ví dụ thực hiện thuật toán Black-hat
Tổng quan về thuật toán KNN (K – Nearest neighbor)
Thuật toán k-láng giềng gần nhất (KNN) là một thuật toán học máy có giám sát đơn giản, dễ thực hiện, có thể được sử dụng để giải quyết cả các vấn đề phân loại và hồi quy
Thuật toán KNN giả định rằng những thứ tương tự tồn tại gần nhau Nói cách khác, những thứ tương tự ở gần nhau
Hình 22 Các điểm dữ liệu tương tự thường tồn tại gần nhau
Lưu ý trong hình trên thì hầu hết các điểm dữ liệu tương tự gần nhau Thuật toán KNN cho rằng giả định này là đủ đúng để thuật toán có ích KNN nắm bắt ý tưởng về sự giống nhau (đôi khi được gọi là khoảng cách, hoặc độ tương đồng) bằng một số phép toán mà chúng ta có thể đã học khi tính toán khoảng cách giữa các điểm trên biểu đồ
Có nhiều cách khác để tính khoảng cách, và một cách có thể thích hợp hơn tùy thuộc vào vấn đề chúng ta đang giải quyết Tuy nhiên, khoảng cách đường thẳng (còn gọi là khoảng cách Euclide) là một lựa chọn phổ biến và quen thuộc
Thuật toán KNN được mô tả như sau:
• Load tập huấn luyện và tập kiểm thử
• Với mỗi giá trị cần phân lớp: o Tìm khoảng cách eclidian tới tất cả các giá trị trong tập huấn luyện o Lưu khoảng cách eclidian vào 1 list và sắp xếp lại o Chọn K giá trị đầu tiên o Gán một lớp cho giá trị cần phân lớp dựa trên lớp chiếm phần lớn trong các điểm đã chọn
• Đơn giản và dễ dàng để cài đặt
• Không cần xây dựng mô hình, điều chỉnh tham số và đưa ra các giả định bổ sung
• Thuật toán rất linh hoạt Nó có thể được sử dụng để phân loại, hồi quy và tìm kiếm
• Thuật toán trở nên chậm hơn đáng kể khi số lượng ví dụ tăng
3.3.3 Cách chọn giá trị K phù hợp Để chọn K phù hợp với dữ liệu, chúng ta chạy thuật toán KNN nhiều lần với các giá trị K khác nhau và chọn K làm giảm số lỗi chúng ta gặp phải trong khi duy trì khả năng thuật toán để đưa ra dự đoán chính xác khi dữ liệu được cung cấp chưa được thấy trước đó
4.1 Giải pháp đề xuất cho phát hiện biển số
Trong nội dung đồ án tốt nghiệp này, sinh viên sử dụng công nghệ phát hiện vật thể YOLO (đã được trình bày lý thuyết tại chương 3) để giải quyết bài toán phát hiện biển số
Quá trình phát triển giải pháp, sinh viên đã tham khảo, kế thừa và phát triển từ bộ công cụ Darkflow
Các bước của quá trình áp dụng giải pháp bao gồm:
• Chuẩn bị dữ liệu huấn luyện
• Huấn luyện mô hình (dựa trên thư viện darkflow)
4.1.1 Chuẩn bị dữ liệu huấn luyện
Sinh viên đã chuẩn bị bộ dữ liệu bao gồm 425 ảnh chụp biển số xe máy Việt Nam Ảnh được chụp ở bãi gửi xe vào thời gian ban ngày với 2 góc độ gần và xa như bên dưới
Hình 23 Dữ liệu biển số thu thập được
Sau đó để phục vụ cho việc dán nhãn dữ liệu vùng biển số, sinh viên đã tìm hiểu và sử dụng công cụ mã nguồn mở có tên là labelImg Công cụ này cho phép gán nhãn các ảnh và các thông tin bổ sung Quá trình gán nhãn dữ liệu được thực hiện thủ công trên các ảnh để thu
Phát triển và triển khai ứng dụng
Giải pháp đề xuất cho phát hiện biển số
Trong nội dung đồ án tốt nghiệp này, sinh viên sử dụng công nghệ phát hiện vật thể YOLO (đã được trình bày lý thuyết tại chương 3) để giải quyết bài toán phát hiện biển số
Quá trình phát triển giải pháp, sinh viên đã tham khảo, kế thừa và phát triển từ bộ công cụ Darkflow
Các bước của quá trình áp dụng giải pháp bao gồm:
• Chuẩn bị dữ liệu huấn luyện
• Huấn luyện mô hình (dựa trên thư viện darkflow)
4.1.1 Chuẩn bị dữ liệu huấn luyện
Sinh viên đã chuẩn bị bộ dữ liệu bao gồm 425 ảnh chụp biển số xe máy Việt Nam Ảnh được chụp ở bãi gửi xe vào thời gian ban ngày với 2 góc độ gần và xa như bên dưới
Hình 23 Dữ liệu biển số thu thập được
Sau đó để phục vụ cho việc dán nhãn dữ liệu vùng biển số, sinh viên đã tìm hiểu và sử dụng công cụ mã nguồn mở có tên là labelImg Công cụ này cho phép gán nhãn các ảnh và các thông tin bổ sung Quá trình gán nhãn dữ liệu được thực hiện thủ công trên các ảnh để thu
Chương 4 Phát triển và triển khai ứng dụng
Hình 24 Dán nhãn dữ liệu với LabelImg Đầu vào là ảnh có chứa biển số, tương ứng với mỗi ảnh đầu vào sẽ có 1 file đầu ra có dạng
“.xml” ghi toạ độ của bounding box của vật thể và thông tin của ảnh (tên ảnh, tên thư mục, chiều cao, chiều rộng,…)
Hình 25 Cấu trúc file xml
Sinh viên lấy 398 ảnh để làm dữ liệu huấn luyện và 27 ảnh để làm dữ liệu đánh giá
4.1.2 Huấn luyện mô hình a) Các bước thực hiện:
Sinh viên sử dụng thư viện Darkflow – một thư viện mã nguồn mở nhận diện vật thể với mô hình yolo được viết bằng ngôn ngữ Python Darkflow chuyển đổi Darknet (Thư viện gốc triển khai YOLO viết bằng ngôn ngữ C) để chạy trên Tensorflow (một thư viện phần mềm mã nguồn mở hỗ trợ, cung cấp khả năng tính toán số học để tính toán trong machine learning và deep learning) giúp người dùng không phải làm việc với ngôn ngữ C
Quá trình huấn luyện bao gồm các bước như sau:
Bước 1: Tiến hành triển khai thư viện Darkflow
Bước 2: Tiến hành huấn luyện dựa trên mô hình trước đó Việc huấn luyện dựa trên mô hình đã được huấn luyện trước gọi là transfer learning Với Transfer learning ta không cần phải huấn luyện mô hình từ đầu mà thay vào đó ta chỉ điều chỉnh các layer cuối của một mô hình đã huấn luyện trước đó để mô hình đó học thêm các đặc trưng của đối tượng mà ta muốn nhận diện Điều này giúp rút ngắn thời gian cho quá trình huấn luyện mô hình Hơn nữa để huấn luyện một mô hình từ đầu cũng tốn rất nhiều tài nguyên máy tính, yêu cầu máy tính phải có cấu hình cao
Tải mô hình tiny-yolo-voc (một mô hình đã được huấn luyện trước đó) và điều chỉnh tham số layer cuối của mô hình để phục vụ cho việc huấn luyện mô hình mới phát hiện biển số dựa trên mô hình này Mọi thông số của mô hình được lưu lại ở trong file thiết lập “tiny- yolo-voc.cfg” Sinh viên tiến hành sửa đổi file thiết lập đó:
• Ở layer [Convolution] trước layer cuối, tiến hành chỉnh số filters với công thức 𝑓𝑖𝑙𝑡𝑒𝑟𝑠 = (𝑆ố 𝑙ớ𝑝 + 5)𝑥5, do chỉ có một lớp nên thiết lập filters = 30
• Ở layer [Region] cuối, sửa đổi số lớp nhận biết về 1 với việc thay đổi classes = 1
Bước 3: Chạy chương trình huấn luyện với các ảnh và file tương ứng đã được gán nhãn dựa
Bước 4: Theo dõi quá trình huấn luyện với các giá trị loss và dừng huấn luyện khi các giá trị loss là hầu như không thay đổi
Bước 5: Đánh giá các checkpoint để tìm mô hình thích hợp nhất và đưa vào sử dụng b) Tiến hành huấn luyện với các dữ liệu đã được gán nhãn
Từ các dự liệu đã chuẩn bị ở bước trước, sử dụng Darkflow để đọc bộ dữ liệu bao gồm 398 ảnh và các tệp “xml” tương ứng gán nhãn của các ảnh đó và tiến hành huấn luyện dựa trên mô hình tiny-yolo-voc đã được huấn luyện từ trước
Dữ liệu sẽ được huấn luyện theo từng bước (steps) Mỗi lần sẽ đọc vào 8 dữ liệu (batch size
= 8) đã được gán nhãn và tính toán giá trị loss Khi bắt đầu huấn luyện mô hình giá trị loss sẽ từ từ giảm xuống Giá trị loss là giá trị mất mát (độ khác nhau) của bounding box thật sự của vật thể ở trong ảnh với bounding box do mô hình dự đoán trên tập huấn luyện Ta mong muốn giá trị này sẽ đạt nhỏ nhất có thể
Hình 26 Bắt đầu huấn luyện mô hình
Sau mỗi 500 step 1 checkpoint sẽ được lưu lại để sử dụng cho việc dự đoán sau này Hình
Hình 27 Hình ảnh thư mục ckpt chứa checkpoint
Trong quá trình triển khai, thông qua việc chạy chương tình trên tập dữ liệu đầu vào, chúng ta sẽ thu được các thông số về giá trị loss (Hình bên dưới) Thông qua sự thay đổi của giá trị loss này, chúng ta có thể đánh giá được sự ổn định và chính xác của mô hình huấn luyện
Hình 28 Giá trị training loss qua từng bước Ở hình vẽ ở trên, trục tung biểu diễn giá trị loss và trục hoành biểu diễn quá trình huấn luyện đang ở bước bao nhiêu Theo hình vẽ ta nhận thấy: khoảng từ step 800 thì giá trị loss là hầu như không đổi, sinh viên dừng việc huấn luyện và tiến hành kiểm tra, đánh giá mô hình tại các điểm checkpoint ứng với step 1000, 1500, 2000, 2500 Mục tiêu để tìm ra trong 4 mô hình này, mô hình nào có độ chính xác cao nhất
4.1.3 Đánh giá mô hình Để đánh giá mô hình xây dựng được, sinh viên đã sử dụng chỉ số mAP (đã được trình bày ở chương 3 mục 3.1.4) để đánh giá mô hình phát hiện vật thể Để tiến hành tính toán chỉ số mAP, trong đồ án, sinh viên đã tìm hiểu và kế thừa thư viện mã nguồn mở được cung cấp tại địa chỉ https://github.com/Cartucho/mAP Thư viện này cho phép tính toán và sử dụng chỉ số mAP để đánh giá mô hình a) Phát triển vả triển khai công cụ tính toán mAP
Sinh viên đã chuẩn bị đầu vào cho thư viện với bộ dữ liệu kiểm thử chuẩn, gồm 27 ảnh và tương ứng với mỗi ảnh là 1 tệp ghi lại vị trí bounding box thực sự (ground-truth) của đối tượng biển số xe ở trong ảnh và các tệp kết quả dự đoán bằng mô hình nhận được ở các checkpoint 1000, 1500, 2000, 2500 để so sánh b) Kết quả đánh giá mô hình ở checkpoint 1000
Hình 29 Giá trị cho mô hình sử dụng checkpoint 1000 c) Kết quả đánh giá mô hình ở checkpoint 1500
Hình 30 Giá trị cho mô hình sử dụng checkpoint 1500 d) Kết quả đánh giá mô hình ở checkpoint 2000
Hình 31 Giá trị cho mô hình sử dụng checkpoint 2000 e) Kết quả đánh giá mô hình ở checkpoint 2500
Hình 32 Giá trị cho mô hình sử dụng checkpoint 2500
4.1.4 Kết luận a) Xác định mô hình có độ chính xác cao nhất:
Căn cứ vào các kết quả tính toán được ở trên, sinh viên nhận thấy mô hình ở checkpoint
1500 có giá trị mAP cao nhất nên đã quyết định sử dụng mô hình (tương ứng với checkpoint này) để nhận diện biển số b) Vẽ lại hình ảnh cùng với khung biển số đã được xác định
Kết quả nhận được sau khi hệ thống dự đoán bằng mô hình này có được dưới dạng file json bao gồm thông tin sau: tên class, độ tin cậy, toạ độ điểm top left (góc trái trên cùng ô vuông), toạ độ điểm bottom right (góc phải dưới cùng ô vuông)
Hình 33 Ví dụ kết quả trả về dưới dạng json của thư viện darkflow
Từ toạ độ thu được, sinh viên sử dụng thư viện xử lý hình ảnh OpenCV để tiến hành thể hiện lại trên hình ảnh bằng cách vẽ một ô vuông cùng với ghi tên class và độ tin cậy để thuận tiện cho việc theo dõi Để thực hiện công việc này, sinh viên đã phát triển một module dựa trên openCV và Darkflow là “plate_system.py” Module này lấy đầu vào là video quay lấy biển số xe, mô phỏng camera được đặt ở điểm ra-vào của bãi gửi xe Sau đó, module sẽ sử dụng thư viện openCV để tách video thành từng frame ảnh và dựa vào darkflow để tiến hành dự đoán biển số xe
Hình 34 Ví dụ kết quả dự đoán nhận được bằng darkflow c) Kết quả thu được
Giải pháp đề xuất cho phân đoạn ký tự
Sau khi có được ảnh chính xác vùng biển số (loại bỏ các vùng ảnh dư thừa) từ mô-đun phát hiện biển số, hệ thống thực hiện phân đoạn ký tự thành từng dòng (biển số xe Việt Nam thường gồm 2 dòng) để sau đó thực hiện nhận dạng ký tự cho từng dòng biển số và ghép kết quả sau khi nhận dạng của mỗi dòng lại thành kết quả hoàn chỉnh Các bước chính của mô- đun phân đoạn ký tự như sau:
• Bước 1: Thực hiện tiền xử lý ảnh để giảm nhiễu, tăng chất lượng ảnh với các phương pháp như: chuyển đổi ảnh sang ảnh xám; tăng độ tương phản; làm mờ ảnh, nhị phân hoá ảnh
• Bước 2: Tìm đường viền có trong ảnh và với mỗi đường viền tìm được xét xem nó có khả năng là một ký tự không
• Bước 3: Tìm những ký tự có khả năng tạo thành một dòng
Tiền xử lý là một trong những công đoạn quan trọng ảnh hưởng trực tiếp đến kết quả của quá trình nhận dạng ký tự Đầu ra của quá trình tiền xử lý ảnh là một ảnh nhị phân Tiền xử lý ảnh được thực hiện như sau:
• Ảnh đầu vào đầu tiên được chuyển thành ảnh xám
• Tăng độ tương phản với phép cộng top-hat và phép trừ black-hat (đã giới thiệu ở chương 3 mục 3.2.4) để tăng cường độ sáng cho biển số
• Làm mờ ảnh với thuật toán Gaussian để giảm nhiễu trong ảnh
• Nhị phân hoá ảnh với ngưỡng thích ứng Để thực hiện việc này sinh viên đã phát triển module “preprocess.py” với đầu vào là ảnh màu vùng biển số nhận được ở module phát hiện biển số Sau đó module sẽ thực hiện công việc xử lý trên với các hàm được hỗ trợ bởi thư viện OpenCV như: GaussianBlur(), cvtColor(), … Đầu ra của module là ảnh nhị phân sau khi đã tiến hành hết các bước xử lý
Hình 36 Kết quả của quá trình tiền xử lý ảnh 4.2.2 Tìm khu vực có khả năng là ký tự Đầu tiên hệ thống sẽ tìm tất cả các khu vực có đường viền bao quanh trong ảnh OpenCV cung cấp hàm tìm đường viền findContour() với ảnh đầu vào là ảnh nhị phân Đầu ra là 1 danh sách các khu vực có đường viền ở trong ảnh Với mỗi khu vực có đường viền bao quanh sẽ xét xem có khả năng là ký tự không để loại bỏ các khu vực thừa Điều kiện để xét khu vực có đường viền bao quanh có khả năng là ký tự như sau:
• Diện tích khu vực bên trong đường viền > 120 pixel
• 0.3 < Tỉ lệ khung hình (rộng/dài) < 1
Hình 37 Kết quả lọc các khu vực có khả năng là ký tự
Hình trên cho thấy các khu vực không đủ điều kiện có khả năng là một ký tự đã bị loại bỏ Để thực hiện việc này sinh viên đã dựa trên thư viện OpenCV để viết module
“detect_character.py” Module giúp phát hiện vùng có khả năng là ký tự Với mỗi khu vực có khả năng là ký tự, hệ thống sẽ khởi tạo một đối tượng dựa trên lớp “PossibleCharacter” Đối tượng này sẽ lưu lại thông tin về chiều rộng, chiều cao, vị trí của đường viền cũng như trọng tâm, tỉ lệ cạnh,… để thuận tiện cho việc trích xuất khu vực ký tự
4.2.3 Tìm các ký tự có khả năng tạo thành một dòng
Với tất cả những vùng ký tự tìm được, hệ thống tiến hành tìm những vùng có khả năng là nằm trên cùng một dòng nếu thoả mãn điều kiện dưới đây:
• Đường thẳng nối trọng tâm của 2 vùng tạo với trục hoành 1 góc không quá một góc cho trước (12°) để đảm bảo tạo dòng nằm ngang
• Chiều dài, chiều rộng và diện tích giữa 2 vùng không có sự thay đổi quá lớn (để loại bỏ những vùng nhận nhầm là vùng có khả năng là ký tự nhưng không tương đồng với các vùng ký tự còn lại)
Hình 38 Kết quả tìm các ký tự có khả năng tạo thành 1 dòng
Dưới đây là diễn giải chi tiết của giải thuật áp dụng trong đồ án:
Input: Danh sách tất cả vùng là ký tự
Output: Danh sách các dòng biển
Thuật toán: § Tập T lưu danh sách tất cả các vùng là ký tự § Xét vùng ký tự (X1) trong T, so sánh với các vùng ký tự khác (X2) xem có khả năng tạo thành một dòng không (điều kiện đã nêu ở trên) Nếu thoả mãn điều kiện, thêm vùng ký tự được so sánh (X2) vào tập A (lưu danh sách ký tự tạo thành một dòng) § Sau khi so sánh X1 với tất cả các ký tự khác, thêm X1 vào tập A § Tiến hành loại bỏ các vùng trong tập A ra khỏi tập T để được tập B (danh sách các vùng là ký tự chưa tạo được thành dòng) § Thực hiện loại thuật toán với tập T mới là tập B có được ở bước trên