OCR local với Ollama: chọn Gemma 4, Qwen-VL hay model chuyên OCR?
Với tài liệu nội bộ không thể đưa lên dịch vụ ngoài, model vision chạy local là một hướng đáng thử. Kinh nghiệm từ cộng đồng: chọn model theo loại giấy tờ, xử lý từng trang và luôn hậu kiểm trường quan trọng.
Một dấu tiếng Việt, một chữ số tiền hoặc một ký tự mã số thuế bị đọc sai có thể làm cả quy trình số hoá trở nên kém tin cậy. Với hợp đồng scan, bảng kê nhiều cột hay biên bản có ghi chú tay, mục tiêu không chỉ là “đọc ra chữ” mà còn là phát hiện đúng những chỗ chưa chắc chắn.
Đây là bài toán của nhiều đội phải giữ tài liệu trong hạ tầng nội bộ, không gửi ảnh lên dịch vụ bên ngoài. Theo kinh nghiệm chia sẻ trên diễn đàn AI Hub, vision model chạy local qua Ollama là lựa chọn đáng thử — nhưng cần đi kèm tiền xử lý ảnh, kiểm tra dữ liệu và người duyệt ở các trường quan trọng.
Chọn model theo loại tài liệu
Không có một model phù hợp cho mọi tập hồ sơ. Hãy chọn điểm xuất phát theo loại giấy tờ xuất hiện nhiều nhất trong kho tài liệu của bạn.
| Nhu cầu chính | Model nên thử | Lưu ý |
|---|---|---|
| Phiếu viết tay, ghi chú trên biên bản, mẫu in điền tay | gemma4:26b | Theo trải nghiệm được chia sẻ, model này đọc chữ tay tiếng Việt và dấu tốt trong nhóm đã thử |
| Hợp đồng in, hoá đơn, bảng kê, ảnh chụp điện thoại | qwen3-vl hoặc qwen3.5 | Được đánh giá tốt về giữ cấu trúc bảng và trả dữ liệu JSON |
| Xử lý số lượng lớn, máy hạn chế tài nguyên | glm-ocr hoặc deepseek-ocr | Nhẹ hơn, nhưng cần kiểm tra kỹ với tiếng Việt có dấu |
| GPU hạn chế | qwen3-vl:8b, qwen3.5:9b, gemma4:12b | Chọn theo ưu tiên tài liệu in/bảng hay chữ viết tay |
Gemma 4: ưu tiên khi chữ viết tay là điểm nghẽn
Theo bài chia sẻ, gemma4:26b có dung lượng khoảng 16–19GB, ngữ cảnh 256K và nhận đầu vào văn bản lẫn hình ảnh. Tác giả đánh giá đây là lựa chọn tốt nhất trong số các model đã thử cho chữ viết tay tiếng Việt, kể cả chữ viết khá khó đọc.
Các bình luận trên diễn đàn cũng cho thấy trải nghiệm tương tự với phiếu khách hàng điền tay. Tuy vậy, đây là nhận xét từ người dùng, không phải kết quả benchmark độc lập. Nếu máy yếu hơn, bài viết gợi ý thử gemma4:12b hoặc gemma4:e4b, với chất lượng chữ in vẫn có thể sử dụng nhưng sẽ giảm so với bản lớn.
Qwen vision: phù hợp tài liệu in và bảng biểu
Dòng qwen3-vl và qwen3.5 được người đăng ưu tiên cho hợp đồng, hoá đơn, bảng kê và ảnh chụp điện thoại. Điểm mạnh được ghi nhận là giữ cấu trúc bảng tốt và trả JSON ổn định hơn.
Theo thông tin được nêu trong bài đăng, qwen3-vl có các bản từ 2B đến 32B, trong đó bản 8B khoảng 6,1GB; dòng này được nhà phát triển cho biết hỗ trợ OCR 32 ngôn ngữ. qwen3.5 có nhiều kích cỡ từ 0.8B đến 35B và được cho là hỗ trợ hơn 200 ngôn ngữ.
Với công việc số hoá, điều cần kiểm tra không chỉ là model có đọc được chữ hay không, mà là liệu dòng, cột và trường dữ liệu có được giữ đúng để đưa sang hệ thống hồ sơ, bảng tính hoặc phần mềm nghiệp vụ hay không.
Model OCR nhỏ: ưu tiên tốc độ, phải thử kỹ tiếng Việt
glm-ocr và deepseek-ocr là hai lựa chọn chuyên OCR được đề cập trong bài viết. glm-ocr có khoảng 0,9B tham số, file khoảng 1,8–2,7GB; deepseek-ocr có bản 3B.
Ưu điểm là gọn nhẹ và phù hợp khi phải xử lý nhiều tài liệu hoặc không có GPU mạnh. Đổi lại, tác giả lưu ý các model này được tối ưu chủ yếu cho tiếng Anh và tiếng Trung. Với hồ sơ tiếng Việt, đặc biệt là chữ có dấu, tên riêng và chữ viết tay, nên thử trên tập tài liệu đại diện trước khi triển khai rộng.
Gợi ý theo cấu hình máy
Các mức cấu hình dưới đây là gợi ý từ bài chia sẻ, không thay thế cho việc tự thử nghiệm:
GPU 8GB: qwen3-vl:8b hoặc qwen3.5:9b cho tài liệu in; gemma4:12b nếu cần xử lý chữ tay; glm-ocr khi ưu tiên số lượng.
GPU 16GB: có thể thử gemma4:12b hoặc qwen3.5:9b với ngữ cảnh dài hơn.
GPU từ 24GB: gemma4:26b là lựa chọn tác giả thường dùng cho chữ tay; qwen3-vl:30b hoặc qwen3.5:27b phù hợp để thử với tài liệu in phức tạp.
Mac chip M-series nhiều RAM: bài viết cho biết có các bản -mlx cho Gemma 4 và Qwen 3.5.
Pipeline OCR local: xử lý từng trang, hậu kiểm từng trường
Điểm đáng chú ý trong quy trình được chia sẻ là xử lý từng trang thay vì gửi cả tập PDF một lần. Điều này giúp kiểm soát lỗi và khoanh vùng trang cần người xem lại.
1. Chuyển PDF thành ảnh
Có thể dùng pdftoppm hoặc thư viện pdf2image để tách PDF thành ảnh theo trang. Mức 200–300 DPI được đề xuất trong bài đăng.
Theo kinh nghiệm của tác giả, độ phân giải thấp là một nguyên nhân lớn gây đọc sai. Nếu nét chữ đã mờ hoặc mất chi tiết từ ảnh đầu vào, model khó có thể phục hồi chính xác.
2. Xoay ảnh và cắt vùng cần đọc
Với ảnh chụp bằng điện thoại, hãy xoay thẳng trang và cắt viền trắng. Nếu bảng quá lớn, nên cắt riêng vùng bảng trước khi đưa vào model.
Một thành viên diễn đàn cho biết Qwen dễ bị lệch cột hơn khi nhận cả trang so với khi chỉ nhận vùng bảng. Đây là mẹo thực tế đáng thử với các biểu mẫu phức tạp.
3. Chạy thử bằng một trang đã biết nội dung
Bài đăng đưa ra lệnh thử nhanh:
bash
ollama pull gemma4:26b
ollama run gemma4:26b "Chép lại toàn bộ chữ trong ảnh" ./phieu-de-xuat.png
Hãy thay ảnh mẫu bằng một trang đại diện đã được kiểm tra thủ công, rồi đối chiếu đầu ra với ảnh gốc. Nếu tài liệu chủ yếu là bản in và bảng biểu, có thể thử dòng Qwen vision theo cấu hình máy đang có.
4. Gọi API Ollama khi chạy hàng loạt
Tác giả dùng POST /api/generate, gửi ảnh mã hoá base64 qua trường images và đặt temperature = 0.
Việc đặt temperature = 0 nhằm giảm biến động đầu ra khi xử lý cùng một trang. Một bình luận khác cũng gợi ý dùng keepalive để model không bị giải phóng khỏi GPU giữa các trang, từ đó giảm thời gian nạp lại. Đây là mẹo vận hành cần kiểm tra theo phiên bản Ollama đang sử dụng.
5. Hậu kiểm trước khi đưa dữ liệu vào hệ thống
Bài chia sẻ đề xuất:
Chuẩn hoá Unicode về NFC.
Kiểm tra ngày tháng.
Đối chiếu trường số, chẳng hạn tổng tiền với tổng các dòng.
Đánh dấu để người kiểm tra lại nếu hai model cho kết quả khác nhau ở trường quan trọng.
Đặc biệt, số tiền, mã số thuế và số tài khoản không nên được tin tuyệt đối chỉ vì model trả về một giá trị trông hợp lý.
Prompt OCR cần cho phép model nói “không rõ”
Rủi ro lớn khi dùng vision model là model có thể đoán một nội dung nghe hợp lý ở vùng ảnh mờ. Vì vậy, prompt nên yêu cầu model giữ lại sự không chắc chắn thay vì tự điền phần còn thiếu.
Mẫu prompt được chia sẻ:
text
Bạn là công cụ OCR. Hãy chép lại chính xác toàn bộ nội dung trong ảnh tài liệu tiếng Việt.
Yêu cầu:
Giữ nguyên thứ tự và cách xuống dòng như trong tài liệu.
Bảng thì trình bày dạng bảng markdown.
Chữ viết tay cũng chép lại, đặt trong dấu [tay: ...].
Chỗ nào không đọc được thì ghi [không rõ], tuyệt đối không tự đoán.
Không thêm lời giải thích, chỉ trả về nội dung.
Với hoá đơn, có thể yêu cầu trả về JSON gồm các trường:
text
sohoadon
ngay
tennguoiban
masothue
danhsachhang (ten, soluong, dongia, thanhtien)
tongtien
Điểm quan trọng nhất là giữ quy tắc: phần không đọc được phải là [không rõ], không phải một giá trị được suy đoán. Một trường bị gắn cờ còn tốt hơn một số tiền sai nhưng nhìn có vẻ hợp lệ.
Đừng đánh giá bằng cảm giác “trông khá đúng”
Trước khi số hoá cả kho hồ sơ, nên lập một tập kiểm thử nội bộ gồm các trường hợp đại diện:
Bản scan rõ nét.
Ảnh điện thoại thiếu sáng hoặc bị nghiêng.
Bảng nhiều cột.
Văn bản lẫn chữ in và chữ viết tay.
Trang có số tiền, mã số thuế hoặc các mã định danh quan trọng.
Với từng model, hãy kiểm tra:
Có sai dấu tiếng Việt, số hoá đơn, mã số thuế hay số tài khoản không?
Có bỏ sót dòng, ô bảng hoặc phần ghi tay không?
Cột và dòng có bị lệch, ghép nhầm không?
Model có dùng [không rõ] ở phần thực sự khó đọc hay vẫn tự đoán?
JSON có ổn định về cấu trúc giữa các tài liệu cùng loại không?
Chốt nhanh
Chọn Gemma 4 khi tài liệu có nhiều chữ viết tay.
Chọn Qwen vision cho tài liệu in, ảnh chụp và bảng biểu.
Chọn model OCR nhỏ khi cần tốc độ hoặc chạy số lượng lớn, nhưng phải thử kỹ tiếng Việt.
Xử lý một trang mỗi lần; cắt riêng vùng bảng lớn nếu cần.
Dùng ảnh đủ nét, đặt temperature = 0 và yêu cầu ghi [không rõ] thay vì đoán.
Luôn hậu kiểm số tiền, ngày tháng, mã số thuế và các trường cần đối soát.
Điều quan trọng không phải là chọn model cho đầu ra trông thuyết phục nhất, mà là chọn quy trình giúp đội phát hiện lỗi sớm nhất.