Doanh nghiệp muốn thêm OCR (nhận dạng ký tự quang học) vào quy trình xử lý tài liệu, dù để tự động hóa RPA hay để nạp dữ liệu cho chatbot dạng RAG, thường vấp phải hai rào cản giống nhau.
Rào cản đầu tiên là chi phí GPU. Các mô hình OCR đa ngôn ngữ hiện đại, nhất là các mô hình vision-language cỡ lớn, cần chạy trên GPU mới đạt tốc độ dùng được. Máy chủ GPU trên cloud tính phí theo giờ cao hơn nhiều lần so với máy chủ CPU tương đương, trong khi tải xử lý tài liệu vốn không đều, nên việc chuẩn bị hạ tầng cho lúc cao điểm khiến phần lớn thời gian tài nguyên bị bỏ phí.
Rào cản thứ hai là rủi ro dữ liệu. Với các tổ chức tài chính, y tế, hoặc bất kỳ doanh nghiệp nào phải tuân thủ Luật bảo vệ thông tin cá nhân Nhật Bản (APPI) hoặc GDPR, việc gửi tài liệu chứa dữ liệu cá nhân lên một cloud API bên ngoài thường không phải là lựa chọn được phép. Mô hình tính phí theo lượt gọi API cũng khiến chi phí khó dự đoán khi khối lượng tài liệu tăng lên.
Giải pháp thường thấy là dùng engine CPU nhẹ như Tesseract, giải quyết được bài toán chi phí và bảo mật, nhưng lại yếu về độ chính xác với bất kỳ thứ gì ngoài ảnh scan sạch, đủ sáng, và gặp khó với các ngôn ngữ không dùng chữ Latin.
Chúng tôi thực sự đã xây dựng gì, và không tuyên bố làm được gì
VAON cần một microservice OCR đọc được các mã định danh (số serial, IMEI, mã model) từ ảnh chụp nhãn sản phẩm trong điều kiện làm việc thực tế: nghiêng, ánh sáng không đều, đôi khi bị mờ. Yêu cầu ngay từ đầu là chạy thuần CPU, không phụ thuộc GPU.
Thay vì huấn luyện một mô hình duy nhất xử lý tốt mọi ngôn ngữ, chúng tôi tách thành hai engine riêng.
Engine chính là PP-OCRv6_medium, một mô hình mã nguồn mở có sẵn, chạy dưới dạng hai phần: mô hình phát hiện 59MB và mô hình nhận dạng 73MB, tổng cộng 132MB. Engine này xử lý tiếng Anh, tiếng Nhật, tiếng Trung và chữ Latin, chạy hoàn toàn trên CPU. Kiểm chứng trên ảnh nhãn chụp thật, engine đạt độ tin cậy 0.997 với tiếng Anh và 0.999 với tiếng Nhật, cả hai đều đọc đúng hoàn toàn.
Engine thứ hai tồn tại vì một lỗi cụ thể. Khi thử tiếng Việt trên engine chính, dấu thanh bị mất hoàn toàn. Chuỗi Sản phẩm Việt Nam trả về thành Sn phm Vit Nam, không phải bị nhòe mà biến mất hẳn. Fine-tune engine chính có nguy cơ ảnh hưởng đến độ chính xác đang tốt của các ngôn ngữ khác, nên chúng tôi thêm một engine riêng cho tiếng Việt, VietOCR. Engine này nặng hơn nhiều, chỉ riêng trọng số đã 145MB và khoảng 623MB nếu tính cả PyTorch, nên chỉ được nạp khi có yêu cầu tiếng Việt thực sự, bật tắt bằng biến môi trường. Với VietOCR, độ tin cậy đạt 0.913, cải thiện rõ rệt so với engine chính vốn gần như không dùng được cho tiếng Việt.
Mỗi engine cũng chạy với semaphore riêng thay vì dùng chung một khóa, để một yêu cầu VietOCR nặng không làm các yêu cầu PP-OCRv6 nhẹ hơn phải chờ theo.
Chúng tôi không xây riêng một mô hình để trích xuất mã định danh. Phần này chạy bằng logic dựa trên luật: đối chiếu mẫu bằng regex theo đúng định dạng nhãn đã biết, liên kết theo tọa độ gần nhau trên ảnh, và kiểm tra checksum Luhn cho số IMEI. Mỗi giá trị trích xuất được đều có thể truy ngược về đúng luật đã tạo ra nó, điều quan trọng khi cần điều tra một trường hợp nhận diện sai.
Bảo mật và kiểm thử, không phải khẩu hiệu
Dịch vụ giới hạn ảnh tải lên ở mức 25 megapixel để chặn tấn công decompression-bomb, xác thực mọi file trọng số tải về bằng SHA256, và chạy trên phiên bản Pillow đã vá lỗ hổng CVE-2023-4863. Toàn bộ được kiểm thử bằng 54 test tự động: 42 unit test và 12 integration test chạy trên mô hình thật, không phải mock.
Điều này chứng minh gì, và giới hạn nằm ở đâu
Chạy thuần CPU giúp loại bỏ chi phí GPU khỏi bảng chi phí, và vì toàn bộ xử lý diễn ra trong hạ tầng của khách hàng, không ảnh hay văn bản trích xuất nào phải rời khỏi đó, điều có ý nghĩa trực tiếp với các tổ chức phải tuân thủ APPI hoặc GDPR. Chúng tôi không khẳng định đây là một chứng chỉ cụ thể. VAON hiện chưa có chứng chỉ ISO 27001, quy chuẩn bảo mật của chúng tôi được xây dựng theo khung ISO 27001, chứng chỉ chính thức nằm trong lộ trình.
Con số 132MB và các độ tin cậy nêu trên là kết quả đo trên đúng bộ ảnh nhãn chụp thật dùng để kiểm thử. Một kiểu nhãn khác, góc camera khác, hoặc điều kiện ánh sáng khác sẽ cần được kiểm chứng riêng trước khi chúng tôi cam kết cùng con số cho một triển khai cụ thể. Bước kiểm chứng này là một phần trong cách chúng tôi lên phạm vi cho mọi dự án thật, không phải bước bị bỏ qua để đưa ra một con số ấn tượng hơn.
Nếu bạn đang cân nhắc một pipeline OCR chạy CPU hoặc on-premise cho doanh nghiệp, có thể đọc toàn bộ case study kỹ thuật, bao gồm phương pháp kiểm thử và mọi con số nêu trên, hoặc liên hệ để được tư vấn miễn phí.
Website: https://vaon.com.vn/vi