3.3.2. Chức năng OCR
Modul OCR được tạo ra bằng cách sử dụng thư viện liên kết động tesseract3.01.dll. Luận văn xây dựng một .NET wrapper dưới dạng file dll managed C++, dựa trên mã nguồn mở tesseract-ocr [13] và tesseractdotnet [14]. Hàm nhận dạng trong thư viện tesseract3.01.dll với một số tham số đầu vào quan trọng như sau:
- PageSegMode: tesseract hỗ trợ chế độ 11 phân trang, bao gồm
PSM_OSD_ONLY = 0, PSM_AUTO_OSD = 1, PSM_AUTO_ONLY = 2, PSM_AUTO = 3, PSM_SINGLE_COLUMN = 4, PSM_SINGLE_BLOCK_VERT_TEXT = 5, PSM_SINGLE_BLOCK = 6, PSM_SINGLE_LINE = 7, PSM_SINGLE_WORD = 8, PSM_CIRCLE_WORD = 9, PSM_SINGLE_CHAR = 10.
- OcrEngineMode: tesseract hỗ trợ 3 chế độ OCR, bao gồm
OEM_TESSERACT_ONLY = 0, OEM_CUBE_ONLY = 1, OEM_TESSERACT_CUBE_COMBINED = 2, OEM_DEFAULT = 3.
- ThresholdingMethod: tesseract hỗ trợ 2 phương pháp chọn ngưỡng trong nhị phân hóa ảnh, bao gồm TM_OTSU_THRESHOLDING = 0, TM_ISODATA_LOCAL_ADAPTIVE_THRESHOLDING = 1.
Các tham số trên được miêu tả chi tiết trong tài liệu Tesseract. Hàm nhận dạng (OcrFromImage) được xây dựng như sau:
Hình 3.17. Định nghĩa hàm OcrFromImage()
Hiện tại chức năng OCR có thể thực hiện với hơn 30 ngôn ngữ khác nhau đã được huấn luyện. Tốc độ xử lý phụ thuộc vào từng ngôn ngữ. Với các ngôn
ngữ tượng hình thì tốc độ xử lý chậm hơn nhiều so với ngôn ngữ Latinh. Dữ liệu huấn luyện cho ngôn ngữ tượng hình cũng khá lớn so với ngôn ngữ Latinh. 3.3.3. Chức năng hậu xử lý kết quả OCR
Sau khi OCR, kết quả đưa ra tồn tại nhiều lỗi nhận dạng không mong muốn. Chức năng này có tác dụng sửa một số lỗi cơ bản nhằm làm tăng chất lượng nhận dạng trên 3 loại ảnh khác nhau.
Đối với ảnh là một vùng số: sẽ thực hiện loại bỏ các ký tự không phải là số.
Đối với ảnh tài liệu (sách, báo):
˗ Sửa lỗi chữ hoa, chữ thường. Ví dụ: hOa=hoa, HoA=HOA.
˗ Sửa lỗi về dấu chấm câu, dấu phẩy: trước các dấu này đi liền với một từ. ˗ Xóa bỏ những từ có khả năng là do nhận dạng vùng ảnh bị nhiễu gây nên,
là các từ chứa ký tự không phải ký tự của ngôn ngữ. Ví dụ „/”~_+.
˗ Thay thế các cụm ký tự hay bị nhận dạng sai. Ví dụ trong tiếng Việt: oĩ=ơi, âỳ=ấy, tmg=úng, lc=k. Danh sách các từ thay thế này được lưu vào file text (vie_document.txt, eng_document.txt) theo định dạng: một cặp từ cần thay thế và thay thế lưu trên một dòng text, cách nhau một khoảng trắng. Danh sách các từ thay thế này ở các ngôn ngữ khác nhau sẽ khác nhau. Do đó cần thống kê kết quả nhận dạng trên nhiều ngôn ngữ mới xây dựng được một bộ dữ liệu tương đối chính xác.
˗ Xử lý nhầm lẫn giữa số 0 và ký tự o.
Đối với ảnh namecard: phương pháp sửa lỗi cũng tương tự như như đối với ảnh tài liệu, song danh sách các từ thay thế có phần đặc trưng hơn (ví dụ Mobiie =Mobile, .oom = .com, wvw = www, @yah00 = @yahoo).
3.3.4. Chức năng sửa lỗi chính tả tự động
Sau khi server thực hiện chức năng OCR, nếu client yêu cầu kiểm tra lỗi chính tả, chức năng sửa lỗi chính tả tự động được sử dụng và được thực hiện trước chức năng dịch sang ngôn ngữ khác. Luận văn đề xuất một phương pháp sửa lỗi chính tả tự động cho một chuỗi đầu vào tuân theo tuần tự các bước sau:
- Tách chuỗi cần sửa lỗi ra thành từng từ.
- Đối với mỗi từ, kiểm tra sự tồn tại của từ trong từ điển tương ứng (ví dụ OCR ngôn ngữ tiếng Anh thì kiểm tra trong từ điển tiếng Anh).
- Nếu đúng, kiểm tra từ tiếp theo.
- Nếu sai, sử dụng kết hợp hai hàm đánh giá MED (minimum edit distance) và maximum số cặp ký tự giống nhau để tự động chọn ra từ có khả năng nhất thay thế từ bị lỗi.
Dữ liệu từ điển được lấy từ trang web
http://ftp.osuosl.org/pub/openoffice/contrib/dictionaries. Từ trong các từ điển này có thể là từ đơn hoặc từ ghép. Luận văn xây dựng một modul nhỏ để thực hiện lọc tất cả các từ đơn trên từ điển gốc và lưu lại vào file từ điển mới có định dạng languagecode.dict, languagecode tuân theo tiêu chuẩn ISO 639-3 (ví dụ eng.dict, vie.dict). Các từ đơn trong các từ điển mới này lưu ở dạng text, mỗi từ nằm trên một dòng. Hiện tại hệ thống hỗ trợ sửa lỗi chính tả tự động trên 10 ngôn ngữ Latinh khác nhau.
3.3.4.1. Hàm đánh giá minimum edit distance (MED)
Để so sánh độ tương đồng giữa hai chuỗi ký tự, người ta hay dùng định nghĩa edit distance. Đó là số bé nhất (minimum) các thao tác xóa, thêm, sửa ký tự cần thiết để chuyển một chuỗi này về chuỗi kia. Ví dụ cần chuyển chuỗi
“ENWRONMENTS” về chuỗi “ENVIRONMENT”. Ký tự “-” là ký tự chưa phù hợp giữa hai chuỗi.
Dòng 1: ENVIRONMENT- Dòng 2: ENW-RONMENTS
Nhìn vào vị trí tương quan của hai chuỗi ở trường hợp trên, ta thấy cần ít nhất 3 thao tác trên chuỗi ở dòng 2 để chuyển chuỗi ở dòng 2 về chuỗi ở dòng 1: thay ký tự “W” thành “N”, thêm ký tự “I” vào trước ký tự “R”, xóa ký tự “S”
ở cuối cùng. Đối với 2 chuỗi này, sau khi quét hết các phương án chuyển đổi,
edit distance được xác định bằng 3.
Trong danh sách các từ trong từ điển, ta tính lần lượt edit distance với từ cần sửa lỗi rồi ưu tiên chọn từ có edit distance (với từ cần sửa lỗi) bé nhất so với các từ còn lại. Qua bước này có thể sẽ cho ra một danh sách các từ đề nghị thay thế có cùng edit distance bé nhất với từ bị lỗi.
3.3.4.2. Hàm đánh giá maximum số cặp ký tự giống nhau
Sau khi thực hiện đánh giá sử dụng thuật toán MED, nếu danh sách các từ đề nghị thay thế nhiều hơn 1 từ sẽ tiến hành áp dụng thêm đánh giá maximum số cặp ký tự giống nhau. Phương pháp mô tả như sau:
- Từ cần sửa lỗi : enwronment.
- Giả sử danh sách từ đề nghị {enrolment, environment}. - Từ cần sửa lỗi enwronment có 9 cặp ký tự từ trái qua phải gồm:
{en, nw, wr, ro, on, nm, me, en, nt} - Từ enrolment có 8 cặp ký tự từ trái qua phải gồm:
- Từ environment có 10 cặp ký tự từ trái qua phải gồm:
{en, nv, vi, ir, ro, on, nm, me, en, nt} - Số cặp ký tự giống nhau giữa 2 từ {enwronment,enrolment} là 5 - Số cặp ký tự giống nhau giữa 2 từ {enwronment,environment} là 7 - Ưu tiên chọn từ environment để sửa lỗi cho từ enwronment.
3.3.5. Chức năng dịch sang ngôn ngữ khác
Sau khi server thực hiện thành công việc OCR (và sửa lỗi chính tả) trên ảnh do client gửi về sẽ cho ra kết quả là một chuỗi ký tự. Nếu trong yêu cầu của client có tùy chọn dịch kết quả nhận dạng sang một ngôn ngữ khác, server thực hiện tiếp chức năng dịch theo yêu cầu trước khi gửi trả kết quả về lại cho server. Chức năng dịch được xây dựng dựa trên nền tảng công nghệ dịch tự động của hãng Google bằng cách sử dụng các hàm API từ thư viện
GoogleTranslateAPI.Net20.dll (do Google cung cấp) để có thể tận dụng được sức mạnh máy dịch khổng lồ này . Do vậy kết quả sau khi server thực hiện chức năng dịch giống hoàn toàn như khi dịch trên dịch vụ trực tuyến Google Translate.
CHƢƠNG 4 – THỰC NGHIỆM VÀ ĐÁNH GIÁ
Hệ thống đã xây dựng tạm gọi là Android OCR. Chức năng OCR của hệ thống sử dụng 3 modul riêng biệt: modul tiền xử lý ảnh trước khi OCR, modul OCR sử dụng Tesseract, modul hậu xử lý kết quả OCR.
Việc thực nghiệm và đánh giá chỉ thực hiện chức năng nhận dạng. Về tập mẫu để thực nghiệm, luận văn sử dụng tập ảnh chụp name card từ camera 3.15MP trên điện thoại LG GT 540 chạy hệ điều hành Android 2.1. Lý do luận văn chọn tập mẫu dạng này vì hàng ngày mọi người thường hay trao đổi name card khi cần liên lạc lẫn nhau. Và từ đó nảy sinh ra nhu cầu rút trích và quản lý những thông tin trong name card với những chiếc điện thoại di động được trang bị khả năng này. Công việc đánh giá thực hiện trên 3 nội dung sau:
4.1. Thực nghiệm trên Tesseract engine
4.1.1. Tập mẫu thực nghiệm
Tesseract OCR engine có thể thực hiện OCR với nhiều định dạng tài liệu ảnh khác nhau chụp từ điện thoại như file .tiff , .jpg , .png. Việc thực nghiệm được tiến hành trên 51 ảnh name card, bao gồm 33 card tiếng Việt và 18 card, đa phần là card cũ đã qua sử dụng. Thiết bị chụp ảnh là camera 3.15MP trên điện thoại LG GT540, ảnh được chụp cẩn thận trong điều kiện ánh sáng bình thường. Do camera có độ phân giải bình thường, tầm nhìn nhỏ, bố cục name card phức tạp, nhiều vùng text có font chữ bé và đa dạng nên đã thực hiện việc chụp từng vùng text (chụp những phần thông tin riêng lẻ quan trọng như tên, địa chỉ, điện thoại) chứ không chụp toàn bộ card. Điều này giúp giảm thời gian xử lý cũng như tăng cường độ chính xác trong kết quả nhận dạng, loại bỏ những ký tự nhận dạng thừa từ những vùng ảnh không cần thiết.
4.1.2. Kết quả OCR
Hình ảnh các vùng ảnh trên name card tiêu biểu chụp từ điện thoại và kết quả OCR:
4.1.3. Nhận xét
Trong thực nghiệm chỉ thống kê và tính tỉ lệ lỗi từ trong kết quả OCR bằng cách tính số từ nhận dạng bị lỗi trên tổng số từ. Một từ gọi là bị lỗi khi có ít
nhất một ký tự trong từ bị nhận dạng sai. Do đó tỉ lệ lỗi ký tự (số ký tự nhận dạng lỗi trên tổng số ký tự) sẽ thấp hơn tỉ lệ lỗi từ.
Ví dụ với hình ảnh chụp được:
sẽ cho ra kết quả OCR sau :
CỐNG TYTNHH THƢƠNG MẠI KHÔNG GIỚI HẠN CHÁU Ả SANDY EMART 3'
Khi đó: tỉ lệ lỗi từ là 5/11 = 45,45% , tỉ lệ lỗi ký tự là 4/46= 8,69%.
Với bảng thống kê kết quả OCR ở trên, tuy có thể không đúng khi thực nghiệm trên tập ảnh khác nhưng vẫn có thể đưa ra một số nhận xét sau:
- Tesseract là một engine OCR tốt.
- Kết quả OCR trên tài liệu ảnh tiếng Anh thường tốt hơn tiếng Việt. Điều này có thể xuất phát từ một số nguyên nhân: Tesseract ban đầu được thiết kế với chỉ mục đích nhận dạng chữ tiếng Anh; chữ tiếng Anh đơn giản hơn chữ tiếng Việt; dữ liệu tập huấn cho tiếng Anh tốt hơn tiếng Việt. - Kết quả OCR trên vùng ảnh chứa số tốt hơn trên vùng ảnh chứa text.
Trong quá trình thực nghiệm, hệ thống đã thử với một số file ảnh ứng với một số ngôn ngữ khác. Kết quả cho thấy độ chính xác trên hệ ngôn ngữ Latinh tốt hơn đối với một số hệ ngôn ngữ khác như hệ chữ tượng hình (ví dụ như chữ Trung Quốc). Những ngôn ngữ có bộ chữ cái càng lớn, thời gian nhận dạng càng lâu, kết quả nhận dạng sẽ thấp nếu không tạo bộ dữ liệu đủ lớn và phong phú cho việc tập huấn.
4.2. Thực nghiệm trên một số hệ thống OCR khác nhau
Thực nghiệm được tiến hành trên một số hệ thống OCR khác nhau với cùng một tập mẫu. Các hệ thống bao gồm: Android OCR (luận văn xây dựng), Tesseract engine (nguyên thủy), dịch vụ OCR tại địa chỉ http://docs.google.com, dịch vụ OCR tại địa chỉ http://www.free-ocr.com. Luận văn không đánh giá khả năng OCR hơn hay kém giữa các hệ thống mà dựa kết quả tương quan ấy để tìm cách chọn engine OCR nào phù hợp trong việc xây dựng các hệ thống OCR, cũng như tìm kiếm các giải pháp cải tiến khả năng của hệ thống đã xây dựng .
4.2.1. Tập mẫu thực nghiệm
Tập mẫu thực nghiệm được rút ra có chọn lựa từ tập mẫu thực nghiệm cho Tesseract OCR engine ở trên. Những ảnh trong tập mẫu này cơ bản là ảnh “tốt” trong tập mẫu gốc, độ chính xác kết quả OCR cho ra bởi các hệ thống. Tập mẫu gồm 41 ảnh, trong đó có 18 ảnh tiếng Anh, 23 ảnh tiếng Việt.
4.2.2. Kết quả
Hình 4.2. Kết quả thực nghiệm OCR trên 4 hệ thống khác nhau
4.2.3. Nhận xét
Kết quả thống kê cũng cho thấy khả năng của nhiều hệ thống OCR thực hiện trên ngôn ngữ tiếng Anh có phần tốt hơn so với tiếng Việt. Cũng qua kết quả thực nghiệm ở trên cho thấy Tesseract là một engine OCR hiệu quả. Với sự đóng góp liên tục của cộng đồng quan tâm đến lĩnh vực nhận dạng mã nguồn mở, Tesseract tiềm năng sẽ là một công cụ nhận dạng tuyệt vời trong tương lai gần, có thể sánh ngang với các sản phẩm OCR thương mại nổi tiếng. Hệ thống Android OCR đã kế thừa khả năng của Tesseract engine, kết hợp với các bước tiền xử lý và hậu xử lý OCR, giúp hệ thống Android OCR có một khả năng nhận dạng tốt.
KẾT LUẬN
Hiện nay lĩnh vực OCR, với mục đích chính là rút trích các ký tự trong ảnh và lưu thành dạng text, được ứng dụng một cách rộng rãi trong nhiều lĩnh đời sống. Nhiều hệ thống OCR được xây dựng và đưa ra dưới dạng sản phẩm thương mại hoặc miễn phí, thậm chí dưới dạng mã nguồn mở. Với mong muốn tìm hiểu lĩnh vực OCR và góp phần trong việc bổ sung vào kho ứng dụng OCR một sản phẩm mới, luận văn đã đi vào nghiên cứu “Xây dựng hệ thống nhận dạng và dịch trên thiết bị di động” sử dụng công nghệ OCR mã nguồn mở tiên tiến Tesseract OCR.
Qua quá trình làm luận văn, ngoài việc tạo ra được một sản phẩm OCR thực tế, bản thân đã có cơ hội tìm tòi và hiểu biết nhiều hơn, rộng hơn về lĩnh vực OCR và lập trình ứng dụng. Bản thân đã hiểu biết được nguyên lý hoạt động của một hệ thống OCR cơ bản; biết tổng quan về các phương pháp, các thuật toán được sử dụng để nhị phân hóa ảnh, dò hướng và chỉnh độ nghiêng của ảnh, phân tích bố cục trang ảnh, phương pháp nhận dạng ký tự...; hiểu biết về công nghệ Tesseract OCR, công nghệ dịch máy Google Translate, công nghệ Android. Ngoài ra, bản thân được nâng cao về kỹ năng lập trình trên điện thoại di động, cách thức xây dựng ứng dụng client/server, xây dựng ứng dụng từ mã nguồn mở.
Trong khuôn khổ của luận văn, tôi trình bày một cách tổng quan về lĩnh vực OCR cũng như một số vấn đề liên quan. Do mục đích của luận văn là nghiên cứu xây dựng hệ thống nhận dạng và dịch sử dụng mã nguồn mở cũng như một số công nghệ tiên tiến hiện có nên không đi sâu vào lý thuyết từng phương pháp, từng thuật toán cụ thể được sử dụng trong các bước của một hệ thống OCR. Tuy nhiên luận văn tập trung vào nghiên cứu công nghệ nguồn mở Tesseract, công nghệ Android và một số công nghệ khác như công nghệ dịch của Google, phương pháp sửa lỗi chỉnh tả tự động, phương pháp tiền xử lý ảnh.
Giải pháp xây dựng hệ thống nhận dạng và dịch trên thiết bị di động đã giải quyết một số vấn đề về nhu cầu nhận dạng và dịch thông qua điện thoại. Ưu điểm của hệ thống này là có thể sử dụng điện thoại hệ điều hành Android có internet để chụp ảnh, yêu cầu nhận dạng và dịch với nhiều ngôn ngữ khác nhau. Đối với một số ngôn ngữ mà bộ chữ cái lớn (ví dụ chữ Trung Quốc), thời gian nhận dạng tăng lên rất nhiều lần so với các ngôn ngữ có bộ chữ cái bé (ví dụ ngôn ngữ Latinh). Do đó hệ thống đã tận dụng được sức mạnh tính toán của server (được sử dụng trong mô hình client/server) để giải quyết vấn đề tốc độ xử
lý, trong khi với tốc độ tính toán của bộ vi xử lý trên hầu hết điện thoại hệ điều hành Androi hiện nay chưa cho phép thực hiện điều này.
Tuy nhiên hệ thống vẫn còn một số điểm chưa thực sự hiệu quả. Khi điện thoại không kết nối được với server (có thể do không kết nối được với internet, dịch vụ ocr trên server trục trặc) thì hệ thống không thể hoạt động được. Ngoài ra do hạn chế về mặt thời gian, luận văn chưa có điều kiện nghiên cứu tích hợp