Hello và nice weekend nhé anh em Mì AI. Hôm nay chúng ta sẽ cùng nhau tìm hiểu cách nhận diện biển số xe bằng WPOD-NET và Tesseract OCR nhé.
Trong 03 chương trước mình đã guide anh em 03 cách phát hiện biển số trong ảnh, đó là:
- Phát hiện bằng YOLO, xem tại đây
- Phát hiện bằng WPOD-NET, xem tại đây
- Phát hiện bằng OpenCV thuần, xem tại đây.
Bạn nào chưa xem các bài trước thì xem lại nhé. Còn hôm nay mình sẽ sử dụng WPOD-NET để phát hiện biển số. Sau đó qua một vài bước xử lý mình sẽ dùng tiếp Tesseract OCR để nhận diện chữ số trên biển nhé. Mình cũng nói luôn là có nhiều cách để nhận diện ký tự trên biển, mình sẽ lần lượt ra các bài tiếp theo nhé.
Okie vòng vo tam quốc đủ rồi, bắt đầu nào!
Phần 1 – Chuẩn bị nguyên vật liệu
Các bạn tạo thư mục MiAI_LP_Recognition_1 để chứa nội dung bài này nhé. Sau đó các bạn gõ lệnh sau để lấy source về:
git clone https://github.com/thangnch/MiAI_LP_Recognition .
Sau khi đợi trong giây lát, các bạn sẽ thấy source ùa về hối hả. Bây giờ cài đặt các thư viện cần thiết bằng lệnh
pip install -r setup.txt
Okie rồi, các món cài đặt cho python đã xong. Bây giờ sang bước 2.
Phần 2 – Cài đặt thư viện Tesseract OCR
Riêng món này thì cài đặt khá là khác nhau đối với từng hệ điều hành (Window, Linux,Mac…). Các bạn làm theo chính xác các bước cài đặt trong Phần 1 của bài về Tesseract tại link này: https://miai.vn/2019/08/22/ocr-nhan-dang-van-ban-tieng-viet-voi-tesseract-ocr/ nhé. Mình nhấn mạnh là chỉ cần làm Phần 1 thôi.
Phần 3 – Các bước tiến hành của bài toán
Vâng như thường lệ để các bạn hiểu code nhanh chóng thì mình sẽ guide qua về pipeline của bài này:
- Bước 1. Chúng ta sẽ load ảnh từ file ảnh png hoặc jpg tùy ý.
- Bước 2. Sử dụng pretrain WPOD để tách biển số ra khỏi ảnh gốc vì chúng ta sẽ tập trung xử lý cái ảnh biển số này.
- Bước 3. Chúng ta sẽ tiền xử lý ảnh biển số trước khi đưa cho Tesseract nhận diện gồm 2 thao tác: chuyển về ảnh xám và tách biệt nền và chữ bằng threshold.
- Bước 4. Đưa vào Tesseract nhận diện với tham số về language (ngôn ngữ) và phương thức xử lý (psm) cho phù hợp. Ở đây mình chọn psm = 7 là xử lý tìm 1 dòng text.
Tại bước 3 mình có 1 lưu ý, hiện tại mình chỉ viết code xử lý biển dài, nếu bạn gặp biển vuông thì bạn tách thành 2 phần trên và dưới sau đó cũng đưa vào Tesseract như bình thường nhé (đây là hướng mình để cho các bạn thực hành luôn).
Phần 4 – Code chương trình nhận diện biển số
Well, cũng tàm tạm rồi, các bạn mở source đi và tìm đến file read_plate.py. Source file này cũng khá là quen thuộc nếu bạn đã đọc các bài trước. Tuy nhiên mình đã thêm vào vài đoạn code và cũng đã comment khá đầy đủ. Các bạn đọc Phần 3 bên trên và dò code sẽ thấy rất đơn giản.
Phần 5 – Chạy thử chương trình
Bây giờ các bạn hãy chạy thử chương trình bằng lệnh
python read_plate.py
Nếu mọi thứ được cài đặt đúng và đủ, các bạn sẽ thấy các bước xử lý của chương trình hiện ra đầy đủ. Kết quả là biển số sẽ được viết lên trên ảnh luôn.
OK, như vậy qua bài này bước đầu các bạn đã biết cách phát hiện và nhận diện một biển số đơn giản. Còn nhiều cách khác để giải bài toán này, mình sẽ lần lượt giới thiệu và chia sẻ cùng các bạn trong các bài sau. Hẹn gặp lại các bạn nhé.
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
Anh ơi em đã làm theo hướng dẫn mà gặp lỗi ạ
Traceback (most recent call last):
File “C:/Users/Le Thi Tuyet/Desktop/an toan giao thong/MiAI_LP_Recognition-master/read_plate.py”, line 38, in
_ , LpImg, lp_type = detect_lp(wpod_net, im2single(Ivehicle), bound_dim, lp_threshold=0.5)
File “C:\Users\Le Thi Tuyet\Desktop\an toan giao thong\MiAI_LP_Recognition-master\lib_detection.py”, line 228, in detect_lp
L, TLp, lp_type = reconstruct(I, Iresized, Yr, lp_threshold)
File “C:\Users\Le Thi Tuyet\Desktop\an toan giao thong\MiAI_LP_Recognition-master\lib_detection.py”, line 187, in reconstruct
out_size, lp_type = (two_lines, 2) if ((final_labels_frontal[0].wh()[0] / final_labels_frontal[0].wh()[1]) < 1.7) else (one_line, 1)
IndexError: list index out of range
Em post lên group chụp hình cho tiện nhé
Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup
Cái này biển xe máy có nhận diện được không anh nhỉ
Ngon em ơi!
Bạn cho mình hỏi 2 câu nhé:
1. khi nhận diện biển số xe máy thì chỉ hiện lên ảnh biển số, không hiện dãy chữ đỏ (đã nhận dạng thành text).
2. Code này có nhận dạng được biển số trên video, camera không ạ?
Cám ơn bạn nhiều.
Bạn post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup cho tiện trả lời nhé!
A cho e hỏi cách build code tensorflow ạ. Cần cài thêm những gì cho máy(bản cpu). Em cảm ơn
Cho em hỏi là ứng dụng này chạy trên phần mềm nào vậy ạ
Pycharm đó em. 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.
Anh cho em hỏi làm sao để nhận dạng biển số dọc ạ
Em post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup trao đổi cho tiện nhé!
Em chạy trên VScode thì nó báo lỗi
No such file or directory: ‘wpod-net_update1.json’
mà trong thư mục đã có wpod-net_update1.json rồi thì lỗi như vậy phải giải quyết thế nào ạ
Em post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup trao đổi cho dễ nha!