Không tải lên, 100% cục bộ, không cần tài khoản

Bài viết

Cải thiện độ chính xác OCR: sửa ảnh trước khi nhận dạng văn bản

OCR chỉ tốt bằng hình ảnh bạn cung cấp cho nó. Một bản quét bị lệch, độ tương phản thấp và nhiều nhiễu sẽ tạo ra văn bản lộn xộn dù engine tốt đến đâu. Dưới đây là những gì thực sự tạo ra sự khác biệt, theo thứ tự thực hiện, tất cả chạy cục bộ trong trình duyệt của bạn.

Tại sao OCR gặp khó khăn với các bản quét thực tế

Một engine OCR như Tesseract được huấn luyện trên văn bản sạch, nằm ngang và có độ tương phản cao. Nó phân đoạn trang thành các dòng, dòng thành các từ và từ thành các hình dạng ký tự, sau đó so khớp từng hình dạng với mô hình đã được huấn luyện. Các bản quét thực tế vi phạm những giả định đó: trang bị nghiêng vài độ, ánh sáng không đều, độ phân giải thấp và cạnh của mặt phẳng quét hoặc trang đối diện thêm vào nhiễu tối. Mỗi vấn đề đó khiến bước phân đoạn dòng và ký tự đoán sai, và phân đoạn sai dẫn đến ký tự sai theo chuỗi. Giải pháp hầu như không phải là một engine khác: đó là việc chuẩn bị hình ảnh sao cho các giả định của engine được đáp ứng. Trên thực tế, tiền xử lý cải thiện độ chính xác nhiều hơn là việc chọn engine OCR.

Sơ đồ quy trình tiền xử lý OCR: một bản quét đi qua các bước định hướng, hiệu chỉnh nghiêng, cắt xén và thang xám trước khi đến công cụ nhận dạng.

Bắt đầu với độ phân giải: hướng tới 300 DPI

Tesseract hoạt động tốt nhất ở khoảng 300 DPI cho văn bản thông thường. Dưới khoảng 200 DPI, các nét của từng glyph bị mờ vào các glyph lân cận và độ chính xác giảm mạnh. Nếu bạn kiểm soát được việc quét, hãy đặt máy quét ở 300 DPI trước bất kỳ điều gì khác, vì đây là lựa chọn có tác động cao nhất. Nếu bạn chỉ có hình ảnh độ phân giải thấp, việc phóng to nó không tạo ra chi tiết chưa bao giờ được chụp lại, nhưng việc phóng to vừa phải vẫn có thể giúp engine tách các ký tự đang chạm nhau bằng cách cung cấp cho phân đoạn nhiều pixel hơn. Chữ in rất nhỏ được lợi từ 400 đến 600 DPI; ngoài mức đó bạn chỉ làm tăng kích thước tệp mà không cải thiện độ chính xác. Khi nguồn là PDF, hãy rasterize từng trang thành hình ảnh ở DPI mục tiêu trước, sau đó chạy OCR trên hình ảnh đó.

Sửa hướng đúng

Nếu trang bị xoay 90, 180 hoặc 270 độ, engine đọc nghiêng hoặc ngược chiều và trả về kết quả vô nghĩa. Tesseract có bước phát hiện hướng và chữ viết (OSD) có thể đoán được góc xoay, nhưng nó không đáng tin cậy với văn bản thưa thớt, biểu mẫu hoặc các trang có nhiều hình ảnh. Tự xoay trang về vị trí thẳng đứng sẽ loại bỏ việc phải đoán. Bước này không mất dữ liệu và tức thì: xoay theo bội số của 90 độ chỉ ánh xạ lại các pixel hiện có sang vị trí mới, không tốn chi phí chất lượng và không cần lấy mẫu lại. Thực hiện điều này trước khi chỉnh nghiêng, vì chỉnh nghiêng giả định văn bản đã gần như nằm ngang.

Chỉnh nghiêng: làm thẳng độ nghiêng nhỏ

Ngay cả độ nghiêng 2 đến 3 độ, loại xuất hiện khi đưa trang vào hơi lệch, cũng ảnh hưởng đến OCR: bước tìm dòng ngang sẽ chia một dòng văn bản thành hai, hoặc gộp hai dòng thành một. Chỉnh nghiêng đo góc chủ đạo của các dòng văn bản (thường bằng phân tích biên dạng chiếu hoặc biến đổi Hough) và xoay trang trở lại mức nằm ngang. Khác với xoay 90 độ, chỉnh nghiêng là phép xoay một góc nhỏ tùy ý, do đó nó lấy mẫu lại các pixel và thêm một lượng nhỏ mờ. Sự đánh đổi này hầu như luôn đáng giá, vì các dòng thẳng phân đoạn gọn gàng và lợi ích về độ chính xác vượt xa sự mờ nhẹ. Chỉnh nghiêng sau khi sửa hướng và trước khi cắt.

Trước và sau hiệu chỉnh nghiêng: trang văn bản nghiêng vài độ ở bên trái, được chỉnh thẳng ngang ở bên phải sao cho các dòng nằm ngang.

Cắt về vùng văn bản và loại bỏ nhiễu

Bất cứ thứ gì không phải văn bản bạn muốn đều là nhiễu mà engine có thể đọc sai: viền tối của mặt phẳng quét, một phần của trang đối diện, góc bị ghim, ngón tay hoặc lỗ đục lỗ. Cắt xuống chỉ còn khối văn bản sẽ loại bỏ các mục tiêu giả đó, vừa cải thiện độ chính xác vừa tăng tốc nhận dạng vì engine có ít diện tích hơn để phân tích. Đối với tài liệu nhiều cột, việc cắt (hoặc chạy OCR từng cột một lần) cũng ngăn engine đọc thẳng qua khoảng cách giữa các cột và trộn lẫn hai cột thành một dòng lộn xộn. Cắt sau khi chỉnh nghiêng để nội dung nằm vuông vắn trong khung.

Độ tương phản, thang độ xám và cách nhị phân hóa thực sự hoạt động

OCR cuối cùng chạy trên hình ảnh nhị phân: mỗi pixel được quyết định là mực hoặc giấy. Tesseract thực hiện điều này nội bộ bằng phương pháp Otsu, chọn một ngưỡng toàn cục duy nhất từ biểu đồ histogram của hình ảnh. Điều đó hoạt động tốt khi trang có ánh sáng đều và độ tương phản tốt, và thất bại khi bóng hoặc nền có màu khiến một góc tối hơn mức ngưỡng mong đợi. Những lợi ích đáng tin cậy là chuyển đổi sang thang độ xám để màu sắc không thể làm nhầm lẫn ngưỡng, và cân bằng ánh sáng sao cho toàn bộ trang nằm ở một phía của ngưỡng đó. Tăng độ tương phản vừa phải giúp ích với văn bản mờ nhạt. Điều thường phản tác dụng là nhị phân hóa thủ công cứng nhắc: nếu bạn tự thiết lập ngưỡng thành đen trắng thuần với giá trị cắt sai, bạn xóa các nét mờ mà bước nhị phân hóa nội bộ của engine đã giữ lại. Hãy để engine nhị phân hóa và cung cấp cho nó hình ảnh thang độ xám đồng đều. Sunasty cung cấp chuyển đổi thang độ xám cho PDF; để chỉnh độ tương phản chi tiết thì trình chỉnh sửa trên máy tính vẫn tốt hơn, nhưng ánh sáng đều khi quét quan trọng hơn bất kỳ thanh trượt nào.

Chọn ngôn ngữ phù hợp và kiểm tra kết quả

Tesseract tải một tệp dữ liệu được huấn luyện riêng cho từng ngôn ngữ và bộ chữ viết. Chạy mô hình tiếng Anh trên văn bản tiếng Pháp hoặc tiếng Hy Lạp tạo ra các lỗi có thể tránh được, đặc biệt là với các ký tự có dấu hoặc không thuộc bảng chữ La-tinh, vì vậy hãy chọn ngôn ngữ phù hợp với tài liệu. Cuối cùng, hãy coi đầu ra OCR là bản nháp, không phải câu trả lời cuối cùng: engine không có cách nào biết rằng một tên được đánh vần đúng hay 0 không phải là chữ O. Hãy kiểm tra kỹ lưỡng các con số, danh từ riêng và bất cứ thứ gì quan trọng về pháp lý hoặc tài chính. Đối với bảng biểu và bố cục nhiều cột, hãy chuẩn bị tâm lý sửa cấu trúc thủ công, vì OCR trả về một luồng văn bản được nhận dạng, không phải một bố cục được tái tạo.

Công cụ trong bài viết này

Câu hỏi thường gặp

Phóng to bản quét mờ có cải thiện OCR không?

Không nhiều khi làm một mình. Phóng to không thể khôi phục chi tiết mà bản quét chưa bao giờ chụp được, vì vậy một hình ảnh mờ ở 100 DPI vẫn mờ. Phóng to vừa phải có thể giúp engine tách các ký tự đang chạm nhau bằng cách cung cấp cho phân đoạn nhiều pixel hơn, nhưng quét lại ở 300 DPI hiệu quả hơn nhiều so với bất kỳ mức độ phóng to nào.

Tôi có nên tự chuyển ảnh sang đen trắng thuần trước không?

Thường là không. Tesseract nhị phân hóa nội bộ bằng phương pháp Otsu, và một ngưỡng thủ công cứng với giá trị cắt sai sẽ xóa các nét mờ mà engine đáng lẽ giữ lại. Thay vào đó, hãy chuyển sang thang độ xám và cân bằng ánh sáng, rồi để engine chọn ngưỡng của riêng nó.

Văn bản của tôi bị nghiêng ngang. OCR có tự động xoay không?

Đôi khi. Tesseract có bước phát hiện hướng, nhưng nó không đáng tin cậy với biểu mẫu, văn bản thưa thớt hoặc các trang có nhiều hình ảnh. Tự xoay trang về vị trí thẳng đứng 90, 180 hoặc 270 độ là không mất dữ liệu và loại bỏ việc phải đoán, vì vậy đây là lựa chọn an toàn hơn.

Bất kỳ bước nào trong số này có tải tài liệu của tôi lên không?

Không. Xoay, chỉnh nghiêng, cắt, chuyển đổi sang thang độ xám và chính OCR đều chạy trong trình duyệt của bạn. OCR sử dụng bản dựng WebAssembly của Tesseract và dữ liệu ngôn ngữ được huấn luyện được tải xuống một lần và lưu vào bộ nhớ đệm. Tệp của bạn không bao giờ rời khỏi thiết bị.

Nguồn