OCR tiếng Việt — Khoảng cách giữa demo và thực tế
Hầu hết demo OCR đều chạy trên ảnh chụp sạch, đủ sáng, chữ in rõ ràng. Kết quả luôn ấn tượng: accuracy 98–99%, xử lý nhanh, ít lỗi. Nhưng khi đem vào dự án thực tế tại Việt Nam — xử lý hóa đơn viết tay, scan hồ sơ bệnh viện, đọc biểu mẫu hải quan — accuracy thường giảm xuống 70–85% và đầy lỗi khó debug.
Bài viết này chia sẻ những thách thức thực tế mà chúng tôi gặp khi triển khai OCR tiếng Việt cho doanh nghiệp, cùng các phương pháp xử lý đã áp dụng.
Thách thức 1 — Dấu tiếng Việt
Tiếng Việt có 12 nguyên âm đơn và nhiều tổ hợp dấu thanh phức tạp. Sự khác biệt giữa "a", "ă", "â", "à", "ả", "ã", "á", "ạ" rất nhỏ khi hiển thị ở font size thấp hoặc ảnh scan chất lượng kém. Đây là nguyên nhân hàng đầu gây lỗi OCR tiếng Việt.
Giải pháp: Chúng tôi xây post-processing layer sử dụng ngữ cảnh. Ví dụ, nếu OCR đọc "ngươi" nhưng trong context câu, từ đúng là "người", hệ thống tự sửa dựa trên từ điển và language model. Approach này tăng accuracy trung bình 8–12% trên toàn bộ tập dữ liệu.
Thách thức 2 — Chữ viết tay
Chữ viết tay tiếng Việt đặc biệt khó vì mỗi người có phong cách viết khác nhau, và nhiều người Việt có thói quen viết tắt hoặc nối chữ. Thêm vào đó, dấu thanh thường bị viết lệch vị trí — dấu sắc của chữ "á" có thể nằm gần chữ "n" bên cạnh.
Giải pháp: Train model riêng cho từng loại tài liệu. Một model OCR tổng quát sẽ không bao giờ đạt accuracy cao trên chữ viết tay. Chúng tôi thu thập 3.000–5.000 mẫu viết tay từ ngữ cảnh cụ thể (đơn thuốc bệnh viện, phiếu kiểm hàng, biên lai viết tay) và fine-tune model trên tập này. Accuracy tăng từ 72% lên 91% sau fine-tuning.
Thách thức 3 — Scan mờ và ảnh chất lượng thấp
Trong thực tế, tài liệu thường được scan bằng máy cũ, chụp bằng điện thoại trong điều kiện ánh sáng kém, hoặc là bản photocopy của bản photocopy. Các vấn đề phổ biến:
- Skew (lệch góc): Tài liệu đặt lệch trên máy scan, chữ bị nghiêng 5–15 độ.
- Blur (mờ): Camera lắc tay hoặc focus sai, chữ nhòe không rõ biên.
- Low contrast: Mực nhạt trên giấy vàng, hoặc giấy bị ẩm mốc làm mất nét chữ.
- Noise: Bụi trên kính scan, vết bẩn trên tài liệu, hoặc watermark chồng lên chữ.
Giải pháp: Xây pre-processing pipeline gồm bốn bước:
- Deskew: Phát hiện góc nghiêng bằng Hough Line Transform và xoay ảnh về thẳng.
- Denoising: Sử dụng bilateral filter hoặc Non-Local Means để khử nhiễu mà giữ biên chữ sắc nét.
- Binarization: Chuyển ảnh về đen trắng bằng adaptive thresholding (Otsu hoặc Sauvola), đặc biệt hiệu quả với ảnh không đều sáng.
- Enhancement: Tăng contrast và sharpness cho vùng chứa text, phát hiện bằng text detection model.
Pipeline này tăng accuracy OCR trung bình 15–20% trên tập ảnh chất lượng thấp so với chạy OCR trực tiếp trên ảnh gốc.
Thách thức 4 — Biểu mẫu lệch format
Biểu mẫu hành chính tại Việt Nam có hàng trăm format khác nhau, thay đổi theo từng tỉnh, từng cơ quan, từng năm. Một hệ thống OCR cần xử lý hóa đơn VAT có thể gặp 20+ template khác nhau chỉ riêng cho mục "Tên đơn vị."
Giải pháp: Kết hợp template matching và key-value extraction:
- Bước 1: Phân loại template tài liệu bằng layout analysis model. Xác định tài liệu thuộc dạng nào trong thư viện template đã biết.
- Bước 2: Nếu template đã biết, sử dụng vùng ROI (Region of Interest) được định nghĩa sẵn để extract từng trường.
- Bước 3: Nếu template chưa biết, sử dụng key-value extraction model để tìm cặp label-value dựa trên spatial relationship giữa các text block.
Approach này xử lý được cả template mới mà không cần retrain model, chỉ cần bổ sung ROI definition.
Thách thức 5 — Validation dữ liệu sau OCR
OCR không bao giờ hoàn hảo. Câu hỏi quan trọng là: làm thế nào biết kết quả nào đúng và kết quả nào cần kiểm tra lại?
Giải pháp: Xây validation layer với nhiều tầng kiểm tra:
- Format validation: Số CMND/CCCD phải đúng 9 hoặc 12 chữ số. Mã số thuế phải đúng 10 hoặc 13 chữ số. Ngày tháng phải hợp lệ.
- Cross-field validation: Tổng tiền phải bằng tổng các mục con. Ngày phát hành không được sau ngày hiện tại.
- Dictionary validation: Tên tỉnh/thành phải nằm trong danh sách 63 tỉnh thành. Tên ngân hàng phải nằm trong danh sách đã biết.
- Confidence-based routing: Field nào có character-level confidence dưới 0.8, đánh dấu cần human review.
Kết hợp bốn tầng validation này, chúng tôi giảm được 60–70% khối lượng human review mà vẫn đảm bảo accuracy cuối cùng trên 99%.
Benchmark thực tế
Dưới đây là kết quả accuracy trên các loại tài liệu tiếng Việt phổ biến, so sánh giữa chạy OCR thuần và pipeline đầy đủ của Base Coding AI:
| Loại tài liệu | OCR thuần | + Pre-processing | + Post-processing | + Validation | |---|---|---|---|---| | Hóa đơn VAT (in) | 89% | 94% | 97% | 99.2% | | Đơn thuốc (viết tay) | 62% | 75% | 83% | 91% | | CMND/CCCD (scan) | 85% | 92% | 96% | 98.5% | | Biểu mẫu hải quan | 71% | 84% | 90% | 95% |
Kết luận
OCR tiếng Việt trong thực tế rất khác với demo trên ảnh sạch. Để đạt accuracy đủ dùng cho production, cần đầu tư vào pre-processing, post-processing với language model, validation đa tầng, và fine-tuning model cho từng loại tài liệu cụ thể. Không có giải pháp one-size-fits-all — mỗi doanh nghiệp cần pipeline được thiết kế riêng cho loại tài liệu của họ.
Cần triển khai OCR tiếng Việt cho doanh nghiệp? Liên hệ Base Coding AI để nhận đánh giá miễn phí trên tập tài liệu thực tế của bạn.

