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 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!
Phần 1 – 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-python 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.
Phần 2- 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 reszie 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 (chi tiết các bạn đọc tại đây)
- Bước 4. Tìm các contour có trong hình (các bạn cứ hình dùng là các đường bao kín quanh các vùng trắng trong hình). Chi tiết về lý thuyết contour thì đã có OpenCV tài trợ tại đây.
- 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é (Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup ).
Phần 3 – Tiến hà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.
Phần 4 – 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é!
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
Hi a, hiện tại e đang làm theo code của a và lúc gõ command line
pip install -r setup.txt
thì thấy báo lỗi ” Could not find a version that satisfies the requirement opencv-python==4.1.2.30 (from -r setup.txt (line 1)) (from versions: )
No matching distribution found for opencv-python==4.1.2.30 (from -r setup.txt (line 1)”, a giúp e sửa lại khúc này với. Cám ơn anh
Em chụp màn hình xong post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup cho tiện xem và phản hồi nhé. Thanks em.
#MìAI
Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup
Website: https://miai.vn
Youtube: http://bit.ly/miaiyoutube
Anh ơi cho em hỏi khi em test lại ảnh khác thì bị sai!!!!!
Em chụp ảnh post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup nhé!
Anh Thắng ơi, anh xóa thư mục MiAI_LP_Detection_3 trên github rồi ah? Em tìm lại code để tham khảo mà không còn nữa. Kể cả trên youtube cũng vậy. Hix
Vẫn nguyên mà em: https://github.com/thangnch/MiAI_LP_Detection_3
Anh Thắng ơi, em có đọc 1 paper như sau:
https://viblo.asia/p/detect-ky-tu-trong-hinh-anh-Az45bnQQ5xY#_2-swt-voi-python-1
Tuy nhiên có chỗ em chưa hiểu như sau:
ở mục: 2. SWT với python
Để sử dụng swt với python ta cần thực hiện 1 số bước như sau:
clone repo https://github.com/liuliu/ccv
cài swig: sudo apt-get install swig
tạo file ccvwrapper.i trong thư mục ccv/lib:
Em chưa hiểu các bước này làm như thế nào và để làm gì.
Anh có thể hướng dẫn hoặc giải thích giúp em được không?
Cảm ơn anh nhé
Em post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup trao đổi cho dễ nhé. Trên này khó vì ko up hình được.
sao em đổi thành hình xe khác nó không lấy bảng số anh ơi hình thì nó lấy logo hình thì nó lấy góc đèn xe
Với dạng OpenCV này thì phải tuỳ bài toán, tuỳ điều kiện bãi xe em căn chỉnh cho phù hợp. Thay đổi điều kiện thì phỉa căn lại em ạ.
anh ơi sao em cài nó ra lỗi No module named ‘cv2’ vậy ạ
Em post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup cho tiện trao đổi nhé!
anh ơi file detect_lp.py ở đâu đấy ạ
Ủa trên Github có mà em!