Nhận dạng vé số bằng opencv

Bài này viết theo câu hỏi của 1 bạn trong group thị giác máy tính. Nhận dạng vé số bằng opencv là bài toán thực tế cũng khá thú vị và cũng tương đối dễ. Bài này tóm tắt lại cách nhận dạng vé số bằng opencv (nhận dạng ký tự) đã viết trong group.

Cũng như những bài toán nhận dạng khác, chúng ta làm 2 bước:
– Xử lý: loại bỏ nhiễu, trích xuất vùng cần nhận dạng
– Nhận dạng: dùng 1 mô hình Machine Learning nào đó để phân loại ký tự & trả về kết quả

Bài viết này sử dụng chính hình ảnh đã post trong group để minh họa, đó là vé số Tiền Giang. Các bạn có thể save hình để làm ví dụ:

Đọc vé số bằng opencv

Xác định vấn đề

Nhìn hình thấy được rằng phần số đã bị thêm vào các dòng chữ nhỏ gây ra nhiễu, do đó phải loại bỏ nhiễu trước khi nhận dạng. Trong các phương pháp làm mịn ảnh, Bilateral Filtering là phương pháp phù hợp nhất vì nó không làm mất biên. Nhược điểm là phương pháp này xử lý chậm hơn các phương pháp khác.

Sau khi khử nhiễu, tiến hành crop ký tự cần thiết nằm bên dưới ảnh. Tiến hành tách ký tự dùng HSV rồi dùng Tesseract để nhận dạng.

Phương pháp thực hiện

Sử dụng hàm bên dưới để cho ra kết quả blur

veso_blur

Crop ký tự vé số, có thể chọn theo tỉ lệ cũng được
veso_low_bright

veso_blur_crop

Sau đó dùng tool filter color để tìm ra giá trị màu của ký tự vé số. Bước này các bạn phải làm thủ công để tìm đúng màu, sau đó lấy giá trị HSV để dùng lại.
veso_filter_color

Cuối cùng dùng Tesseract để đọc ký tự. Chỉ cần bỏ ảnh vào chung folder với chương trình là chương trình sẽ load lên và đọc. Kết quả là 593772 như mong đợi.
37786593_10214179857784056_9075745064474378240_o

Leave a Reply