OCR ra chữ lỗi, mất dấu tiếng Việt: nguyên nhân và cách sửa
Bởi đội ngũ FreePDF ·
Bạn chạy OCR cho một bản scan, sao chép một đoạn rồi dán ra thì nhận về chữ sai be bét, hoặc chữ đúng nhưng nửa câu ở dòng thứ tư lại chạy lên dòng thứ hai. Với văn bản tiếng Việt, kiểu lỗi quen thuộc nhất là mất sạch dấu. OCR đoán chữ từ điểm ảnh, và khi nó đoán sai, nguyên nhân thường nằm ở ảnh trang hoặc ở ngôn ngữ, hiếm khi do một thiết lập nào bị ẩn.
Bản scan tiếng Việt: đọc phần này trước
OCR của chúng tôi chỉ có dữ liệu tiếng Anh và không có tùy chọn đổi ngôn ngữ. Tiếng Việt dùng chữ Latin nên các chữ cái cơ bản thường vẫn được nhận ra, nhưng dấu thanh và các chữ ă, â, ê, ô, ơ, ư, đ thì bị bỏ đi hoặc bị thay bằng ký tự trông na ná. Một dòng như “CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM” có thể ra thành chữ không dấu, lẫn vài ký tự lạ. Với cả một trang tiếng Việt, kết quả gần như không dùng được: đọc thì khó, còn tìm “hợp đồng” cũng không ra. Scan lại bao nhiêu lần cũng vậy, vì đây không phải lỗi chất lượng ảnh.
Văn bản tiếng Việt cần một phần mềm OCR có gói ngôn ngữ tiếng Việt. Nếu bạn quen dùng dòng lệnh, hãy cài ocrmypdf (công cụ mã nguồn mở mà chúng tôi dùng) cùng gói tiếng Việt của Tesseract trên máy mình, chẳng hạn gói tesseract-ocr-vie trên Ubuntu. Khi chạy, dùng -l vie, hoặc -l vie+eng cho tài liệu lẫn cả tiếng Anh.
Xem toàn bộ lớp chữ trước khi sửa
Tìm kiếm trong trình đọc PDF chỉ cho biết một từ có được tìm thấy hay không. Muốn xem OCR đã đọc ra những gì, hãy đưa tệp đã OCR qua công cụ PDF sang văn bản rồi đọc tệp .txt nhận về. Thường bạn sẽ gặp một trong ba tình huống:
- Có trang trống trơn. Trang đó bị xoay ngang, quá mờ, hoặc bị bỏ qua hoàn toàn.
- Từ đúng nhưng sai thứ tự. Đây là vấn đề bố cục: chia cột, bảng biểu, hoặc trang bị scan nghiêng.
- Từ đầy chữ cái sai. Nguyên nhân là chất lượng ảnh, kiểu chữ, hoặc ngôn ngữ.
Bản thân PDF sang văn bản cũng có ô “Chạy OCR (đọc chữ từ trang quét)”, dùng cùng bộ máy với OCR PDF. Nếu thứ bạn cần chỉ là tệp .txt, bạn có thể đi thẳng từ bản scan ra chữ trong một bước.
Trang vốn đã có một lớp chữ
OCR của chúng tôi bỏ qua mọi trang đã có chữ, để không bao giờ ghi đè lên chữ sẵn có. Phần lớn thời gian đó là điều bạn muốn. Nó phản tác dụng khi chính lớp chữ sẵn có lại là rác: có máy scan tự chạy một lượt OCR sơ sài, và có những PDF dùng phông khiến chữ sao chép ra thành ký hiệu, vì tệp không ghi lại mỗi nét chữ ứng với ký tự nào. Công cụ thấy trang đã có chữ, để nguyên, và trả lại cho bạn đúng mớ lộn xộn cũ.
Cách xử lý là “làm phẳng” các trang thành ảnh thuần trước:
- Chuyển PDF bằng PDF sang JPG, chọn “Cao (300 DPI)”.
- Ghép các ảnh JPG lại thành một PDF bằng JPG sang PDF. Kiểm tra thứ tự trước khi chuyển, vì nút “Sắp xếp theo tên” đặt page_10 lên trước page_2. Các mũi tên lên xuống cạnh mỗi tệp sẽ sửa được chuyện đó.
- Chạy OCR PDF trên tệp mới.
Bản làm phẳng mất link và các ô biểu mẫu, nên hãy giữ bản gốc. Cách này cũng chỉ giúp được trang tiếng Anh; trang tiếng Việt sau khi làm phẳng vẫn phải nhờ đến OCR có gói tiếng Việt. Nếu bạn quen dòng lệnh, ocrmypdf có sẵn tham số --force-ocr và --redo-ocr cho đúng tình huống này.
Sửa bản scan, đừng mất công tìm thiết lập
Tesseract, bộ máy làm việc nhận dạng, chạy tốt nhất trên trang sạch, thẳng, khoảng 300 dpi. Phần lớn kết quả lỗi đều truy được về một trong những nguyên nhân sau:
- Độ phân giải thấp hoặc ảnh nhòe. Scan lại ở 300 dpi, hoặc 400 dpi cho chữ nhỏ. Phóng to một ảnh mờ sau khi scan không lấy lại được chi tiết.
- Trang bị nghiêng. Chúng tôi không nắn thẳng trang trước khi đọc, và chỉ lệch vài độ cũng đủ tách một dòng làm đôi hoặc ghép mẩu của các dòng khác nhau vào với nhau. Hãy scan lại cho thẳng, hoặc dùng ứng dụng scan tự cắt viền và nắn phẳng trang.
- Trang nằm ngang hoặc lộn ngược. Công cụ cũng không tự xoay. Hãy đưa tệp qua Xoay PDF trước, nhớ rằng nó xoay mọi trang cùng lúc.
- Độ tương phản thấp. Bản in giấy than đã phai, chữ viết bút chì hay giấy màu đều khiến chữ khó tách khỏi nền.
Những thứ OCR đọc kém dù bạn làm gì
Chữ viết tay đứng đầu danh sách. Tesseract được làm cho chữ in, nên lời phê viết tay bên lề sẽ thành nhiễu. Chữ kiểu thư pháp, phông trang trí đậm, hay chữ in đè lên ảnh hoặc nền có hoa văn cũng gây rắc rối tương tự. Bảng biểu và trang nhiều cột thì thường đúng từng ký tự nhưng bị đọc thẳng ngang qua các cột, nên tìm kiếm vẫn được mà sao chép ra đọc không thành câu. Với những nội dung như vậy, OCR giúp bạn tìm kiếm, còn muốn có chữ chính xác thì vẫn phải gõ lại.
Câu hỏi thường gặp
Chạy OCR thêm một lần nữa có chính xác hơn không?
Không. Lần chạy thứ hai thấy lớp chữ của lần đầu và bỏ qua mọi trang. Hãy làm phẳng tệp như hướng dẫn ở trên, hoặc tốt hơn, bắt đầu lại từ một bản scan rõ hơn.
Vì sao số 0 và chữ O, số 1 và chữ l cứ bị nhầm với nhau?
Ở độ phân giải thấp, các ký tự này gần như cùng một hình dạng và bộ máy buộc phải chọn một. Bản scan nét hơn giúp rất nhiều. Với tổng tiền trên hóa đơn, số tài khoản hay bất cứ con số nào mà sai một chữ số là thành chuyện, hãy đối chiếu chữ OCR với ảnh trang trước khi dùng.