Nhận dạng ký tự quang học (OCR) với Tesseract.js

NodeJS Mar 10, 2021

Nhận dạng ký tự quang học hay OCR ra đời từ những năm 90 của thế kỷ trước, từng là một bước tiến tuyệt vời giúp các doanh nghiệp số hóa các giấy. Tuy dần dần trở nên lỗi thời và bộc lộ nhiều hạn chế nhưng nhờ sự phát triển mạnh của AI đặc biệt là Deep Learning, OCR đã hồi sinh mạnh mẽ và được ứng dụng trong nhiều lĩnh vực quan trọng.

Tesseract.js là gì?

Tesseract là một thư viện nổi tiếng, từng được đánh giá là một trong những công cụ OCR mã nguồn mở chính xác nhất hiện có. Được phát triển bởi Hewlett-Packard dưới dạng phần mềm độc quyền, tới năm 2005 phát hành dưới dạng mã nguồn mở và được Google tài trợ phát triển từ năm 2006. Với ngôn ngữ chính C/C++ có thể hoạt động trên 3 hệ điều hành phổ biến là Window, Mac và Linux. Phiên bản ổn định mới nhất 4.1.1 hỗ trợ nhận diện lên đến 116 ngôn ngữ.

Tesseract.js giúp hỗ trợ việc thực thi Tesseract với JavaScript. Tesseract.js bao gồm một cổng biên dịch (emscripten port) của Tesseract OCR Engine. Nó hoạt động trong trình duyệt bằng cách sử dụng webpack hoặc thẻ script với CDN và trên máy chủ Node.js

Cài đặt

CDN

<!-- v2 -->
<script src='https://unpkg.com/tesseract.js@v2.1.0/dist/tesseract.min.js'></script>

<!-- v1 -->
<script src='https://unpkg.com/tesseract.js@1.0.19/src/index.js'></script>

Nodejs

Tesseract.js yêu cầu Node.js v6.8.0 hoặc cao hơn

# For v2
npm install tesseract.js
yarn add tesseract.js

# For v1
npm install tesseract.js@1
yarn add tesseract.js@1

Sử dụng

Worker

Worker về cơ bản là Web Worker trong trình duyệt và Child Process trong Node. Worker giúp thực hiện các tác vụ liên quan đến OCR. Luồng khai báo đầy đủ bao gồm:

  • load: Tải tesseract.js-core, giúp Worker sẵn sàng cho các hành động tiếp theo.
  • FS functions: (Tùy chọn) Các hàm FS xử lý file.
  • loadLanguauge: Tải dữ traineddata từ bộ nhớ đệm hoặc tải xuống nếu chưa có và đưa vào hệ thống tệp WebAssembly.
  • initialize: Khởi tạo API Tesseract, đảm bảo rằng nó đã sẵn sàng để thực hiện các tác vụ OCR.
  • setParameters: (Tùy chọn): Thiết lập các tham số cho Tesseract API (sử dụng SetVariable ()), nó thay đổi hành vi của Tesseract và một số tham số hữu ích như tessedit_char_whitelist.
  • recognize: Cung cấp chức năng cốt lõi của Tesseract.js là thực thi OCR.
  • terminate: Dừng các Worker và dọn dẹp tài nguyên.

Ví dụ:

const { createWorker } = require('tesseract.js');

const worker = createWorker();

(async () => {
  await worker.load();
  await worker.loadLanguage('eng');
  await worker.initialize('eng');
  const { data: { text } } = await worker.recognize('path/to/image');
  console.log(text);
  await worker.terminate();
})();

Kết quả sau khi thực hiện:

Mild Splendour of the various-vested Night!
Mother of wildly-working visions! haill
I watch thy gliding, while with watery light
Thy weak eye glimmers through a fleecy veil;
And when thou lovest thy pale orb to shroud
Behind the gather'd blackness lost on high;
And when thou dartest from the wind-rent cloud
Thy placid lightning o’er the awaken’d sky.

Hạn chế ký tự với tessedit_char_whitelist

Trong một số trường hợp, nội dung của các ảnh có thể đoán trước. Việc giới hạn kết quả chỉ nằm trong một số ký tự nhất định sẽ giúp tối ưu kết quả trả về.

Chỉ nhận diện các ký tự số từ 0 - 9:

(async () => {
  await worker.setParameters({
    tessedit_char_whitelist: '0123456789',
  });
}

Tham khảo các tham số khác tại đây

Kết luận

Tesseract.js là một công cụ tuyệt vời thích hợp để sử dụng như một phần mềm phụ trợ và sử dụng cho các tác vụ OCR cao hơn, hoàn toàn miễn phí dành cho nhà phát triển Node.js. Tài liệu đầy đủ có thể tìm thấy tại Tài liệu Tesseract.

Tuy nhiên, đầu ra của Tesseract sẽ có chất lượng rất kém nếu ảnh chưa được xử lý. Tương tự như các ứng dụng khác của Thị giác máy tính, nhận diện luôn là bước cuối cùng, ảnh phải được xử lý rõ ràng trước khi vào nhận diện. Để làm rõ cũng như cải thiện vấn đề này, hẹn gặp lại vào bài viết tiếp theo: Xử lý ảnh với thư viện OpenCV.

Tham khảo

https://github.com/naptha/tesseract.js
https://en.wikipedia.org/wiki/Tesseract_(software)
https://github.com/tesseract-ocr/tesseract

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.