Lập trình

Phát Hiện Biển Số Bằng OpenCV: Tùy Biến Theo Ý Muốn

Huy Erick

Xin chào anh em Mì Ai! Một tuần mới lại đến, chúc anh em nhiều hứng khởi và thành công nhé. Trong 2 chương trước tại đây và tại đây mình đã guide anh em...

Xin chào anh em Mì Ai! Một tuần mới lại đến, chúc anh em nhiều hứng khởi và thành công nhé. Trong 2 chương trước tại đâytại đây mình đã guide anh em cách sử dụng các pretrain model để nhận diện biển số. Cách này có lợi thế là nhanh gọn tuy nhiên trong các trường hợp cụ thể, môi trường cụ thể về ánh sáng, kích thước biển số trong hình… thì lại có thể (mình nói có thể thôi nhé) nhận diện không đúng với ý đồ của các bạn. Do đó, hôm nay mình xin giới thiệu thêm một phương pháp phát hiện biển số bằng OpenCV thuần.

Với cách này các bạn sẽ phải làm nhiều hơn nhưng lại có thể tùy biến thoải mái theo ý mình cho phù hợp.

Rồi, chúng ta bắt đầu!

Chuẩn Bị Nguyên Vật Liệu Nấu Mì

Các bạn tạo thư mục MiAI_LP_Detection_3 để lưu các thứ liên quan đến bài này. Sau đó chạy lệnh git để lấy project mình đã viết về:

git clone https://github.com/thangnch/MiAI_LP_Detection_3 .

Done! Đợi chút là “git cờ lôn” về luôn. Bây giờ các bạn tiến hành cài đặt các thư viện cần thiết bằng lệnh:

pip install -r setup.txt

Các thư viện sau sẽ được tiến hành cài đặt tự động:

  • OpenCV
  • imutils
  • numpy

Các bạn đợi một chút để các thư viện cài đặt xong là có thể move sang bước sau.

Tư Tưởng Thuật Toán Phát Hiện Biển Số

Tuy là mì ăn liền nhưng chúng ta sẽ cùng nhau đảo qua lý thuyết tý nhé. Bài này cơ bản sẽ làm các bước như sau:

  • 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. Các bạn 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. Chúng ta tùy vào hiện trường thực tế mà tinh chỉnh cho phù hợp.
  • Bước 2: Load ảnh và thực hiện resize 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ằng Canny.
  • Bước 4: Tìm các contour có trong hình.
  • Bước 5: Với các contour tìm được ở bước 4, chúng ta lặp qua 1 lượt và chọn contour 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 contour nói trên và trích hình ảnh biển số ra khỏi hình ảnh cả xe.

Vậy thôi! Mình đã cố gắng diễn giải để sao cho dễ hiểu nhất, nếu vẫn còn lăn tăn, các bạn cứ post lên group Mì AI để trao đổi thêm nhé.

Viết Code Phát Hiện Biển Số

Với tư tưởng thuật toán nói trên, các bạn mở file detect_lp.py ra để xem code nhé. Mình đã comment đầy đủ từng đoạn code, các bạn xem kỹ lý thuyết ở trên là sẽ hiểu ngay code của chương trình.

Chạy Thử Chương Trình

Các bạn chạy file detect_lp.py, chú ý đổi đường dẫn file ảnh ở dòng cv2.imread cho phù hợp nhé.

Nếu mọi thứ okie, các bạn sẽ thấy màn hình hiển thị như sau:

Well, như vậy sau 3 bài về phát hiện biển số, các bạn đã biết cách phát hiện biển số trong ảnh bằng các pretrain YOLO, WPOD-NET và bằng OpenCV thuần. Trong các bài tiếp theo chúng ta sẽ đi tìm hiểu các cách khác nhau để nhận diện các kí tự trên biển số nhé. Hẹn gặp lại các bạn!

Hãy gia nhập cùng Mì Ai nhé!

1