Optical Character Recognition (OCR)
Nhận dạng ký tự quang học (OCR) chuyển văn bản trong bản quét và ảnh chụp thành các ký tự máy có thể đọc được. Tìm hiểu các bước phát hiện và nhận dạng cùng mã nguồn.
Nhận dạng ký tự quang học (OCR) là quá trình chuyển văn bản trong ảnh, chẳng hạn trang được quét, ảnh chụp, ảnh chụp màn hình và khung hình video, thành ký tự máy có thể đọc để phần mềm tìm kiếm, chỉnh sửa và phân tích. Các hệ thống đời đầu đối sánh từng ký tự với mẫu đã lưu của các font chữ đã biết. OCR hiện đại dùng deep learning để tìm văn bản ở bất kỳ vị trí nào trong ảnh và đọc cả từ, dòng cùng lúc; nhờ đó, hệ thống xử lý được font chữ đa dạng, độ phân giải thấp, phối cảnh và nền phức tạp. OCR xử lý cả văn bản tài liệu, như hóa đơn và sách, lẫn văn bản trong cảnh, như biển báo, nhãn sản phẩm và biển số xe.
OCR hoạt động như thế nào#
Hầu hết hệ thống OCR chạy hai model nối tiếp nhau:
- Phát hiện văn bản: Detector tìm các vùng trong ảnh có chứa văn bản rồi xuất một hộp hoặc đa giác cho mỗi từ hay dòng. Các detector văn bản trong cảnh như EAST, CRAFT và DBNet dự đoán vùng văn bản theo từng pixel, nhờ đó xử lý được văn bản cong và xoay.
- Nhận dạng văn bản: Mỗi vùng được cắt, làm thẳng và đổi kích thước về chiều cao cố định; sau đó, recognizer đọc các ký tự. Thiết kế CRNN đưa ảnh cắt qua một CNN, đọc các cột đặc trưng thu được từ trái sang phải bằng LSTM hai chiều, rồi giải mã bằng connectionist temporal classification (CTC); phương pháp này căn chỉnh dự đoán theo từng cột thành chuỗi ký tự mà không cần gán nhãn vị trí bắt đầu của từng ký tự. Thay vào đó, các recognizer Transformer như TrOCR của Microsoft tạo ký tự bằng bộ giải mã văn bản.
Tiền xử lý như nhị phân hóa và chỉnh độ nghiêng vẫn hữu ích với bản quét chất lượng thấp; hậu xử lý kiểm tra kết quả với từ điển, định dạng mong đợi hoặc language model. EasyOCR đóng gói cả hai giai đoạn — detector CRAFT và recognizer CRNN — để hỗ trợ hơn 80 ngôn ngữ:
import easyocr
# Load EasyOCR's CRAFT text detector and English CRNN text recognizer
reader = easyocr.Reader(["en"])
# Detect every text region in the photo, then read the characters inside it
results = reader.readtext("https://ultralytics.com/images/bus.jpg")
# Each result holds a 4-corner box, the recognized string, and a confidence score
for box, text, confidence in results:
if confidence > 0.5:
print(f"{text}: {confidence:.2f}")Lệnh này in ra cero: 0.95 và emisiones: 0.99, những từ được sơn bên hông xe buýt. Detector cũng tìm thấy biển chỉ đường chấm ma trận của xe buýt và chữ nhỏ trên cửa sổ, nhưng recognizer trả về các chuỗi sai lệch với độ tin cậy dưới 0.5 nên chúng bị loại bởi ngưỡng.
Tài liệu cần thêm bước phân tích bố cục trước khi nhận dạng. Model phân tích bố cục chia trang thành các khối, mỗi loại khối được xử lý riêng, rồi kết quả được ghép lại theo thứ tự đọc; nhờ vậy, bài viết hai cột được đọc lần lượt từng cột:
Độ chính xác được đo bằng tỷ lệ lỗi ký tự (CER), tức số lần chèn, xóa và thay thế ký tự cần thiết để biến đầu ra thành văn bản chính xác, chia cho độ dài văn bản chính xác; và tỷ lệ lỗi từ (WER), được tính tương tự trên các từ.
Engine và model OCR#
Engine mã nguồn mở Tesseract ra đời tại Hewlett-Packard vào thập niên 1980, được phát hành dưới dạng mã nguồn mở năm 2005 và được phát triển với sự tài trợ của Google từ năm 2006 đến 2018; phiên bản 4 bổ sung engine nhận dạng dựa trên mạng LSTM. Dịch vụ đám mây như Google Cloud Vision và Amazon Textract bổ sung khả năng trích xuất bố cục, bảng và biểu mẫu. Các model vision-language ngày càng có thể đọc tài liệu từ đầu đến cuối: olmOCR của Allen Institute for AI chuyển các trang PDF thành văn bản sạch bằng model vision-language được tinh chỉnh; còn các model tài liệu không dùng OCR trả lời câu hỏi về một trang mà không cần tạo bản chép văn bản riêng trước.
OCR so với các thuật ngữ liên quan#
- Nhận dạng chữ viết tay: Còn gọi là nhận dạng văn bản viết tay (HTR) hoặc nhận dạng ký tự thông minh (ICR), công nghệ này đọc chữ viết tay, vốn có hình dạng chữ thay đổi nhiều hơn so với chữ in và các ký tự thường nối liền nhau.
- Phát hiện đối tượng: Detector có thể tìm biển báo dừng như một đối tượng, còn OCR đọc các chữ S-T-O-P được in trên biển. Giai đoạn phát hiện riêng của OCR định vị văn bản mà không đọc văn bản đó.
- Phân loại ảnh: Gán một nhãn cho toàn bộ ảnh, chẳng hạn “hóa đơn”, trong khi OCR trích xuất chuỗi ký tự bên trong ảnh.
- Xử lý tài liệu thông minh: Mở rộng OCR bằng phân tích bố cục và nhận dạng thực thể có tên (NER) để trích xuất các trường cụ thể, chẳng hạn ngày tháng, nhà cung cấp và tổng tiền trên hóa đơn, rồi đưa vào hệ thống nghiệp vụ.
Ứng dụng thực tế#
- Nhận dạng biển số xe: Hệ thống thu phí, bãi đỗ xe và thực thi luật giao thông phát hiện từng biển số rồi đọc biển số đó. Model YOLO26 được huấn luyện trên các hộp biển số đảm nhiệm bước phát hiện; biến thể bounding box định hướng khớp các hộp xoay với biển số nghiêng để có thể làm thẳng ảnh cắt trước khi nhận dạng.
- Số hóa tài liệu: Ngân hàng, công ty bảo hiểm và chính phủ chuyển biểu mẫu, biên lai và tài liệu lưu trữ thành văn bản có thể tìm kiếm; thư viện số hóa sách in trên quy mô lớn.
- Khả năng tiếp cận và dịch thuật: Trình đọc màn hình và ứng dụng dịch bằng camera đọc to biển báo, thực đơn và nhãn, hoặc phủ bản dịch lên hình ảnh trực tiếp.
- Sản xuất và logistics: Camera đọc mã lô, ngày hết hạn và số sê-ri trên dây chuyền sản xuất. Mã container vận chuyển tuân theo ISO 6346, gồm 11 ký tự với ký tự cuối là chữ số kiểm tra được tính từ 10 ký tự đầu, giúp hệ thống đọc tự động từ chối phần lớn mã bị đọc sai.










