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ụ:
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
1 |
cv::bilateralFilter(mat, matBlur, 11, 75, 75); |
Crop ký tự vé số, có thể chọn theo tỉ lệ cũng được
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.
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.