OCR chữ viết tay
Đọc chữ viết tay tiếng Việt từ ảnh — biểu mẫu, ghi chú, phiếu bài tập, mặt sau CMND/CCCD. Khác với OCR chữ in (xem Chuyển định dạng), chữ viết tay cần một mô hình thị giác đa phương thức (VLM) chứ không phải engine OCR truyền thống.
TL;DR — gợi ý của chúng tôi
pip install "nom-vn[ocr-handwriting]" để có sẵn transformers + torch + torchvision + timm + pillow. Mặc định dùng 5CD-AI/Vintern-1B-v3_5 (MIT, 0.9 B tham số, safetensors). Lần đầu tải khoảng 1.8 GB.
Yêu cầu: GPU 4–6 GB VRAM cho tốc độ chấp nhận được; CPU chạy được nhưng mất 1–2 phút mỗi ảnh.
Số đo nội bộ trên synthetic_ocr_vi (2026-05-03)
Đo thử Vintern trên dòng chữ in tiếng Việt — để biết "Vintern đọc đúng dòng in sạch đến đâu" trước khi nói chuyện chữ viết tay:
| Điều kiện | n | CER trung bình | Khớp tuyệt đối |
|---|---|---|---|
clean (một phông, nền trắng) | 20 | 0,47 % | 16/20 |
noisy (cùng nội dung, có nhiễu) | 20 | 0,37 % | 17/20 |
Phần lớn "lỗi" còn lại là biến thể chính tả VN hợp lệ (hoà ↔ hòa) nhưng CER tính là khác. n=20 còn nhỏ — phải đo trên 200+ ảnh trước khi công bố con số "CER chữ viết tay VN" chính thức.
Tập đánh giá (nrl-ai/vn-synthetic-ocr, CC0) đã đăng trên HuggingFace. JSON kết quả: benchmarks/accuracy/vintern_ocr_clean_baseline.json
Cách dùng
Trong giao diện web
Mở OCR chữ viết tay ở thanh điều hướng bên trái. Kéo thả ảnh (.png, .jpg, .jpeg, .tif, .tiff, .bmp, .webp) hoặc bấm Chọn ảnh. Bấm OCR. Lần đầu chạy mất 30–60 giây để tải mô hình; lần sau ~5–15 giây mỗi ảnh trên GPU, hoặc 1–2 phút trên CPU.
Gọi trực tiếp qua API HTTP
curl -X POST http://localhost:8080/api/jobs/handwriting-ocr \
-F "file=@phieu_dang_ky.jpg"
# → { "id": "<job-id>", "status": "queued", ... }Tác vụ chạy nền — theo dõi qua Hàng đợi xử lý hoặc GET /api/jobs/{id}.
Cách hoạt động
nom.ocr.handwriting là wrapper quanh Vintern-1B-v3_5:
- Đọc ảnh — Pillow load + chuyển sang RGB. Truyền cả trang, không cắt từng dòng.
- Prompt —
"Đọc và trích xuất toàn bộ chữ viết tay trong ảnh. Giữ nguyên xuống dòng và bố cục." - Generate — temperature 0, max 2048 token đầu ra.
- Decode + NFC — chuẩn hoá Unicode tổ hợp dấu trước khi trả về.
Vì sao truyền cả trang, không cắt từng dòng
VLM ảo trên line crop < 60 px chiều ngắn — cạm bẫy đã đo trên qwen2.5vl:7b (CER 33 % với chữ in clean ở line crop, vs 5 % cho Tesseract). Truyền cả trang giữ ngữ cảnh không gian, mô hình tự suy luận đường đọc.
Khi nào chọn cái gì
| Đầu vào | Khuyến nghị | Lý do |
|---|---|---|
| Chữ viết tay | Vintern-1B-v3_5 | Mô hình chuyên cho chữ tay tiếng Việt |
| Chữ in sạch (PDF / scan) | Tesseract qua nom convert | CER 0 % trên dòng in sạch, 100 × nhanh hơn VLM |
| Biểu mẫu lai (in + viết tay) | Vintern trước, Tesseract lại nếu phần in cần độ chính xác cao | Vintern bao quát; Tesseract chốt phần in |
| Hồ sơ y tế viết tay | Vintern + người xác nhận | Vintern chưa được tinh chỉnh trên y tế VN; CER ước ~20 % |
Vintern không thay thế Tesseract cho mọi trường hợp — nó bổ sung cho phần Tesseract không làm được (chữ viết tay).
Giới hạn đã biết
Đã đo trên chữ in tổng hợp (CER 0,47 % sạch / 0,37 % nhiễu, n=20), chưa đo độc lập trên chữ viết tay thật. Các con số dưới đây là ước lượng, chưa có số liệu nội bộ:
- Ảnh quét chữ in rõ: CER ≈ 5 % (cao hơn tổng hợp do bố cục phức tạp)
- Chữ viết tay người lớn, nét rõ: CER ≈ 15 % (ước lượng)
- Chữ viết tay nhanh hoặc nguệch ngoạc: CER ≈ 30 %+ (ước lượng)
Đo trên chữ viết tay thật là việc đợt sau — sẽ chạy trên
brianhuster/VietnameseOCRdataset(~7 nghìn ảnh, Apache-2.0) và cập nhật con số ở đây trong cùng commit với JSON kết quả.Phụ thuộc chất lượng ảnh. Ảnh mờ, tối, hoặc nghiêng > 15° làm giảm chất lượng đáng kể. Crop sạch đầu vào trước.
Không xử lý cấu trúc biểu mẫu. Vintern trả về văn bản tuyến tính, không nhận diện ô / cột / nhãn. Với biểu mẫu có cấu trúc, kết hợp một bước trích xuất trường theo luật sau bước OCR.
Độ trễ cao. 5–15 giây/ảnh trên GPU 8 GB là điển hình. Cho xử lý hàng loạt nên dùng Hàng đợi thay vì chờ từng yêu cầu HTTP.
Tiếng Việt thuần; mô hình đa ngôn ngữ về cơ bản nhưng chưa được đo trên tài liệu lai EN/VN.
Mô hình thay thế
| Mô hình | License | Khi nào chọn |
|---|---|---|
5CD-AI/Vintern-1B-v3_5 (mặc định) | MIT | Chữ viết tay VN tiêu chuẩn |
5CD-AI/Vintern-3B | MIT | Cần chất lượng cao hơn, có VRAM 8 GB+ |
qwen2.5-vl:7b qua Ollama | Apache 2.0 | Đa ngôn ngữ, không cần GPU; kém Vintern trên VN |
Liên quan
- Chuyển định dạng (OCR chữ in) — Tesseract + Pdfium.
- Khôi phục dấu — chạy sau OCR để bù dấu Tesseract bỏ sót.
- Sửa chính tả — lượt cuối làm sạch lỗi OCR.