Skip to content
Mì AI Mì AI Mì AI

Học AI theo cách Mì ăn liền!

Mì AI Mì AI Mì AI

Học AI theo cách Mì ăn liền!

  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
Close

Search

  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
Mì AI Mì AI Mì AI

Học AI theo cách Mì ăn liền!

Mì AI Mì AI Mì AI

Học AI theo cách Mì ăn liền!

  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
Close

Search

  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
Computer VisionShare Data

[Nhận diện biển số xe] Chương 5 – Nhận diện biển số xe bằng WPOD và SVM

By Chủ tiệm Mì
December 5, 2019 5 Min Read
19

Xin chào cả nhà, Tết đến nơi rồi nên bận kinh khủng, tuần vừa qua mình tối mắt tối mũi thanh ra không thể ra bài kịp thời mong các bạn thông cảm nhé. Hôm nay chúng ta sẽ cùng nhau Nhận diện biển số xe bằng WPOD và SVM nhé!

Hôm trước mình có guide các bạn cách nhận diện biển số bằng WPOD và Tesseract OCR tại đây. Cách đó thì đơn giản nhưng sẽ bị phụ thuộc vào Tess nhiều, và nhiều bạn nói nó “tù”. Do vậy bây giờ chúng ta sẽ cùng nhau tự làm bằng OpenCV và dùng SVM để nhận ký tự nhé.

Nguồn: https://www.learnopencv.com/

Go go go!

Quên, mình share full bộ digit ở đây nhé: https://www.mediafire.com/file/3l3x7bd7rq91l5r/data_digit.zip/file

Phần 1 – Chuẩn bị nguyên vật liệu nào

Các bạn lại tạo thư mục như thường lệ với cái tên MiAI_LP_Detection_SVM đi, lưu cho nó máu. Sau khi tạo xong gõ lệnh git lấy source về thôi:

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

Lấy git xong thì cài cắm các loại thư viện cần thiết nào:

pip install -r setup.txt

Done một phát là nhảy sang bước sau được ngay. Còn có lỗi thì các bạn chịu khó đọc tý tiếng Anh xem bị sao nhé.

Phần 2 – Tìm hiểu qua về pipeline của bài toán

Khác với bài trước cứ phang thằng Tess vào là xong, lần này sẽ khác chút nhé, các bạn chú ý đọc kỹ để hiểu các bước làm thì lúc đọc code sẽ dễ dàng hơn.

  • Bước 0: Chuẩn bị dữ liệu chữ số và train một model SVM để nhận diện ký tự sau đó lưu ra file.
  • Bước 1: Đọc file ảnh đầu vào. Ảnh này gồm toàn cảnh chiếc xe chẳng hạn.
  • Bước 2: Dùng WPOD để tách biển số ra khỏi ảnh và thực hiện skew ảnh để dễ xử lý tiếp. Các bước này khá phức tạp nhưng chúng ta đã có “thánh” WPOD làm hộ hết rồi.
  • Bước 3: Thực hiện threshold để phân tách trắng đen và đồng thời khử nhiễu qua một chút.
  • Bước 4. Tìm các contour trong ảnh đã threshold và giữ lại các contour có khả năng là số.
  • Bước 5. Nhận diện các contour đó bằng SVM đã train ở bước 0 và in kết quả biển số ra màn mình thôi.

Rồi, xong lý thuyết, anh em Mì sẽ tiến hành thực hành luôn và ngay cho nóng nhé!

Phần 3 – Tiến hành viết code nhận diện biển số SVM

Do bài này có khá nhiều bước nên các bạn chịu khó theo dõi và đọc kỹ nhé. Mình sẽ cùng nhau làm từng bước một.

Bước 1: Train model SVM

Các bạn chú ý trong thư mục data sẽ có nhiều thư mục: 0,1,2,3…. Đó là các thư mục chứa các ảnh các chữ số, kí tự và được đánh số theo thứ tự mã ASCII. Bên trong chứa toàn ảnh là ảnh và chúng ta sẽ dùng ảnh này để train SVM.

Bây giờ các bạn mở file trainSVM.py và đọc code. File này sẽ gồm các phần việc sau:

  • Load dữ liệu trong thư mục data
  • Train model SVM
  • Save model SVM ra file.

Mình đã comment đầy đủ, các bạn đọc nhé!

nhận diện biển số

Bước 2. Xử lý cái biến số và tìm các contour có khả năng là số

Bây giờ chúng ta đọc tiếp file read_plate.py, chúng ta sẽ thấy mình thực hiện load ảnh, tách biển số bằng WPOD và sau đó là threshold và khử nhiễu. Cuối cùng tìm các contour là số và hiển thị lên màn hình để kiểm tra.

nhận diện biển số

Về phần tìm contour là số thì các bạn chú ý cách làm là: duyệt hết các contour mà kiểm tra các bounding box của các contour đó, nếu có 1 tỷ lệ nhất định giữa width và height thì nó là số. Ở dây mình đang để là ratio này nằm trong khoảng 1.5 < ratio < 3.5. Ngoài ra mình chỉ chọn các contour có chiều cao từ 60% chiều cao biển số trở lên.

Và đây là các contour mình tìm được từ biển số.

biển số

Chi tiết các bạn đọc mã nguồn nhé.

Bước 3. Duyệt qua các contour và predict biển số

Bây giờ với các contour nói trên, chúng ta trích xuất ra và thực hiện đưa vào model SVM để predict xem số đó là số nào. Cuối cùng ghép cả chuỗi lại sẽ có được giá trị biển số.

Các bạn xem tiếp đoạn mã nguồn sau nhé.

Phần 4 – Chạy file và tận hưởng kết quả nhận diện biển số

Đầu tiên, nếu bạn muốn train lại thì chạy file trainSVM.py còn nếu không thì thôi, next luôn!

Bạn chạy file read_plate.py và sau đó tận hưởng thành quả, kết quả cuối cùng sẽ là hình ảnh biển số in lên ảnh nhé!

nhận diện biển số SVM

Okie, vậy là chúng ta đã cùng nhau tìm hiểu cách nhận diện biển số thành công rồi. Còn rất nhiều cách nhận diện khác nhau nữa như CTC, YOLO… nhưng tạm thời nếu bạn detect và skew tốt thì SVM là khá ổn rồi nhé. Xin tạm biệt các bạn tai đây và hẹn gặp lại trong các bài tiếp theo nhé!

Chú ý: Bài này mình làm sample với biển dài. Biển vuông các bạn chia đôi ra là xong nhé. Chúc các bạn thành công!

Hãy join cùng cộng đồng Mì AI nhé!

Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: https://miai.vn/
Youtube: http://bit.ly/miaiyoutube

Tags:

aidarknetdeep learninglicense plate detectlicense plate recognitionLP detectLP recognizemachine learningnhận diện biển sốobject detectionpythonSVMtrain
Author

Chủ tiệm Mì

Follow Me
Other Articles
Previous

[Nhận diện biển số xe] Chương 4 – Nhận diện biển số xe bằng WPOD và Tesseract OCR

Next

Máy tính cũng biết nghe và cảm nhận âm nhạc với AI

19 Comments
  1. Thành Long says:
    June 11, 2020 at 10:43 am

    Chào anh, anh có thể hướng dẫn chi tiết hơn về phần biển số vuông được không ạ. Em cảm ơn!

    Reply
    1. Nguyễn Chiến Thắng says:
      June 11, 2020 at 11:40 am

      Em post lên group cụ thể nhu cầu nhé, xong ta thảo luận: Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup

      Reply
  2. Nguyễn Đạt says:
    January 9, 2021 at 2:14 am

    Chào anh, anh cho em hỏi là số lượng chiều để phân loại kí tự trong project này là bao nhiêu và dựa vào đâu để xác định ạ?

    Reply
    1. Nguyễn Chiến Thắng says:
      January 15, 2021 at 2:59 pm

      Cụ thể như nào em post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup nhé! A chưa hiểu ý em lắm!

      Reply
  3. Tiên says:
    February 24, 2021 at 8:51 am

    Dạ anh ơi, mỗi lần mình muốn train thêm dữ liệu mới, là mình cắt ký tự từ biển số rồi bỏ vào folder phù hợp( ví dụ ký tự 0 bỏ vào folder 0) rồi train. Em thấy thế hơi bất lợi. Có cách nào mà khi mình chạy nó tự cắt và bỏ vào folder phù hợp rồi train luôn không ạ. Em cảm ơn nhiều ạ

    Reply
    1. Lnv says:
      March 24, 2021 at 12:46 pm

      Mình thấy cách đấy không bất lợi lắm. Vì các ảnh phải kèm label của nó. Ảnh toàn số 0 để trong folder 0. Khi lấy label thì chỉ cần lấy tên folder chứa ảnh đó là xong. Và cũng có thể đảm bảo đc số ảnh mỗi label là như nhau.

      Reply
  4. DP says:
    October 23, 2021 at 4:08 pm

    cho em hỏi là soure này có thể nhận diện biển số xe máy được không?

    Reply
    1. Nguyễn Chiến Thắng says:
      October 25, 2021 at 2:14 pm

      Được em nhé. Em cứ thử xem!
      Cần gì post lên Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup trao đổi cho vui nhé!

      Reply
  5. Dương Nguyễn says:
    December 17, 2021 at 11:50 am

    Em không biết cách nào để cưa đôi dùng, a có chỉ qua cho e được không ạ

    Reply
    1. Dương Nguyễn says:
      December 17, 2021 at 11:52 am

      cưa đôi dòng với xe biển số xuông, e lộn

      Reply
    2. Nguyễn Chiến Thắng says:
      December 21, 2021 at 10:19 am

      Em post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup thảo luận cho tiện nhé!

      Reply
  6. jkhung says:
    October 7, 2022 at 2:06 pm

    Cho mình hỏi source code trên git chạy với python bản bao nhiêu, mình chạy bản 3.7.6 bị lỗi

    Reply
    1. Nguyễn Chiến Thắng says:
      November 4, 2022 at 2:22 pm

      Lỗi như nào bạn ppost lên https://facebook.com/groups/miaigroup trao đổi cho tiện nhé!

      Reply
  7. Nhut says:
    November 18, 2022 at 9:40 am

    Anh có thể hướng dẫn cụ thể nhận dạng biển số vuông dc không ạ

    Reply
    1. Nguyễn Chiến Thắng says:
      January 16, 2023 at 5:38 pm

      Bạn post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup cho tiện trao đổi nhé!

      Reply
  8. nnnhut says:
    November 18, 2022 at 11:33 am

    làm sao để chia đôi bsx vuông vậy anh. giúp em với ạ

    Reply
    1. Nguyễn Chiến Thắng says:
      January 16, 2023 at 5:37 pm

      Bạn post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup cho tiện trao đổi nhé!

      Reply
  9. Huy says:
    October 8, 2024 at 4:58 pm

    anh ơi sao ảnh không xem được vậy ạ

    Reply
    1. Nguyễn Chiến Thắng says:
      October 15, 2024 at 10:17 am

      Chắc lâu quá nó mất link. Em cần post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup nhé!

      Reply
Show Comments

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Tìm hiểu và cài đặt OpenClaw – trợ lý ảo 24/7 thông minh đa chức năng – Mì Ai
  • Dùng thử Pika – robot học Tiếng Anh cho trẻ cực đỉnh – Mì AI
  • TopView.AI 4.0 – nền tảng tạo AI video cộng tác bá đạo – Mì AI
  • Storm MCP – giải pháp nhanh gọn nhẹ để có MCP Server trong 5 phút – Mì AI
  • VoxCPM thử voice cloning với checkpoint finetune Tiếng Việt – Mì AI

Recent Comments

  1. Chủ tiệm Mì on Thử xây dựng hệ thống Agentic AI với LangGraph – Mì AI
  2. Nguyễn Chiến Thắng on [Nhận diện biển số xe] Chương 3 – Phát hiện biển số bằng OpenCV thuần
  3. Trần Sơn Dương on [Nhận diện biển số xe] Chương 3 – Phát hiện biển số bằng OpenCV thuần
  4. Salomon on [CV] Thử làm model cảnh báo ngủ gật cho tài xế oto bằng Dlib và Resnet
  5. khang on Xây dựng hệ thống nhận diện thủ ngữ – ngôn ngữ ký hiệu tay – để giao tiếp với người khuyết tật

Categories

  • Basic
  • Computer Vision
  • Data Science – Data Analysis
  • Generative AI
  • MÌ ÚP
  • Natural Language Processing
  • RNN-LSTM-GRU
  • Share Data

Là người đi trước, hãy biết đưa tay lại phía sau.

Nguyễn Chiến Thắng
Cảm ơn các bạn đã ủng hộ Mì AI!