[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

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à:

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.

Tesseract OCR
Nguồn: https://miro.medium.com

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.

nhận diện biển số

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.

nhận diện biển số

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

Related Post

14 Replies to “[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”

  1. 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

      1. 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.

  2. 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

  3. 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 ạ

Leave a Reply

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