Nhận dạng ký tự quang học (OCR) biến hình ảnh văn bản—bản quét, ảnh chụp từ điện thoại thông minh, PDF—thành các chuỗi máy có thể đọc được và, ngày càng nhiều, dữ liệu có cấu trúc. OCR hiện đại là một quy trình làm sạch hình ảnh, tìm văn bản, đọc nó và xuất siêu dữ liệu phong phú để các hệ thống hạ nguồn có thể tìm kiếm, lập chỉ mục hoặc trích xuất các trường. Hai tiêu chuẩn đầu ra được sử dụng rộng rãi là hOCR, một định dạng vi mô HTML cho văn bản và bố cục, và ALTO XML, một lược đồ hướng thư viện/lưu trữ; cả hai đều bảo toàn vị trí, thứ tự đọc và các tín hiệu bố cục khác và được hỗ trợ bởi các công cụ phổ biến như Tesseract.
Tiền xử lý. Chất lượng OCR bắt đầu bằng việc dọn dẹp hình ảnh: chuyển đổi thang độ xám, khử nhiễu, ngưỡng (nhị phân hóa), và chỉnh lệch. Các hướng dẫn OpenCV kinh điển bao gồm toàn cục, thích ứng và Otsu ngưỡng—những yếu tố chính cho các tài liệu có ánh sáng không đồng đều hoặc biểu đồ hai mode. Khi độ sáng thay đổi trong một trang (hãy nghĩ đến ảnh chụp bằng điện thoại), các phương pháp thích ứng thường hoạt động tốt hơn một ngưỡng toàn cục duy nhất; Otsu tự động chọn một ngưỡng bằng cách phân tích biểu đồ. Chỉnh sửa độ nghiêng cũng quan trọng không kém: chỉnh lệch dựa trên Hough (Biến đổi dòng Hough) kết hợp với nhị phân hóa Otsu là một công thức phổ biến và hiệu quả trong các quy trình tiền xử lý sản xuất.
Phát hiện và nhận dạng. OCR thường được chia thành phát hiện văn bản (văn bản ở đâu ?) và nhận dạng văn bản (nó nói gì?). Trong các cảnh tự nhiên và nhiều bản quét, các bộ phát hiện tích chập hoàn toàn như EAST dự đoán hiệu quả các tứ giác ở cấp độ từ hoặc dòng mà không cần các giai đoạn đề xuất nặng nề và được triển khai trong các bộ công cụ phổ biến (ví dụ: hướng dẫn phát hiện văn bản của OpenCV). Trên các trang phức tạp (báo, biểu mẫu, sách), việc phân đoạn các dòng/vùng và suy luận thứ tự đọc rất quan trọng:Kraken triển khai phân đoạn vùng/dòng truyền thống và phân đoạn đường cơ sở thần kinh, với sự hỗ trợ rõ ràng cho các tập lệnh và hướng khác nhau (LTR/RTL/dọc).
Mô hình nhận dạng. Công cụ mã nguồn mở cổ điển Tesseract (do Google mở nguồn, có nguồn gốc từ HP) đã phát triển từ một bộ phân loại ký tự thành một bộ nhận dạng chuỗi dựa trên LSTM và có thể phát hành các tệp PDF có thể tìm kiếm, đầu ra thân thiện với hOCR/ALTO, và nhiều hơn nữa từ CLI. Các bộ nhận dạng hiện đại dựa vào mô hình hóa chuỗi mà không cần các ký tự được phân đoạn trước. Phân loại thời gian kết nối (CTC) vẫn là nền tảng, học các sự sắp xếp giữa các chuỗi đặc trưng đầu vào và chuỗi nhãn đầu ra; nó được sử dụng rộng rãi trong các quy trình xử lý chữ viết tay và văn bản cảnh.
Trong vài năm qua, Transformers đã định hình lại OCR. TrOCR sử dụng một bộ mã hóa Vision Transformer cộng với một bộ giải mã Text Transformer, được đào tạo trên các kho ngữ liệu tổng hợp lớn sau đó được tinh chỉnh trên dữ liệu thực, với hiệu suất mạnh mẽ trên các tiêu chuẩn văn bản in, viết tay và cảnh (xem thêm tài liệu Hugging Face). Song song đó, một số hệ thống bỏ qua OCR để hiểu biết hạ nguồn: Donut (Document Understanding Transformer) là một bộ mã hóa-giải mã không có OCR, trực tiếp xuất ra các câu trả lời có cấu trúc (như JSON khóa-giá trị) từ tài liệu hình ảnh (repo, thẻ mô hình), tránh tích lũy lỗi khi một bước OCR riêng biệt cung cấp cho một hệ thống IE.
Nếu bạn muốn đọc văn bản có sẵn trên nhiều tập lệnh, EasyOCR cung cấp một API đơn giản với hơn 80 mô hình ngôn ngữ, trả về các hộp, văn bản và độ tin cậy—tiện dụng cho các nguyên mẫu và các tập lệnh không phải tiếng Latinh. Đối với các tài liệu lịch sử, Kraken tỏa sáng với phân đoạn đường cơ sở và thứ tự đọc nhận biết tập lệnh; để đào tạo cấp dòng linh hoạt, Calamari xây dựng trên dòng dõi Ocropy (Ocropy) với các bộ nhận dạng (đa)LSTM+CTC và một CLI để tinh chỉnh các mô hình tùy chỉnh.
Sự khái quát hóa phụ thuộc vào dữ liệu. Đối với chữ viết tay, Cơ sở dữ liệu chữ viết tay IAM cung cấp các câu tiếng Anh đa dạng về người viết để đào tạo và đánh giá; đó là một bộ tham chiếu lâu đời cho nhận dạng dòng và từ. Đối với văn bản cảnh, COCO-Text đã xếp lớp các chú thích mở rộng trên MS-COCO, với các nhãn cho văn bản in/viết tay, dễ đọc/khó đọc, tập lệnh và bản ghi đầy đủ (xem thêm trang dự án ban đầu). Lĩnh vực này cũng phụ thuộc nhiều vào việc đào tạo trước tổng hợp: SynthText in the Wild kết xuất văn bản thành các bức ảnh với hình học và ánh sáng thực tế, cung cấp khối lượng dữ liệu khổng lồ để đào tạo trước các bộ phát hiện và nhận dạng (tham khảo mã và dữ liệu).
Các cuộc thi dưới chiếc ô Đọc mạnh mẽ của ICDAR giữ cho việc đánh giá có cơ sở. Các nhiệm vụ gần đây nhấn mạnh việc phát hiện/đọc từ đầu đến cuối và bao gồm việc liên kết các từ thành các cụm từ, với mã chính thức báo cáo độ chính xác/độ thu hồi/F-score, giao nhau trên hợp nhất (IoU), và các số liệu khoảng cách chỉnh sửa cấp ký tự—phản ánh những gì các nhà thực hành nên theo dõi.
OCR hiếm khi kết thúc ở văn bản thuần túy. Các kho lưu trữ và thư viện số thích ALTO XML vì nó mã hóa bố cục vật lý (các khối/dòng/từ có tọa độ) cùng với nội dung, và nó kết hợp tốt với bao bì METS. hOCR định dạng vi mô, ngược lại, nhúng cùng một ý tưởng vào HTML/CSS bằng cách sử dụng các lớp như ocr_line và ocrx_word, giúp dễ dàng hiển thị, chỉnh sửa và chuyển đổi bằng các công cụ web. Tesseract phơi bày cả hai—ví dụ: tạo hOCR hoặc PDF có thể tìm kiếm trực tiếp từ CLI (hướng dẫn xuất PDF); Các trình bao bọc Python như pytesseract thêm sự tiện lợi. Các bộ chuyển đổi tồn tại để dịch giữa hOCR và ALTO khi các kho lưu trữ có các tiêu chuẩn nhập liệu cố định —xem danh sách được tuyển chọn này của công cụ định dạng tệp OCR.
Xu hướng mạnh mẽ nhất là sự hội tụ: phát hiện, nhận dạng, mô hình hóa ngôn ngữ và thậm chí cả giải mã cho tác vụ cụ thể đang hợp nhất thành các ngăn xếp Transformer thống nhất. Đào tạo trước trên các kho ngữ liệu tổng hợp lớn vẫn là một hệ số nhân. Các mô hình không có OCR sẽ cạnh tranh quyết liệt ở bất cứ đâu mục tiêu là các đầu ra có cấu trúc thay vì các bản ghi nguyên văn. Cũng mong đợi các triển khai kết hợp: một bộ phát hiện nhẹ cộng với một bộ nhận dạng kiểu TrOCR cho văn bản dạng dài, và một mô hình kiểu Donut cho các biểu mẫu và biên lai.
Tesseract (GitHub) · Tài liệu Tesseract · Thông số kỹ thuật hOCR · Nền tảng ALTO · Bộ phát hiện EAST · Phát hiện văn bản OpenCV · TrOCR · Donut · COCO-Text · SynthText · Kraken · Calamari OCR · ICDAR RRC · pytesseract · Chữ viết tay IAM · Công cụ định dạng tệp OCR · EasyOCR
Optical Character Recognition (OCR) là một công nghệ được sử dụng để chuyển đổi các loại tài liệu khác nhau, như tài liệu giấy đã quét, tệp PDF hoặc hình ảnh được chụp bằng máy ảnh số, thành dữ liệu có thể chỉnh sửa và tìm kiếm.
OCR hoạt động bằng cách quét hình ảnh hoặc tài liệu đầu vào, phân đoạn hình ảnh thành các ký tự riêng lẻ, và so sánh từng ký tự với cơ sở dữ liệu hình dạng ký tự bằng cách sử dụng nhận dạng mô hình hoặc nhận dạng đặc trưng.
OCR được sử dụng trong nhiều lĩnh vực và ứng dụng, bao gồm số hóa tài liệu in, kích hoạt các dịch vụ văn bản thành giọng nói, tự động hóa quá trình nhập dữ liệu, và hỗ trợ người dùng khiếm thị tương tác tốt hơn với văn bản.
Mặc dù đã có những tiến bộ vượt bậc trong công nghệ OCR, nhưng nó không phải lúc nào cũng hoàn hảo. Độ chính xác có thể thay đổi tùy thuộc vào chất lượng của tài liệu gốc và chi tiết của phần mềm OCR đang được sử dụng.
Mặc dù OCR chủ yếu được thiết kế cho văn bản in, một số hệ thống OCR tiên tiến cũng có thể nhận dạng được chữ viết tay rõ ràng, nhất quán. Tuy nhiên, nhận dạng chữ viết tay thường kém chính xác hơn do sự biến đổi lớn trong các kiểu viết của mỗi người.
Có, nhiều hệ thống phần mềm OCR có thể nhận dạng được nhiều ngôn ngữ. Tuy nhiên, điều quan trọng là phải đảm bảo rằng ngôn ngữ cụ thể đó được hỗ trợ bởi phần mềm bạn đang sử dụng.
OCR là viết tắt của Optical Character Recognition và được sử dụng để nhận dạng văn bản in, trong khi ICR, hoặc Intelligent Character Recognition, tiên tiến hơn và được sử dụng để nhận dạng văn bản viết tay.
OCR hoạt động tốt nhất với các phông chữ rõ ràng, dễ đọc và kích cỡ văn bản chuẩn. Mặc dù nó có thể hoạt động với các phông chữ và kích cỡ khác nhau, độ chính xác thường giảm khi đối phó với phông chữ không thông thường hoặc kích cỡ văn bản rất nhỏ.
OCR có thể gặp khó khăn với các tài liệu độ phân giải thấp, phông chữ phức tạp, văn bản in kém, chữ viết tay, và các tài liệu có nền gây ra sự can thiệp với văn bản. Ngoài ra, mặc dù nó có thể hoạt động với nhiều ngôn ngữ, nó có thể không bao phủ hoàn hảo mọi ngôn ngữ.
Có, OCR có thể quét văn bản màu và nền màu, mặc dù nó thường hiệu quả hơn với các sự kết hợp màu đối lập cao, như văn bản đen trên nền trắng. Độ chính xác có thể giảm khi màu văn bản và màu nền không có đủ độ tương phản.
MAT ảnh định dạng, thường liên quan đến MATLAB, một ngôn ngữ cấp cao và môi trường tương tác được phát triển bởi MathWorks, không phải là một định dạng ảnh thông thường như JPEG hoặc PNG. Thay vào đó, nó là một định dạng tệp để lưu trữ ma trận, biến và các kiểu dữ liệu khác thường được sử dụng trong MATLAB. Định dạng MAT là viết tắt của tệp MATLAB MAT. Định dạng tệp này rất cần thiết cho người dùng MATLAB vì nó cho phép lưu trữ và quản lý dữ liệu phiên, có thể bao gồm các biến, hàm, mảng và thậm chí cả hình ảnh ở định dạng có thể dễ dàng tải lại vào không gian làm việc MATLAB để phân tích hoặc xử lý thêm.
Tệp MAT là các vùng chứa dữ liệu nhị phân có thể chứa nhiều biến, bao gồm các mảng đa chiều và dữ liệu vô hướng. Khi nói đến hình ảnh, MATLAB xử lý chúng như các ma trận với mỗi giá trị pixel được lưu trữ dưới dạng một phần tử trong ma trận. Đối với hình ảnh thang độ xám, đây là ma trận hai chiều, trong khi đối với hình ảnh màu, đây là ma trận ba chiều với các lớp riêng biệt cho các thành phần màu đỏ, lục và lam. Định dạng MAT đặc biệt hữu ích để lưu trữ dữ liệu hình ảnh như vậy vì nó bảo toàn độ chính xác số và cấu trúc chính xác của dữ liệu, điều này rất quan trọng đối với các ứng dụng khoa học và kỹ thuật.
Định dạng tệp MAT đã phát triển theo thời gian, với các phiên bản khác nhau được phát hành khi MATLAB được cập nhật. Các phiên bản phổ biến nhất là các phiên bản tệp MAT 4, 5 và 7, với phiên bản 7.3 là phiên bản mới nhất theo hiểu biết của tôi vào năm 2023. Mỗi phiên bản đã giới thiệu những cải tiến về dung lượng dữ liệu, nén và khả năng tương thích với HDF5 (Định dạng dữ liệu phân cấp phiên bản 5), một mô hình dữ liệu, thư viện và định dạng tệp được sử dụng rộng rãi để lưu trữ và quản lý dữ liệu phức tạp.
Phiên bản tệp MAT 4 là định dạng đơn giản và cũ nhất, không hỗ trợ nén dữ liệu hoặc cấu trúc phân cấp phức tạp. Nó chủ yếu được sử dụng để tương thích với các phiên bản MATLAB cũ hơn. Phiên bản 5 là một định dạng tiên tiến hơn, giới thiệu các tính năng như nén dữ liệu, mã hóa ký tự Unicode và hỗ trợ các số và đối tượng phức tạp. Phiên bản 7 đã bổ sung thêm nhiều cải tiến, bao gồm cải thiện khả năng nén và khả năng lưu trữ các mảng lớn hơn. Phiên bản 7.3 tích hợp đầy đủ với tiêu chuẩn HDF5, cho phép các tệp MAT tận dụng các tính năng tiên tiến của HDF5, chẳng hạn như lưu trữ dữ liệu lớn hơn và tổ chức dữ liệu phức tạp hơn.
Khi xử lý các tệp MAT, đặc biệt là đối với dữ liệu hình ảnh, điều quan trọng là phải hiểu cách MATLAB xử lý hình ảnh. MATLAB biểu diễn hình ảnh dưới dạng các mảng số, với mỗi số tương ứng với cường độ của một pixel trong hình ảnh thang độ xám hoặc mã màu trong hình ảnh RGB. Ví dụ: một hình ảnh thang độ xám 8 bit được lưu trữ dưới dạng ma trận với các giá trị từ 0 đến 255, trong đó 0 biểu thị màu đen, 255 biểu thị màu trắng và các giá trị ở giữa biểu thị các sắc thái của màu xám. Trong trường hợp hình ảnh màu, MATLAB sử dụng một mảng ba chiều trong đó hai chiều đầu tiên tương ứng với các vị trí pixel và chiều thứ ba tương ứng với các kênh màu.
Để tạo một tệp MAT trong MATLAB, người ta có thể sử dụng hàm 'save'. Hàm này cho phép người dùng chỉ định tên tệp và các biến mà họ muốn lưu. Ví dụ: để lưu một ma trận hình ảnh có tên 'img' vào tệp MAT có tên 'imageData.mat', người ta sẽ thực hiện lệnh 'save('imageData.mat', 'img')'. Lệnh này sẽ tạo một tệp MAT chứa dữ liệu hình ảnh có thể được tải lại vào MATLAB sau này bằng hàm 'load'.
Tải tệp MAT rất đơn giản trong MATLAB. Hàm 'load' được sử dụng để đọc dữ liệu từ tệp và đưa vào không gian làm việc MATLAB. Ví dụ: thực hiện 'load('imageData.mat')' sẽ tải nội dung của 'imageData.mat' vào không gian làm việc, cho phép người dùng truy cập và thao tác dữ liệu hình ảnh đã lưu. Lệnh 'whos' có thể được sử dụng sau khi tải để hiển thị thông tin về các biến đã được tải, bao gồm kích thước, hình dạng và kiểu dữ liệu của chúng.
Một trong những lợi ích chính của định dạng MAT là khả năng lưu trữ dữ liệu một cách nhỏ gọn và hiệu quả. Khi lưu dữ liệu vào tệp MAT, MATLAB có thể áp dụng nén để giảm kích thước tệp. Điều này đặc biệt hữu ích đối với dữ liệu hình ảnh, có thể khá lớn, đặc biệt là khi xử lý hình ảnh có độ phân giải cao hoặc bộ dữ liệu hình ảnh lớn. Nén được sử dụng trong các tệp MAT là không mất dữ liệu, nghĩa là khi dữ liệu được tải lại vào MATLAB, nó giống hệt với dữ liệu gốc mà không mất độ chính xác hoặc chất lượng.
Các tệp MAT cũng hỗ trợ lưu trữ siêu dữ liệu, có thể bao gồm thông tin về nguồn gốc của dữ liệu, ngày tạo, phiên bản MATLAB được sử dụng và bất kỳ chi tiết có liên quan nào khác. Siêu dữ liệu này có thể cực kỳ có giá trị khi chia sẻ dữ liệu với người khác hoặc khi lưu trữ dữ liệu để sử dụng trong tương lai, vì nó cung cấp ngữ cảnh và đảm bảo rằng dữ liệu có thể được diễn giải và tái tạo chính xác.
Ngoài các mảng số và dữ liệu hình ảnh, các tệp MAT có thể lưu trữ nhiều loại dữ liệu khác, chẳng hạn như cấu trúc, mảng ô, bảng và đối tượng. Tính linh hoạt này khiến các tệp MAT trở thành một công cụ đa năng cho người dùng MATLAB, vì chúng có thể đóng gói nhiều loại dữ liệu và cấu trúc trong một tệp duy nhất. Điều này đặc biệt hữu ích cho các dự án phức tạp liên quan đến nhiều loại dữ liệu, vì tất cả dữ liệu có liên quan có thể được lưu theo cách nhất quán và có tổ chức.
Đối với những người dùng cần tương tác với các tệp MAT bên ngoài MATLAB, MathWorks cung cấp thư viện I/O tệp MAT, cho phép các chương trình được viết bằng C, C++ và Fortran đọc và ghi các tệp MAT. Thư viện này hữu ích để tích hợp dữ liệu MATLAB với các ứng dụng khác hoặc để phát triển phần mềm tùy chỉnh cần truy cập dữ liệu tệp MAT. Ngoài ra, các thư viện và công cụ của bên thứ ba có sẵn cho các ngôn ngữ lập trình khác, chẳng hạn như Python, cho phép nhiều ứng dụng hơn có thể làm việc với các tệp MAT.
Việc tích hợp các tệp MAT với tiêu chuẩn HDF5 trong phiên bản 7.3 đã mở rộng đáng kể khả năng của định dạng. HDF5 được thiết kế để lưu trữ và tổ chức một lượng lớn dữ liệu và bằng cách áp dụng tiêu chuẩn này, các tệp MAT hiện có thể xử lý các bộ dữ liệu lớn hơn nhiều so với trước đây. Điều này đặc biệt quan trọng đối với các lĩnh vực như học máy, khai thác dữ liệu và điện toán hiệu suất cao, nơi khối lượng dữ liệu lớn là phổ biến. Việc tích hợp HDF5 cũng có nghĩa là các tệp MAT có thể được truy cập bằng các công cụ tương thích với HDF5, giúp tăng cường khả năng tương tác với các hệ thống và phần mềm khác.
Mặc dù có nhiều ưu điểm của định dạng MAT, nhưng vẫn có một số lưu ý cần ghi nhớ. Một trong số đó là vấn đề về khả năng tương thích của phiên bản. Khi MATLAB phát triển, định dạng tệp MAT cũng vậy và các tệp được lưu trong các phiên bản mới hơn có thể không tương thích với các phiên bản MATLAB cũ hơn. Người dùng cần biết phiên bản MATLAB họ đang sử dụng và phiên bản tệp MAT họ đang cố tải. MATLAB cung cấp các hàm để kiểm tra và chỉ định phiên bản của các tệp MAT khi lưu, có thể giúp duy trì khả năng tương thích giữa các bản phát hành MATLAB khác nhau.
Một lưu ý khác là bản chất độc quyền của định dạng MAT. Mặc dù được MathWorks ghi chép và hỗ trợ đầy đủ, nhưng nó không phải là một tiêu chuẩn mở như một số định dạng dữ liệu khác. Điều này có thể gây ra thách thức khi chia sẻ dữ liệu với những người dùng không có quyền truy cập vào MATLAB hoặc phần mềm tương thích. Tuy nhiên, việc tích hợp với HDF5 đã giảm thiểu vấn đề này ở một mức độ nào đó, vì HDF5 là một tiêu chuẩn mở và có nhiều công cụ có sẵn để làm việc với các tệp HDF5.
Tóm lại, định dạng hình ảnh MAT là một cách mạnh mẽ và linh hoạt để lưu trữ dữ liệu hình ảnh và các biến khác trong MATLAB. Khả năng bảo toàn độ chính xác số, hỗ trợ nhiều loại dữ liệu và tích hợp với tiêu chuẩn HDF5 khiến nó trở thành một công cụ vô giá đối với người dùng MATLAB, đặc biệt là nh ững người làm việc trong các lĩnh vực khoa học và kỹ thuật. Mặc dù có một số lưu ý liên quan đến khả năng
Bộ chuyển đổi này chạy hoàn toàn trong trình duyệt của bạn. Khi bạn chọn một tệp, nó sẽ được đọc vào bộ nhớ và chuyển đổi sang định dạng đã chọn. Sau đó, bạn có thể tải xuống tệp đã chuyển đổi.
Việc chuyển đổi bắt đầu ngay lập tức và hầu hết các tệp được chuyển đổi trong vòng chưa đầy một giây. Các tệp lớn hơn có thể mất nhiều thời gian hơn.
Các tệp của bạn không bao giờ được tải lên máy chủ của chúng tôi. Chúng được chuyển đổi trong trình duyệt của bạn và sau đó tệp đã chuyển đổi sẽ được tải xuống. Chúng tôi không bao giờ thấy các tệp của bạn.
Chúng tôi hỗ trợ chuyển đổi giữa tất cả các định dạng hình ảnh, bao gồm JPEG, PNG, GIF, WebP, SVG, BMP, TIFF, v.v.
Bộ chuyển đổi này hoàn toàn miễn phí và sẽ luôn miễn phí. Bởi vì nó chạy trong trình duyệt của bạn, chúng tôi không phải trả tiền cho máy chủ, vì vậy chúng tôi không cần tính phí bạn.
Đúng! Bạn có thể chuyển đổi bao nhiêu tệp tùy thích cùng một lúc. Chỉ cần chọn nhiều tệp khi bạn thêm chúng.