Dữ liệu là xương sống của mọi ứng dụng phần mềm vì mục đích chính của ứng dụng là giải quyết các vấn đề của con người. Để giải quyết các vấn đề của con người, cần phải có một số thông tin về chúng.
Những thông tin như vậy được biểu thị dưới dạng dữ liệu, đặc biệt là thông qua tính toán. Trên web, dữ liệu chủ yếu được thu thập dưới dạng văn bản, hình ảnh, video và nhiều dạng khác nữa. Đôi khi, hình ảnh chứa các văn bản cần thiết được xử lý để đạt được một mục đích nhất định. Những hình ảnh này chủ yếu được xử lý thủ công vì không có cách nào để xử lý chúng theo chương trình.
Không thể trích xuất văn bản từ hình ảnh là một hạn chế về xử lý dữ liệu mà tôi đã trực tiếp trải nghiệm tại công ty trước đây của mình. Chúng tôi cần xử lý thẻ quà tặng đã quét và chúng tôi phải thực hiện thủ công vì chúng tôi không thể trích xuất văn bản từ hình ảnh.
Có một bộ phận có tên là "Vận hành" trong công ty chịu trách nhiệm xác nhận thủ công thẻ quà tặng và ghi có vào tài khoản của người dùng. Mặc dù chúng tôi có một trang web mà người dùng kết nối với chúng tôi, nhưng quá trình xử lý thẻ quà tặng được thực hiện thủ công ở hậu trường.
Vào thời điểm đó, trang web của chúng tôi chủ yếu được xây dựng bằng PHP (Laravel) cho phần phụ trợ và JavaScript (jQuery và Vue) cho phần giao diện. Bộ công cụ kỹ thuật của chúng tôi đủ tốt để hoạt động với Tesseract.js miễn là vấn đề được ban quản lý coi là quan trọng.
Tôi sẵn sàng giải quyết vấn đề nhưng không nhất thiết phải giải quyết vấn đề theo quan điểm của doanh nghiệp hoặc ban quản lý. Sau khi rời công ty, tôi quyết định nghiên cứu và cố gắng tìm ra các giải pháp khả thi. Cuối cùng, tôi đã khám phá ra OCR.
Sự phát triển của OCR có thể bắt nguồn từ một số phát minh nhưng Optophone, “Gismo”, máy quét phẳng CCD, Newton MesssagePad và Tesseract là những phát minh chính đưa nhận dạng ký tự lên một tầm cao mới tính hữu ích.
Vậy, tại sao lại sử dụng OCR? Vâng, Nhận dạng ký tự quang học giải quyết được rất nhiều vấn đề, một trong số đó đã thúc đẩy tôi viết bài viết này. Tôi nhận ra khả năng trích xuất văn bản từ hình ảnh đảm bảo nhiều khả năng như:
Như đã nêu trên trang web của Tesseract.js, nó hỗ trợ hơn 100 ngôn ngữ, định hướng văn bản tự động và phát hiện tập lệnh, giao diện đơn giản để đọc đoạn văn, từ và hộp giới hạn ký tự.
Tesseract là một công cụ nhận dạng ký tự quang học cho nhiều hệ điều hành khác nhau. Đây là phần mềm miễn phí, được phát hành theo Giấy phép Apache. Hewlett-Packard đã phát triển Tesseract dưới dạng phần mềm độc quyền vào những năm 1980. Nó được phát hành dưới dạng mã nguồn mở vào năm 2005 và quá trình phát triển của nó đã được Google tài trợ kể từ năm 2006.
Phiên bản mới nhất, phiên bản 4, của Tesseract đã được phát hành vào tháng 10 năm 2018 và nó chứa một công cụ OCR mới sử dụng hệ thống mạng nơ-ron dựa trên Bộ nhớ dài hạn ngắn hạn (LSTM) và nó được thiết kế để tạo ra kết quả chính xác hơn.
Phương thức
Ngôn ngữ được cung cấp dưới dạng chuỗi như
Lưu ý: Bạn sẽ tìm thấy tất cả các ngôn ngữ khả dụng và mã của chúng tại tại đây.
Tesseract tự động tạo đối tượng làm tham số cho hàm logger nhưng cũng có thể cung cấp thủ công. Khi quá trình nhận dạng đang diễn ra, các thuộc tính đối tượng
Sau đây là các thuộc tính của đối tượng
Những thông tin như vậy được biểu thị dưới dạng dữ liệu, đặc biệt là thông qua tính toán. Trên web, dữ liệu chủ yếu được thu thập dưới dạng văn bản, hình ảnh, video và nhiều dạng khác nữa. Đôi khi, hình ảnh chứa các văn bản cần thiết được xử lý để đạt được một mục đích nhất định. Những hình ảnh này chủ yếu được xử lý thủ công vì không có cách nào để xử lý chúng theo chương trình.
Không thể trích xuất văn bản từ hình ảnh là một hạn chế về xử lý dữ liệu mà tôi đã trực tiếp trải nghiệm tại công ty trước đây của mình. Chúng tôi cần xử lý thẻ quà tặng đã quét và chúng tôi phải thực hiện thủ công vì chúng tôi không thể trích xuất văn bản từ hình ảnh.
Có một bộ phận có tên là "Vận hành" trong công ty chịu trách nhiệm xác nhận thủ công thẻ quà tặng và ghi có vào tài khoản của người dùng. Mặc dù chúng tôi có một trang web mà người dùng kết nối với chúng tôi, nhưng quá trình xử lý thẻ quà tặng được thực hiện thủ công ở hậu trường.
Vào thời điểm đó, trang web của chúng tôi chủ yếu được xây dựng bằng PHP (Laravel) cho phần phụ trợ và JavaScript (jQuery và Vue) cho phần giao diện. Bộ công cụ kỹ thuật của chúng tôi đủ tốt để hoạt động với Tesseract.js miễn là vấn đề được ban quản lý coi là quan trọng.
Tôi sẵn sàng giải quyết vấn đề nhưng không nhất thiết phải giải quyết vấn đề theo quan điểm của doanh nghiệp hoặc ban quản lý. Sau khi rời công ty, tôi quyết định nghiên cứu và cố gắng tìm ra các giải pháp khả thi. Cuối cùng, tôi đã khám phá ra OCR.
OCR là gì?
OCR là viết tắt của “Optical Character Recognition” hoặc “Optical Character Reader”. Nó được sử dụng để trích xuất văn bản từ hình ảnh.Sự phát triển của OCR có thể bắt nguồn từ một số phát minh nhưng Optophone, “Gismo”, máy quét phẳng CCD, Newton MesssagePad và Tesseract là những phát minh chính đưa nhận dạng ký tự lên một tầm cao mới tính hữu ích.
Vậy, tại sao lại sử dụng OCR? Vâng, Nhận dạng ký tự quang học giải quyết được rất nhiều vấn đề, một trong số đó đã thúc đẩy tôi viết bài viết này. Tôi nhận ra khả năng trích xuất văn bản từ hình ảnh đảm bảo nhiều khả năng như:
- Quy định
Mọi tổ chức đều cần quản lý hoạt động của người dùng vì một số lý do. Quy định có thể được sử dụng để bảo vệ quyền của người dùng và bảo vệ họ khỏi các mối đe dọa hoặc lừa đảo.
Trích xuất văn bản từ hình ảnh cho phép tổ chức xử lý thông tin văn bản trên hình ảnh để quản lý, đặc biệt là khi hình ảnh được cung cấp bởi một số người dùng.
Ví dụ, có thể đạt được quy định giống như Facebook về số lượng văn bản trên hình ảnh được sử dụng cho quảng cáo bằng OCR. Ngoài ra, OCR cũng có thể ẩn nội dung nhạy cảm trên Twitter. - Khả năng tìm kiếm
Tìm kiếm là một trong những hoạt động phổ biến nhất, đặc biệt là trên internet. Các thuật toán tìm kiếm chủ yếu dựa trên việc thao tác văn bản. Với Nhận dạng ký tự quang học, có thể nhận dạng các ký tự trên hình ảnh và sử dụng chúng để cung cấp kết quả hình ảnh có liên quan cho người dùng. Tóm lại, hình ảnh và video hiện có thể tìm kiếm được với sự hỗ trợ của OCR. - Khả năng truy cập
Việc có văn bản trên hình ảnh luôn là một thách thức đối với khả năng truy cập và quy tắc chung là có ít văn bản trên hình ảnh. Với OCR, trình đọc màn hình có thể truy cập vào văn bản trên hình ảnh để cung cấp một số trải nghiệm cần thiết cho người dùng. - Tự động hóa xử lý dữ liệuViệc xử lý dữ liệu chủ yếu được tự động hóa theo quy mô. Việc có văn bản trên hình ảnh là một hạn chế đối với quá trình xử lý dữ liệu vì văn bản không thể được xử lý ngoại trừ thủ công. Nhận dạng ký tự quang học (OCR) giúp có thể trích xuất văn bản trên hình ảnh theo chương trình, do đó đảm bảo tự động hóa quá trình xử lý dữ liệu, đặc biệt là khi liên quan đến việc xử lý văn bản trên hình ảnh.
- Số hóa tài liệu in
Mọi thứ đang chuyển sang kỹ thuật số và vẫn còn rất nhiều tài liệu cần được số hóa. Séc, chứng chỉ và các tài liệu vật lý khác hiện có thể được số hóa bằng cách sử dụng Nhận dạng ký tự quang học.
Câu hỏi đó đã dẫn tôi đến Tesseract.js.“Làm thế nào tôi có thể sử dụng OCR trên web, đặc biệt là trong ứng dụng React?”
Tesseract.js là gì?
Tesseract.js là một thư viện JavaScript biên dịch Tesseract gốc từ C sang JavaScript WebAssembly, do đó có thể truy cập OCR trong trình duyệt. Công cụ Tesseract.js ban đầu được viết bằng ASM.js và sau đó được chuyển sang WebAssembly nhưng ASM.js vẫn đóng vai trò là bản sao lưu trong một số trường hợp khi WebAssembly không được hỗ trợ.Như đã nêu trên trang web của Tesseract.js, nó hỗ trợ hơn 100 ngôn ngữ, định hướng văn bản tự động và phát hiện tập lệnh, giao diện đơn giản để đọc đoạn văn, từ và hộp giới hạn ký tự.
Tesseract là một công cụ nhận dạng ký tự quang học cho nhiều hệ điều hành khác nhau. Đây là phần mềm miễn phí, được phát hành theo Giấy phép Apache. Hewlett-Packard đã phát triển Tesseract dưới dạng phần mềm độc quyền vào những năm 1980. Nó được phát hành dưới dạng mã nguồn mở vào năm 2005 và quá trình phát triển của nó đã được Google tài trợ kể từ năm 2006.
Phiên bản mới nhất, phiên bản 4, của Tesseract đã được phát hành vào tháng 10 năm 2018 và nó chứa một công cụ OCR mới sử dụng hệ thống mạng nơ-ron dựa trên Bộ nhớ dài hạn ngắn hạn (LSTM) và nó được thiết kế để tạo ra kết quả chính xác hơn.
Hiểu về API của Tesseract
Để thực sự hiểu cách Tesseract hoạt động, chúng ta cần phân tích một số API và các thành phần của chúng. Theo tài liệu Tesseract.js, có hai cách để tiếp cận việc sử dụng nó. Dưới đây là cách tiếp cận đầu tiên và phân tích của nó:
Mã:
Tesseract.recognize( image,language, { logger: m => console.log(m) }).catch (err => { console.error(err);}).then(result => { console.log(result);})}
recognize
lấy image làm đối số đầu tiên, language (có thể là nhiều) làm đối số thứ hai và { logger: m => console.log(me) }
làm đối số cuối cùng. Định dạng hình ảnh được Tesseract hỗ trợ là jpg, png, bmp và pbm chỉ có thể được cung cấp dưới dạng các phần tử (img, video hoặc canvas), đối tượng tệp (
), đối tượng blob, đường dẫn hoặc URL đến hình ảnh và hình ảnh được mã hóa base64. (Đọc tại đây để biết thêm thông tin về tất cả các định dạng hình ảnh mà Tesseract có thể xử lý.)Ngôn ngữ được cung cấp dưới dạng chuỗi như
eng
. Dấu +
có thể được sử dụng để nối nhiều ngôn ngữ như trong eng+chi_tra
. Đối số ngôn ngữ được sử dụng để xác định dữ liệu ngôn ngữ đã đào tạo sẽ được sử dụng trong quá trình xử lý hình ảnh.Lưu ý: Bạn sẽ tìm thấy tất cả các ngôn ngữ khả dụng và mã của chúng tại tại đây.
{ logger: m => console.log(m) }
rất hữu ích để lấy thông tin về tiến trình xử lý hình ảnh. Thuộc tính logger lấy một hàm sẽ được gọi nhiều lần khi Tesseract xử lý một hình ảnh. Tham số cho hàm logger phải là một đối tượng có workerId
, jobId
, status
và progress
làm các thuộc tính của nó:
Mã:
{ workerId: ‘worker-200030’, jobId: ‘job-734747’, status: ‘recognizing text’, progress: ‘0.9’ }
progress
là một số từ 0 đến 1 và được tính theo phần trăm để hiển thị tiến trình của quá trình nhận dạng hình ảnh.Tesseract tự động tạo đối tượng làm tham số cho hàm logger nhưng cũng có thể cung cấp thủ công. Khi quá trình nhận dạng đang diễn ra, các thuộc tính đối tượng
logger
được cập nhật mỗi lần hàm được gọi. Vì vậy, nó có thể được sử dụng để hiển thị thanh tiến trình chuyển đổi, thay đổi một số phần của ứng dụng hoặc được sử dụng để đạt được bất kỳ kết quả mong muốn nào.result
trong mã trên là kết quả của quá trình nhận dạng hình ảnh. Mỗi thuộc tính của result
đều có thuộc tính bbox là tọa độ x/y của hộp giới hạn của chúng.Sau đây là các thuộc tính của đối tượng
result
, ý nghĩa hoặc cách sử dụng của chúng:
Mã:
{ text: "Tôi là codingnninja đến từ Nigeria..." hocr: "