Share
Bạn đang tìm hiểu OCR là gì. Bạn muốn tìm kiếm một giải pháp cho bài toán OCR, hay thậm chí xây dựng phần mềm nhận dạng chữ ocr của riêng mình. Đây là bài viết dành cho bạn. Hãy tìm hiểu ngay nào!
OCR cần thiết cho thời đại tự động hóa như hiện nay. OCR hỗ trợ con người trong nhiều lĩnh vực của cuộc sống:
- Thực hiện công việc nhàm chán như nhập liệu thủ công.
- Kiểm tra thông tin giấy tờ, hoá đơn, biên lai.
- Hỗ trợ trong việc kiểm soát phương tiện và trật tự an toàn giao thông.
Để biết vì sao nó hữu ích như vậy, ta cùng tìm hiểu xem OCR là gì và cách thức công nghệ OCR hoạt động trong một phần mềm nhận dạng chữ nhé.
Thuật ngữ OCR là viết tắt của Optical Character Recognition, Nhận dạng ký tự quang học, được sử dụng để mô tả các kỹ thuật và công nghệ chuyển đổi hình ảnh văn bản sang định dạng khác mà máy tính có thể hiểu được.
Tổng quan về phần mềm nhận dạng chữ ocr
Một phần mềm nhận dạng chữ hoạt động qua những bước sau:
Bước 1: Nhận đầu vào là các tệp ảnh (ảnh chụp, ảnh được tạo bởi máy tính, ảnh scan), tệp pdf,...
Bước 2: Tự động phát hiện và nhận diện chữ, văn bản trên các tệp đó.
Bước 3: Chuyển đổi văn bản được nhận diện sang định dạng mà máy tính đọc được.
Bước 4: Xử lý trực tiếp kết quả trên hoặc lưu chúng vào một cơ sở dữ liệu để xử lý tập trung.
Trên thực tế, bài toán OCR rất khó. Chúng ta sẽ rất lâu mới có thể giải quyết được triệt để nó. Những thứ ảnh hưởng đến đầu vào đều thiên biến vạn hóa. Ví dụ như chất lượng, màu sắc, độ phân giải ảnh, nhiễu trong ảnh, hay kiểu cách của văn bản,...
Nếu OCR đã thật sự được giải quyết tốt, kết quả tìm kiếm trên Google của chúng ta về nó sẽ đưa đến một giải pháp, mà khi sử dụng ta không phải lo lắng nhiều về hiệu suất hay công sức.
Tuy nhiên, hiện tại OCR vẫn đang được phát triển để tiệm cận với mức hoàn hảo (có lẽ chỉ dừng ở tiệm cận, vì mọi thứ luôn có xác suất rủi ro). Do đó, lĩnh vực này luôn luôn cần nhân lực để nghiên cứu, vận hành, phát triển và duy trì các hệ thống nhận dạng.
Kết quả của một chương trình đơn giản về nhận diện chữ số trên ảnh
Một số ứng dụng điển hình của OCR có thể kể ra như:
* Chuyển đổi định dạng văn bản: chuyển các tệp hình ảnh hay pdf (tệp mà không thể sao chép văn bản một cách đơn giản) về file word, txt hay excel (tệp mà có thể xử lý nội dung bằng những cách thông thường).
* Nhận dạng biển số xe: sử dụng trong các bãi, hầm để xe; phục vụ trong việc kiểm soát lộ trình, xác định danh tính tài xế, hay thậm chí là phát hiện tội phạm,…
Nhận diện biển số trong một hầm để xe
* Nhận dạng biển báo giao thông: thông báo hoặc cảnh báo cho tài xế về các biển báo trong tầm nhìn.
Nhận diện chữ trên biển báo
* Trích xuất thông tin từ các loại giấy tờ như hóa đơn, bảo hiểm, danh thiếp, thẻ ngân hàng, chứng minh thư,...: thu thập những thông tin chỉ định một cách tự động (có thể lưu lại cơ sở dữ liệu hoặc xử lý trực tiếp).
Trích xuất thông tin chứng minh thư
* Nhập liệu tự động: Nhập thông tin chỉ định từ tài liệu vào phần mềm (trước đó cần trích xuất thông tin).
* Máy đọc cho người khiếm thị: kết hợp các công nghệ OCR và công nghệ chuyển đổi văn bản thành giọng nói (text to speech).
Các công ty, doanh nghiệp công nghệ hiện nay, gần như 100% đều sẽ có ít nhất một dự án về nghiên cứu và phát triển về lĩnh vực OCR, nhưng lại chưa được giải quyết thật sự tốt. Chính vì chưa có giải pháp đủ tốt để sử dụng chung, nên các công ty đều cố gắng đưa ra những cách giải quyết cạnh tranh với đối thủ, đến khi tiệm cận được kết quả tốt.
Rabiloo cũng không ngoại lệ, chúng tôi đã và đang nghiên cứu và triển khai một phần mềm nhận diện chữ trên ảnh, theo một giải pháp riêng. Phần mềm này đi sâu vào ứng dụng nhập liệu tự động của OCR. Hiệu suất của giải pháp này là khá tốt, khoảng 95%, khi thực nghiệm với bộ dữ liệu riêng. Phần mềm hiện tại đang được phát triển để luôn đạt được kết quả cạnh tranh. Vì cũng như thực trạng của bài toán OCR, chưa nơi nào có thể có một giải pháp nhận dạng chữ ocr đủ tốt để dùng chung, nên việc tiếp tục nâng cao hiệu suất sản phẩm về OCR là việc vô cùng cần thiết.
Hướng giải quyết chung các bài toán OCR luôn có 3 bước chính:
* Phát hiện văn bản (Text detection)
* Nhận dạng văn bản (Text recognition)
* Trích xuất thông tin (Information Extraction).
Mỗi bước chính này có thể cần tiền xử lý và/hoặc hậu xử lý dữ liệu nếu cần thiết.
Có thể trước đây ta vẫn nghĩ, "Chỉ đơn giản là lấy thông tin từ ảnh thôi, tại sao lại cần nhiều bước đến vậy?". Hoặc "Tại sao công nghệ phát triển đến vậy mà vẫn phải xử lý phức tạp thế?".
Việc con người hay máy móc nhận diện chữ trên ảnh đều phải theo từng bước: xác định văn bản nằm ở đâu (where), nội dung là gì (what) và những nội dung nào cần thiết cho yêu cầu (which). Do chúng ta thực hiện quá nhanh, nên vô tình không ý thức được rõ ràng từng bước, nên nghĩ việc đó cũng đơn giản với máy móc. Bản chất sự phát triển của công nghệ cũng đi từng bước phức tạp như vậy, chứ không phải đơn giản đi qua một bước mà ra được kết quả. (Những giải pháp tối ưu thì thường dài, nhưng điều ngược lại thì không chắc).
Để giúp mọi người có một cái nhìn cụ thể, tôi sẽ lấy bài toán Trích xuất thông tin từ hoá đơn tiếng Nhật làm ví dụ. Ta cùng đi sâu hơn vào từng bước.
Ở bước này, thông thường, hệ thống sẽ xác định vùng văn bản theo dòng. Nhưng nếu các chữ trong văn bản không đủ gần nhau, mỗi dòng có thể được chia thành nhiều vùng.
Sau khi xác định được vùng văn bản, phần mềm sẽ gán nhãn chúng bằng các hộp giới hạn (bounding boxes) (Hình 6). Hộp giới hạn là các hình chữ nhật bao quanh vật thể (ở đây là vùng văn bản) nhằm xác định vị trí của vật thể đó.
Việc vẽ các hộp lên ảnh chỉ phục vụ mục đích minh họa, còn bản chất việc phát hiện văn bản là đưa ra thông tin của các hộp giới hạn đó (có thể là toạ độ các góc, toạ độ tâm hoặc chiều dài, chiều rộng của hộp)
Minh họa kết quả của text detection
Nhưng khi nhận được dữ liệu là ảnh một hóa đơn với background như Hình 7, bạn sẽ xử lý thế nào để phát hiện văn bản:
Ảnh đầu vào với background phức tạp hơn
Khi ta sẽ đưa ảnh trên vào bước phát hiện văn bản luôn, tất nhiên kết quả trả về vẫn có thể đủ những phần văn bản cần thiết. Nhưng như vậy sẽ phát sinh một số vấn đề:
* Background có chứa văn bản hoặc chứa vật thể có thể bị nhận nhầm thành văn bản.
* Độ nghiêng của các dòng văn bản quá lệch so với nhau, sẽ ảnh hưởng đến thứ tự nhận dạng hộp giới hạn.
* Chất lượng hình ảnh có thể chưa đủ tốt.
Tất cả những vấn đề trên có thể chưa khiến việc phát hiện chữ gặp lỗi, nhưng sẽ ảnh hưởng không tốt đến bước nhận diện chữ sau này (Phần này là nhờ thực nghiệm nên chúng tôi phát hiện ra một số vấn đề).
Để khắc phục, chúng tôi đã quyết định tiền xử lý đầu vào qua 2 bước trước khi phát hiện văn bản. Đó là Cắt vùng ảnh quan tâm (Crop ROI) và Nâng cao chất lượng ảnh (Enhance). Kết quả sau tiền xử lý như Hình 8a và 8b.
a. Kết quả sau Crop ROI; b. Kết quả sau Enhance; c. Kết quả sau Detection
Bằng mắt thường chúng ta có thể khó nhận ra sự khác biệt giữa ảnh trước Enhance và sau Enhance. Nhưng khi thực nghiệm, hiệu suất sau Enhance tăng lên 5% (từ 75% lên 80%). Có thể cách máy móc quan sát ảnh sẽ "tỉ mỉ" hơn con người đôi chút :D.
Ảnh sau 2 bước tiền xử lý sẽ đưa qua mô hình Học sâu (Deep Learning) để phát hiện văn bản. Kết quả được trực quan hóa như Hình 8c. Với trường hợp này, phần mềm phát hiện được tất cả vùng văn bản và vùng có thể nhận là văn bản.
Ta sẽ dựa vào thông tin các hộp giới hạn của vùng văn bản để lấy ra các ảnh, mỗi ảnh là một vùng văn bản đã được phát hiện. Với hình 7 sẽ có 37 ảnh đầu ra (ứng với 37 hộp). Để biết những ảnh đó có nội dung gì, ta sẽ đưa chúng qua bước nhận dạng văn bản.
Đến bước này, các ảnh chứa vùng văn bản sẽ được phần mềm nhận dạng, rồi đưa về định dạng mà máy có thể hiểu và xử lý được (thường được lưu dưới dạng file txt).
Ban đầu, khi chưa hậu xử lý, hiệu suất nhận dạng chỉ đạt 80%. Kết quả này có thể bắt nguồn từ 2 vấn đề chính:
* Dữ liệu chưa đủ nhiều hoặc mô hình chưa đủ tốt để phần mềm đạt hiệu suất cao.
* Văn bản khá đặc thù (tiếng Nhật) nên gây khó khăn cho việc nhận diện chữ.
Xét về vấn đề 1, việc xử lý mất quá nhiều thời gian khi phải tìm kiếm mô hình, xây dựng bộ dữ liệu, huấn luyện mô hình. Mặt khác, hiệu suất phần mềm không đảm bảo sẽ tốt hơn. Vậy nên Rabiloo quyết định chọn xử lý vấn đề 2. Cụ thể, chúng tôi đã hậu xử lý đầu ra của bước nhận dạng, đó là Sửa lỗi chính tả (Spell Correction).
Việc sửa lỗi chính tả này chủ yếu dựa trên luật, và nó thực sự có hiệu quả, giúp hiệu suất tăng thêm 13% (từ 80% lên 93%).
Khi có được thông tin (sau detection) và nội dung (sau recognition) của các vùng ảnh, ta có thể trực quan hóa kết quả như hình 9 (kết quả được viết lên một ảnh trắng, có kích thước bằng ảnh sau bước Crop ROI).
Kết quả sau khi phát hiện và nhận dạng văn bản
Kết quả trên đạt 94.6% tổng số từ (35/37 boxes đúng) và 99% tổng số ký tự (289/292 ký tự đúng). Những phần chưa nhận diện được bao gồm:
* Dòng thứ 11 (box thứ 13), nội dung là "※フライドポテ卜 シュ-ス卜リングカッ卜 1KG 195", khi viết thì bị tràn độ rộng của ảnh nên chưa hiện hết
* Dòng mã vạch (box thứ 35) bị nhận dạng sai (bước trích xuất thông tin sẽ loại bỏ nội dung này).
Sau khi có kết quả nhận diện chữ trên ảnh, ta đi đến bước cuối cùng, trích xuất thông tin.
Tại đây, phần mềm sẽ chọn lọc những trường thông tin đã được chỉ định hoặc có ý nghĩa (tùy yêu cầu của người sử dụng), bỏ qua những thông tin còn lại. Thông tin được chỉ định sẽ thay đổi tùy thuộc vào yêu cầu của khách hàng. Với bài toán ban đầu, kết quả sau khi trích xuất thông tin được xuất ra file txt như Hình 10.
Kết quả sau khi trích xuất thông tin
Những trường thông tin cần thiết của bài toán gồm:
* Địa chỉ cửa hàng
* Ngày xuất hoá đơn
* Sản phẩm (Tên + Giá)
* Tổng giá và Tiền trả lại
Những trường ta lấy được từ Hình 7 gồm:
* Ngày xuất hoá đơn
* Sản phẩm
* Tổng giá
Như vậy, phần mềm nhận dạng chữ nhận đầu vào là một ảnh (tương tự Hình 7) và trả về một tệp văn bản (tương tự Hình 10). Và một pipeline chi tiết mà chúng tôi đã sử dụng để giải quyết bài toán đã đặt ra như sau:
Giải pháp tổng hợp cho bài toán OCR
Bài viết này đã trả lời cho câu hỏi OCR là gì, cung cấp một số thông tin về OCR và trình tự giải quyết một bài toán OCR. Hy vọng mọi người thấy có ích và ủng hộ những bài viết sắp tới về Trí tuệ nhân tạo của tôi.
Cảm ơn mọi người đã theo dõi bài viết này. Để xem thêm những kiến thức khác về công nghệ, hãy truy cập kênh tri thức của Rabiloo tại đây.
Nếu độc giả quan tâm đến các dịch vụ như: phát triển website, phần mềm, game, trí tuệ nhân tạo, hãy liên hệ với Rabiloo, chúng tôi luôn sẵn sàng tư vấn miễn phí mọi thắc mắc của các bạn.
Hẹn mọi người trong những bài viết tiếp theo.
Share