Xem mẫu

  1. KỈ YẾU HỘI NGHỊ SINH VIÊN NGHIÊN CỨU KHOA HỌC NĂM HỌC 2013-2014 NHẬN DẠNG TIẾNG VIỆT TRÊN HỆ ĐIỀU HÀNH ANDROID Phạm Thúy Nga, Lớp K60B, Khoa Công nghệ Thông tin GVHD: ThS. Nguyễn Minh Quang Tóm tắt: Công nghệ nhận dạng kí tự quang học (Optical Character Recognition - OCR) là một công nghệ được ứng dụng rộng rãi trong các phần mềm desktop và mobile, nhằm trích xuất văn bản từ ảnh scan hoặc ảnh chụp qua camera. Tại Việt Nam, đã có nhiều hướng nghiên cứu ứng dụng OCR trong các bài toán nhận dạng chữ in tiếng Việt từ file ảnh có sẵn trên máy tính, file PDF hoặc ảnh scan. Tuy nhiên hiện nay hầu như chưa có nghiên cứu nào tập trung vào việc nhận dạng tiếng Việt trên nền tảng di động. Trong bài báo này chúng tôi giới thiệu một phương pháp nhận dạng tiếng Việt từ ảnh chụp trên điện thoại di động sử dụng hệ điều hành Android. Phương pháp này sử dụng thư viện Tesseract của Google, xây dựng bộ dữ liệu hoàn chỉnh hơn so với gói dữ liệu sẵn có của Tesseract, cùng với thuật toán xử lí lỗi trên đoạn văn bản sau khi nhận dạng. Kết quả nhận dạng cho kết quả tương đối cao với độ chính xác 93%. Từ khóa: Nhận dạng kí tự quang học, nhận dạng tiếng Việt, OCR, Tesseract. I. MỞ ĐẦU Nhận dạng kí tự quang học là một công nghệ hữu ích để chuyển các ảnh chụp văn bản, ảnh quét, tập tin PDF sang dạng số, phục vụ cho việc số hóa tài liệu, lƣu trữ, xử lí văn bản, tìm kiếm… và nhiều ứng dụng khác [2]. Trƣớc đây, OCR đƣợc phát triển dành riêng cho máy in, máy quét để nhận dạng văn bản, phổ biến nhất là tự động chuyển văn bản scan thành tài liệu lƣu trên máy tính. Cùng với sự phát triển của các thiết bị cầm tay, nhiều nghiên cứu bắt đầu hƣớng đến việc áp dụng OCR trên hệ điều hành di động, do lợi thế to lớn của những thiết bị di động, nhƣ sự nhỏ gọn, tiện lợi, có thể mang đi mọi lúc mọi nơi và đƣợc trang bị nhiều chức năng không kém các máy tính thông thƣờng. Đối với tiếng Việt, việc nghiên cứu OCR trên di động có thể mang lại nhiều lợi ích to lớn cả về nghiên cứu lẫn ứng dụng. Nhận dạng tiếng Việt thành công có thể phục vụ cho việc số hóa thủ tục hành chính, ví dụ lƣu trữ thông tin thông qua ảnh chụp chứng minh thƣ, biển số xe…, phục vụ công tác quốc phòng – an ninh; về mặt dân sự, nghiên cứu này hỗ trợ cho việc xây dựng những ứng dụng dịch thuật, đọc văn bản cho ngƣời khiếm thị, tìm kiếm thông tin… từ những văn bản linh động hơn nhiều so với văn bản quét, nhƣ business card, tựa đề sách báo, biển quảng cáo, hóa đơn, v.v… Hiện nay, trên thế giới đã có nhiều nghiên cứu cũng nhƣ ứng dụng OCR để nhận dạng chữ in ở nhiều ngôn ngữ khác nhau trên hệ điều hành di động. Nhìn chung, vấn đề nhận dạng kí tự Latinh gần nhƣ đã đƣợc giải quyết [1], [2]. Hƣớng nghiên cứu trong những năm gần đây tập trung vào nhận dạng các ngôn ngữ có kí tự tựa Latinh nhƣng thêm dấu hoặc kí tự đặc biệt, nhƣ tiếng Pháp, tiếng Nga… và ngôn ngữ tƣợng hình. Một nghiên cứu của Hasnat tại Bangladesh đã cho ra đời ứng dụng hoàn chỉnh dựa trên mã nguồn mở Tesseract để nhận dạng tiếng Bangla, một ngôn ngữ có nguồn gốc tiếng Phạn, thuộc nhóm tƣợng hình [3]. Mới đây nhất, Google đã cho ra đời ứng dụng Google Goggles [4] trên cả Android và iOS, một ứng dụng mạnh mẽ cho phép ngƣời sử dụng tìm kiếm trên web bằng 171
  2. KỈ YẾU HỘI NGHỊ SINH VIÊN NGHIÊN CỨU KHOA HỌC NĂM HỌC 2013-2014 ảnh chụp trên điện thoại di động, bằng nhiều ngôn ngữ khác nhau chủ yếu có nguồn gốc tiếng Latinh. \par. Tại Việt Nam, nhiều dự án nhận dạng tiếng Việt in đã đƣợc áp dụng vào thực tế, nhƣ phần mềm VnDOCR 4.0, có thể nhận dạng trực tiếp tài liệu, sách báo đƣợc quét qua máy quét, không cần thông qua tập tin ảnh trung gian với tỉ lệ nhận dạng tới 99% [5], dự án VietOCR, là một phần mềm trên máy tính có phiên bản trên Java và .NET, đƣợc phát triển dựa trên thƣ viện mã nguồn mở Tesseract [6]. Tuy nhiên hiện nay hầu nhƣ chƣa có bất cứ nghiên cứu nào về nhận dạng tiếng Việt từ ảnh trên hệ điều hành di động. Một số ứng dụng trên Android nhƣ VietScanner cho kết quả không cao, chỉ hỗ trợ ảnh quét, ngay cả ứng dụng Goggles cũng chỉ nhận dạng đƣợc tiếng Việt không dấu, mặc dù đây là một hƣớng nghiên cứu mới mẻ và nhiều tiềm năng. Bài báo này tập trung nghiên cứu nhận dạng tiếng Việt in từ ảnh trên điện thoại di động sử dụng hệ điều hành Android, một nền tảng mã nguồn mở đang thống lĩnh thị trƣờng di động hiện nay. Việc nhận dạng trên thiết bị di động gặp nhiều khó khăn. Thứ nhất, ảnh chụp trên camera của điện thoại hoàn toàn khác với tập tin ảnh quét vốn là những văn bản có chất lƣợng cao, rõ ràng, có phông chữ xác định và ngay hàng thẳng lối. Ảnh chụp từ camera thƣờng có chất lƣợng thấp, ảnh dễ bị mờ, méo, nghiêng, chứa vết hoặc thuộc các phông chữ không xác định [8]. Có thể giải quyết việc này bằng cách tiền xử lí ảnh trƣớc khi đƣa vào nhận dạng, quá trình này thƣờng mất nhiều thời gian và công sức. Thứ hai, đó là lựa chọn công cụ hợp lí để phát triển. Trên thế giới có rất nhiều công cụ mang lại kết quả tốt, nhƣ ABBYY Mobile OCR Engine, tuy nhiên giá thành còn cao và chƣa có hỗ trợ tiếng Việt. Trong số các thƣ viện miễn phí, Tesseract OCR cho kết quả nhận dạng khá chính xác. Đây vốn là một engine đƣợc hãng HP phát triển trong giai đoạn 1984 – 1994 và nằm trong top 3 chƣơng trình nhận dạng kí tự quang học trong hội nghị thƣờng niên của UNLV [9], sau đó Tesseract đƣợc chuyển thành mã nguồn mở trên Google và đƣợc cung cấp thêm nhiều tính năng, trong đó có thể huấn luyện để nhận dạng nhiều ngôn ngữ khác nhau [10]. Từ phiên bản Tesseract 3.02 trở đi, gói dữ liệu huấn luyện tiếng Việt đã đƣợc cung cấp trên trang chủ của Tesseract, mặc dù vẫn chƣa hoàn thiện. Tuy nhiên, Tesseract cung cấp khả năng huấn luyện tiếng Việt với nhiều phông chữ (do bộ nhận dạng Tesseract khá nhạy cảm với các phông chữ khác nhau của cùng một ngôn ngữ). Nếu thực hiện tốt, bộ dữ liệu có thể cho kết quả khá cao. Vì vậy, chƣơng trình sử dụng Tesseract làm bộ nhận dạng cốt lõi và tự xây dựng dữ liệu huấn luyện tiếng Việt riêng theo một số phông chữ Unicode, là chuẩn về phông chữ đƣợc sử dụng rộng rãi hiện nay. Vấn đề cuối cùng là sửa lỗi trên kết quả nhận dạng từ Tesseract. Tesseract ban đầu đƣợc thiết kế để nhận dạng tiếng Anh [13], mặc dù tiếng Việt cũng là một ngôn ngữ tựa Latinh, nhƣng nó có thêm một hệ thống thanh âm và một số kí tự có dấu khác với tiếng Anh, nhƣ ă, â, ô, ơ… gây khó khăn cho việc nhận dạng. Do đó, chƣơng trình xây dựng thêm một thuật toán kiểm lỗi chính tả tiếng Việt dựa trên thuật toán sử dụng khoảng cách Levenshtein [18]. 172
  3. KỈ YẾU HỘI NGHỊ SINH VIÊN NGHIÊN CỨU KHOA HỌC NĂM HỌC 2013-2014 II. NỘI DUNG Chƣơng trình sử dụng Tesseract OCR, vốn là một thƣ viện mã nguồn mở chƣa có dữ liệu, do đó cần xây dựng bộ dữ liệu huấn luyện riêng cho tiếng Việt để tạo thành bộ nhận dạng hoàn chỉnh. Quá trình xây dựng bộ nhận dạng tiếng Việt trên Android đƣợc thực hiện theo các bƣớc nhƣ sau: 1) Chuẩn bị dữ liệu huấn luyện tiếng Việt (Vietnamese training data); 2) Chuẩn bị dữ liệu ảnh chụp văn bản; 3) Nhận file ảnh và chuyển đổi ảnh sang định dạng tiêu chuẩn của Tesseract; 4) Nhận dạng sử dụng Tesseract engine; 5) Sửa lỗi chính tả trên văn bản sau khi nhận dạng. Trong đó bƣớc một là quan trọng nhất bởi việc nhận dạng phụ thuộc phần lớn vào việc xây dựng bộ dữ liệu huấn luyện có tốt hay không. Bƣớc này có thể thực hiện độc lập, các bƣớc tiếp theo phải thực hiện một cách tuần tự. 1. Chuẩn bị dữ liệu huấn luyện Phiên bản mới nhất hiện nay, Tesseract 3.02 cung cấp một cơ chế cho phép ngƣời sử dụng xây dựng một gói dữ liệu hoàn chỉnh để huấn luyện nhận dạng cho một ngôn ngữ nhất định [13]. Tesseract cần “học” các hình dạng khác nhau của cùng một kí tự thông qua font chữ, do đó việc huấn luyện thƣờng theo từng font riêng biệt. Giới hạn font chữ huấn luyện cho một ngôn ngữ là 32 (gần đây đƣợc nâng lên 64), tuy nhiên số lƣợng font càng nhiều thì việc huấn luyện càng khó khăn và file dữ liệu huấn luyện càng cồng kềnh, gây khó khăn cho việc nhận dạng. Trong bài báo này, giới hạn số font chữ là 3 font Unicode đƣợc dùng phổ biến ở Việt Nam, đó là: Times New Roman, Arial, Verdana, Courier New. Hình 1. Quá trình huấn luyện trên Tesseract OCR [12] 173
  4. KỈ YẾU HỘI NGHỊ SINH VIÊN NGHIÊN CỨU KHOA HỌC NĂM HỌC 2013-2014 Quá trình huấn luyện thực chất là quá trình tạo ra một số tập tin dữ liệu và sau đó kết hợp với nhau thành một tập tin duy nhất có tên mã-ngôn-ngữ.traineddata. Quá trình này đƣợc miêu tả trong hình 1. Quy ƣớc đặt tên cho các tập tin dữ liệu là mã-ngôn-ngữ.tên_file. Mã-ngôn-ngữ tuân theo tiêu chuẩn ISO 639-3 [16], mặc dù trên thực tế, bất kì chuỗi nào cũng có thể đƣợc sử dụng. Các tập tin cần thiết cho việc huấn luyện lƣu trong thƣ mục tessdata và đƣợc mô tả trong bảng 1. Bảng 1. Danh sách các tập tin dữ liệu cần thiết [13] Tên file Bắt buộc/tùy chọn lang.config Tùy chọn lang.unicharset Bắt buộc lang.unicharambigs Tùy chọn lang.inttemp Bắt buộc lang.pffmtable Bắt buộc lang.normproto Bắt buộc lang.punc – dawg Tùy chọn lang.word – dawg Tùy chọn lang.number – dawg Tùy chọn lang.freq – dawg Tùy chọn Bảng 2. Các tập tin dữ liệu cho tiếng Việt Tên file Bắt buộc/tùy chọn vie.unicharset Bắt buộc vie.unicharambigs Tùy chọn vie.inttemp Bắt buộc vie.pffmtable Bắt buộc vie.normproto Bắt buộc vie.word – dawg Tùy chọn vie.freq – dawg Tùy chọn Do tiếng Việt rất gần với tiếng Latinh nhƣng có một số điểm khác biệt đặc thù, nhƣ: có các dấu thanh (huyền, sắc, hỏi, ngã, nặng) và các kí tự có dấu mũ, dấu móc (ô, ơ…), không có kí tự j, w, z… Do đó việc huấn luyện dữ liệu tiếng Việt cũng có nhiều điểm khác biệt so với quá trình huấn luyện tiếng Anh [13]. Bƣớc đầu tiên là tạo ra văn bản và chuyển thành tập tin ảnh huấn luyện (Training page images) làm đầu vào cho tập tin dạng hộp (Box files). Bƣớc này rất quan trọng vì đầu ra sẽ là các tập tin hộp chứa một dãy các kí tự 174
  5. KỈ YẾU HỘI NGHỊ SINH VIÊN NGHIÊN CỨU KHOA HỌC NĂM HỌC 2013-2014 tuần tự từ đầu đến cuối trong tập tin ảnh, mỗi hàng chứa thông tin của một kí tự, tọa độ và đƣờng bao quanh kí tự đó. Dựa trên cơ sở đó Tesseract so sánh kí tự nhận đƣợc với kí tự “mẫu” trong tập tin hộp để cho ra kết quả. Do đó, văn bản này phải chứa tất cả kí tự tiếng Việt dạng UTF-8 với tần suất xuất hiện tƣơng ứng: các kí tự hiếm xuất hiện ít nhất 5 lần đối với mỗi kí tự, kí tự hay gặp xuất hiện ít nhất 20 lần, những kí tự còn lại xuất hiện ít nhất 10 lần. Thách thức đặt ra không chỉ là tìm hiểu và phân loại kí tự tiếng Việt, mà còn xây dựng văn bản thích hợp sao cho đảm bảo tần suất xuất hiện các kí tự đồng thời giảm thiểu độ lớn của tập tin văn bản (vì số lƣợng kí tự càng nhiều thì càng gây khó khăn cho quá trình huấn luyện). Đề tài đã dựa trên nhiều bài báo, tác phẩm văn học bằng tiếng Việt, thử nghiệm xây dựng bảng tần suất kí tự thích hợp cho tiếng Việt, đƣợc minh họa ở bảng 3, và xây dựng tập tin văn bản tối ƣu. Bảng 3. Thống kê tần suất xuất hiện của các kí tự trong tập tin văn bản Các kí tự Tần suất aceghilmnoôrtTuƣy ≥ 20 AàảãáạăằẳẵắặâầẩẫấậbBCDdĐđèẻẽéẹêềểếệ ≥ 10 GHIìỉĩíịkKLMNòóỏõọồổỗốộơờởỡớợpPqQR s S ủ ũ ú ụ ừ ử ữ ứ ự v V x X Y ỳ ỵ ?: “ ” ! ( ) - { } 0 1 2 3 4 5 6 789 ÀẢÃÁẠĂẰẲẴẮẶÂẦẨẪẤẬEÈẺẼÉẸÊỀỂễỄ ≥5 ẾỆfFÌỈĨÍỊjJOÕÓỎÕỌÔỒỔỖỐỘƠỜỞỠỚỢU ÙùỦŨÖỤƢỪỬỮỨỰwWỲỴỶỷÝỲýỳzZ/\@#$ ^&_[]|*;„‟%+= Sau khi đã có văn bản mẫu, việc tiếp theo là chuyển thành các tập tin ảnh nhị phân 1bpp hoặc ảnh mức xám 8bpp, định dạng TIF với độ phân giải 300DPI. Mỗi ảnh chứa mẫu kí tự của một phông chữ duy nhất, của một kiểu chữ duy nhất (in thƣờng, đậm hoặc nghiêng…). Với 3 phông chữ (Times New Roman, Arial, Courier New…) và 4 kiểu (in thƣờng, in đậm, in nghiêng, in đậm và nghiêng), ta sẽ có 12 tập tin ảnh TIF làm dữ liệu cho tập tin hộp BOX. Các tập tin dạng BOX chứa thông tin về tọa độ của “hộp” bao quanh kí tự. Tuy nhiên, nhiều kí tự Tesseract có thể nhận dạng sai, đặc biệt là kí tự có dấu, do đó ta phải chỉnh sửa “hộp” cho từng kí tự bị sai để có dữ liệu huấn luyện chính xác hơn. Quá trình này đƣợc minh họa trong hình 2 và 3. Quá trình huấn luyện tiếp theo tuân thủ theo chu trình xây dựng dữ liệu huấn luyện của Tesseract [13]. Kết quả sinh ra các tập tin sau: - Tập tin .tr: mang các đặc điểm của từng kí tự đã huấn luyện. - Tập tin vie.unicharset: Chứa toàn bộ tập kí tự và thêm vài đặc điểm của chúng. - Tập tin vie.font_properties: Cung cấp thông tin về đặc điểm các phông trong dữ liệu huấn luyện. Mỗi dòng trong tập tin này có định dạng sau: , với là tên phông chữ, các thông số còn lại mang giá trị 1 nếu đúng, 0 nếu sai. Dòng cuối cùng là kí tự kết thúc. 175
  6. KỈ YẾU HỘI NGHỊ SINH VIÊN NGHIÊN CỨU KHOA HỌC NĂM HỌC 2013-2014 - Tập tin shapetable. - Tập tin inttemp và pffmtable. - Tập tin normproto. Ngoài ra đối với mỗi ngôn ngữ, Tesseract cho phép tạo thêm tối đa 8 từ điển khác nhau, giúp cho việc nhận dạng tốt hơn. Bảy trong số 8 tập tin từ điền là mã hóa dƣới dạng Directed Acyclic Word Graph (DAWG). Mặc dù việc tạo từ điển không bắt buộc, đối với tiếng Việt nên có tối thiểu 2 tập tin từ điển: - vie.word-dawg: chứa các từ vựng trong tiếng Việt. - vie.freq-dawg: Danh sách các từ thông dụng. Hai tập tin này cũng đƣợc chúng tôi thu thập từ nhiều nguồn nhƣ bài báo, tác phẩm văn học… khác nhau và tổng hợp lại, với khoảng 9000 từ vựng tiếng Việt và trên 3000 từ thông dụng. Một tập tin khác cần đƣợc tạo ra là vie.unicharambigs. Tập tin này mô tả các tập kí tự dễ nhận dạng nhầm lẫn với tập kí tự khác, điều này rất phổ biến trong tiếng Việt. Dòng đầu tiên cho biết phiên bản tập tin. Các dòng tiếp theo có định dạng: Trong đó có thể mang giá trị 1 nếu bắt buộc phải thay thế chuỗi gốc bằng chuỗi đích, hoặc mang giá trị 0 nếu không bắt buộc thay thế. Ví dụ: v1 2 '' 1 " 1 1 m 2 rn 0 3 iii 1 m 0 Tức là 1 kí tự “m” có thể bị thay thế bởi 2 kí tự “rn”, tuy nhiên không bắt buộc. Cuối cùng, sau khi kết hợp tất cả các tập tin trên, ta đƣợc tập tin vie.traineddata, đây là tập tin chứa dữ liệu tiếng Việt cho các bƣớc tiếp theo. 176
  7. KỈ YẾU HỘI NGHỊ SINH VIÊN NGHIÊN CỨU KHOA HỌC NĂM HỌC 2013-2014 Hình 2. Thông tin về tọa độ x, y, chiều rộng, chiều cao của các kí tự Hình 3. Chỉnh sửa tọa độ, chiều cao, chiều rộng của từng kí tự, sử dụng phần mềm jTessBoxEditor 2. Chuẩn bị dữ liệu ảnh chụp văn bản Mục tiêu của bƣớc này là chuẩn bị một số lƣợng lớn ảnh thí nghiệm để kiểm tra khả năng nhận dạng của Tesseract. Ảnh chụp, trên thực tế thƣờng gặp phải một số trƣờng hợp làm giảm khả năng nhận dạng, nhƣ: nền và chữ có độ tƣơng phản thấp, bố cục văn bản bị nghiêng, lệch, hoặc có đƣờng viền ở biên (đối với ảnh quét) [11]. Tesseract không có cơ chế phân tích bố cục trang, do đó nó không thể nhận đƣợc nếu văn bản đƣợc chia thành nhiều khối, nhiều bố cục… Ngoài ra những vấn đề nhƣ quá nhiều kí tự đặc biệt, chữ quá nhỏ hoặc font chữ chƣa đƣợc huấn luyện… cũng gây khó khăn cho việc nhận dạng. Hình 4 minh họa một số trƣờng hợp ảnh có chất lƣợng kém. Bài báo này không tập trung vào quá trình tiền xử lí ảnh, do đó giả định đầu vào là ảnh đã đƣợc xử lí một cách tối ƣu. Đó là những ảnh chụp hoặc ảnh quét thỏa mãn các yêu cầu sau: 177
  8. KỈ YẾU HỘI NGHỊ SINH VIÊN NGHIÊN CỨU KHOA HỌC NĂM HỌC 2013-2014 - Ảnh chụp văn bản giấy bằng camera trên thiết bị di động có hỗ trợ tự động lấy nét (auto focus), độ phân giải 200dpi trở lên, trong điều kiện ánh sáng tốt; hoặc ảnh đƣợc scan một cách rõ ràng, không bị lệch, không có viền. - Ảnh có màu giấy đồng nhất (màu trắng) và màu chữ đồng nhất (màu đen), không quá sáng hoặc quá tối. - Phông chữ là Times New Roman, Arial, hoặc Courier New. - Định dạng thuộc một trong các định dạng phổ biến: JPG/JPEG, PNG, GIF, TIF/TIFF. - Ảnh chứa một khối văn bản hoàn chỉnh, không nghiêng, không mất chữ, khoảng cách giữa chữ và lề tối thiểu bằng chiều rộng một kí tự. - Kích cỡ chữ (font size) từ 20pt trở lên. - Ảnh nên chứa cả chữ đậm, nghiêng, các kí tự đặc biệt… - Giới hạn số chữ trong ảnh là 100 chữ. Hình 5 là một mẫu ảnh thỏa mãn các yêu cầu trên. Hình 4. Một số ví dụ về ảnh không đạt tiêu chuẩn. Từ trái sang phải và từ trên xuống dưới: Ảnh có nhiều khối văn bản, chữ quá nhỏ; ảnh nền tối, mất chữ; ảnh chụp bị lệch; chữ bị mờ Hình 5. Ví dụ về ảnh đạt tiêu chuẩn 3. Nhận file ảnh và chuyển đổi ảnh sang định dạng tiêu chuẩn của Tesseract Ảnh chụp trên điện thoại và ảnh quét thƣờng ở một trong các định dạng ảnh phổ biến sau: JPG/JPEG, PNG, GIF, TIF/TIFF. Do đó chƣơng trình chỉ cần lấy tập tin ảnh từ thƣ viện ảnh hoặc từ camera trên thiết bị di động. Tuy nhiên bộ nhận dạng Tesseract OCR chỉ nhận đầu vào là tập tin ảnh bitmap đƣợc mã hóa dạng ARGB_8888 và các thiết bị di động thƣờng có bộ nhớ hạn chế. Do đó, chúng tôi lập trình để nhân đôi tập tin ảnh gốc và 178
  9. KỈ YẾU HỘI NGHỊ SINH VIÊN NGHIÊN CỨU KHOA HỌC NĂM HỌC 2013-2014 chuyển tập tin đã nhân đôi thành tập tin ảnh bitmap dạng ARGB_8888 với kích thƣớc nhỏ hơn ảnh gốc, để tiết kiệm dung lƣợng bộ nhớ. Ảnh sau khi xử lí đƣợc lƣu trữ tạm thời cho đến khi đƣợc chuyển thành đầu vào của bộ nhận dạng. 4. Nhận dạng sử dụng Tesseract OCR Tesseract vốn đƣợc viết bằng ngôn ngữ C/C++, trong khi ứng dụng Android thƣờng đƣợc viết bằng ngôn ngữ lập trình Java. Do đó, để sử dụng đƣợc thƣ viện này trên nền tảng Android, cần một giao diện giúp Java giao tiếp đƣợc với các hàm C/C++. Giao diện đó là JNI (Java Native Interface). Để biên dịch JNI trong Android, ta phải sử dụng Android NDK (Native Development Kit), một công cụ mạnh mẽ cho phép các nhà phát triển sử dụng lại mã gốc (native code) hoặc viết mã nguồn C/C++ bên trong chƣơng trình. Đối với nền tảng Android, Google đã phát triển một project riêng cung cấp API và các tập tin cấu hình để biên dịch thƣ viện Tesseract cùng thƣ viện xử lí ảnh Leptonica đƣợc sử dụng trong Tesseract. Đó là project mã nguồn mở tesseract-android-tools [17]. Project này sẽ đƣợc tích hợp mã nguồn Tessseract 3.02 cùng thƣ viện Leptonica và sử dụng ndk- build để biên dịch thành thƣ viện cho bộ nhận dạng. Trƣớc tiên, dữ liệu huấn luyện đƣợc lƣu vào thẻ nhớ (sdcard) của thiết bị. Chƣơng trình chính sẽ tích hợp thƣ viện đã biên dịch, nhận dữ liệu huấn luyện (là tập tin vie.traineddata đã xây dựng ở mục A), ảnh đầu vào đã đƣợc chuyển sang dạng bitmap và xây dựng các hàm để nhận dạng. Kết quả đƣợc lƣu vào textbox để thuận tiện cho việc chỉnh sửa (nếu có). Quá trình này đƣợc minh họa ở hình 6. Hình 6. Quá trình nhận dạng bằng Tesseract OCR 5. Sửa lỗi chính tả trên văn bản sau khi nhận dạng Chuỗi văn bản nhận đƣợc sau khi xử lí rất ít khi cho kết quả chính xác hoàn toàn với ảnh gốc và thƣờng phát sinh lỗi. Qua thống kê trên 300 ảnh thí nghiệm, các lỗi xảy ra khi nhận dạng tiếng Việt thƣờng ở các trƣờng hợp sau: 179
  10. KỈ YẾU HỘI NGHỊ SINH VIÊN NGHIÊN CỨU KHOA HỌC NĂM HỌC 2013-2014 - Nhận chữ thƣờng thành chữ hoa hoặc ngƣợc lại. Ví dụ: HoA, GHi... - Nhận sai kí tự dẫn đến từ không có nghĩa. Ví dụ: mang  marg, trƣờng  trừong - Nhận sai kí tự nhƣng từ nhận đƣợc vẫn có nghĩa. Ví dụ: hoa  hòa, tái  tài Với trƣờng hợp đầu tiên, việc sửa lỗi tƣơng đối dễ dàng, chỉ cần chuyển chữ hoa thành chữ thƣờng hoặc ngƣợc lại. Trƣờng hợp thứ ba tƣơng đối khó vì phải xét đến nghĩa của từ trong ngữ cảnh của văn bản. Đề tài này tập trung vào trƣờng hợp thứ ba, sửa lỗi chính tả trên các từ không có nghĩa, bằng cách cải tiến thuật toán tính khoảng cách sửa đổi (Edit distance). Khoảng cách sửa đổi thực chất là số thao tác tối thiểu cần có để chuyển một chuỗi thành chuỗi khác. Các thao tác có thể là thêm kí tự, thay thế kí tự này bằng kí tự khác, xóa kí tự, đổi chỗ 2 kí tự. Mỗi lần thực thi một thao tác, khoảng cách này đƣợc tăng thêm 1 giá trị. Dạng phổ biến của khoảng cách sửa đổi là khoảng cách Levenshtein [18]. Ví dụ: Khoảng cách Levenshtein giữa 2 chuỗi “brown” và “downy” là 3, vì phải dùng ít nhất 3 lần biến đổi: - brown  rown (xóa kí tự “b”); - rown  down (thay kí tự “r” bằng kí tự “d”); - down  downy (thêm kí tự “y”) Nhƣ vậy, nếu 2 chuỗi hoàn toàn giống nhau, khoảng cách Levenshtein bằng 0. Hình 7. Giả mã của thuật toán 180
  11. KỈ YẾU HỘI NGHỊ SINH VIÊN NGHIÊN CỨU KHOA HỌC NĂM HỌC 2013-2014 Thuật toán tính khoảng cách Levenshtein thƣờng đƣợc áp dụng để kiểm lỗi chính tả cho văn bản tiếng Anh vốn chứa các kí tự Latinh không dấu. Đối với văn bản tiếng Việt đã nhận dạng ở mục D, việc từ bị nhận sai thƣờng ít khi do thêm hoặc xóa kí tự, mà do một hoặc một số kí tự có vùng “hộp” bao quanh gần giống nhau, bộ nhận dạng dễ nhầm kí tự này với kí tự khác. Nếu áp dụng toàn bộ thuật toán cho tiếng Việt có thể dẫn tới kết quả không đúng mong đợi. Ví dụ: Bộ nhận dạng nhầm lẫn giữa “ử” và “ữ” nên chuỗi “những” bị nhầm thành “nhửng”. Nếu áp dụng khoảng cách Levenshtein để truy tìm từ đúng thì có thể ra rất nhiều kết quả khác nhau: nhƣng, nhung, nhang, hửng… và không thể tìm ra từ đúng. Để khắc phục điều này, chƣơng trình xây dựng một hàm đánh giá trong thuật toán tính Levenshtein, cho phép mỗi thao tác sửa kí tự có giá trị nhỏ hơn 1 với những kí tự có vùng “hộp” bao quanh gần giống nhau. Ví dụ: Khoảng cách Levenshtein giữa “ử” và “ữ” là 0,2; do đó khoảng cách Levenshtein giữa “nhửng” và “những” chỉ là 0,2, giữa “nhửng” và “nhang” là 1. Dựa vào đó có thể xác định đƣợc từ đúng cho những từ sai chính tả. Hình 7 là giả mã của thuật toán. 6. Kết quả nhận dạng Chƣơng trình đƣợc kiểm tra với khoảng 300 ảnh chụp và ảnh quét ở các định dạng và phông chữ, cỡ chữ khác nhau. Độ chính xác của văn bản nhận đƣợc đƣợc tính bằng cách tính số kí tự đúng trên tổng số kí tự, theo công thức sau: Theo thống kê ở bảng 4, trung bình độ chính xác cao đạt đƣợc ở những ảnh có chất lƣợng tốt, thỏa mãn tất cả các yêu cầu đã đề ra ở mục B với độ chính xác khoảng 93. Những ảnh cho độ chính xác thấp hơn (khoảng 82%) thƣờng là ảnh không rõ chữ, nền và chữ có độ tƣơng phản thấp hoặc font chữ quá nhỏ. Thống kê trên cho thấy dữ liệu huấn luyện đƣợc xây dựng tƣơng đối tốt và cho kết quả cao với những ảnh đạt tiêu chuẩn. Lúc này kết quả nhận dạng chỉ chủ yếu phụ thuộc vào chất lƣợng ảnh chụp và văn bản trên đó. Các tập tin ảnh quét nguyên gốc thƣờng đƣợc phân thành nhiều khối văn bản với cỡ chữ nhỏ (12pt trở xuống), hoặc ảnh chụp trong điều kiện kém khiến chữ bị nghiêng, xô lệch… dẫn đến kết quả nhận dạng kém hơn. So với các phần mềm trên máy tính hay ứng dụng di động miễn phí sử dụng OCR, chƣơng trình đã xây dựng cho kết quả nhận dạng tiếng Việt chính xác hơn. Cụ thể, phần mềm VietOCR chỉ cho độ chính xác 85% với ảnh tốt và khoảng 70% với ảnh quét, ảnh chụp trong điều kiện kém. Độ chính xác của chƣơng trình vẫn còn kém so với nhiều phần mềm thƣơng mại, do những phần mềm này đƣợc các chuyên gia phát triển, đƣa thêm các thuật toán xử lí ảnh, nhận dạng các cấu trúc văn bản, cách dàn trang… Tuy nhiên đây là một kết quả tƣơng đối khả quan và có nhiều hƣớng phát triển trong tƣơng lai. Bảng 5 so sánh cụ thể tính năng của chƣơng trình so với các phần mềm miễn phí và thƣơng mại có nhận dạng tiếng Việt. 181
  12. KỈ YẾU HỘI NGHỊ SINH VIÊN NGHIÊN CỨU KHOA HỌC NĂM HỌC 2013-2014 Bảng 4. Độ chính xác của chương trình Loại ảnh Số lƣợng ảnh Độ chính xác Ảnh chụp, scan chất lƣợng tốt 200 93% Ảnh chụp, scan chất lƣợng kém hơn 100 82% Bảng 5. So sánh với các chương trình khác Tính năng Chƣơng trình hiện tại VietOCR VietScanner Độ chính xác 93% 85% 90% Tốc độ thực thi Chậm Nhanh Chậm III. KẾT LUẬN Đề tài này đã tập trung nghiên cứu và tìm hiểu các công nghệ mới nhất trong nhận dạng kí tự quang học và xử lí ngôn ngữ để áp dụng xây dựng thành công bộ nhận dạng tiếng Việt trên nền tảng Android. Chƣơng trình là một ứng dụng hoàn chỉnh đã chạy thử nghiệm thành công với kết quả tƣơng đối khả quan: 93% cho các ảnh văn bản chất lƣợng cao và 82% cho các ảnh văn bản chất lƣợng thấp hơn. Hạn chế của chƣơng trình là hiệu quả còn phụ thuộc phần lớn vào chất lƣợng ảnh chụp hoặc ảnh scan, tập tin dữ liệu huấn luyện tiếng Việt phụ thuộc phần lớn vào các dữ liệu cần chuẩn bị. Ngoài ra giải thuật kiểm lỗi chính tả còn đơn giản và giới hạn trong trƣờng hợp chỉ sai một kí tự, chƣa xử lí các trƣờng hợp thêm hoặc xóa kí tự, sai nhiều kí tự. Do đó hƣớng phát triển của đề tài là xây dựng khối tiền xử lí ảnh để có dữ liệu ảnh tốt hơn, hoàn chỉnh các file dữ liệu từ điển, dữ liệu tiếng Việt… và cải thiện thuật toán xử lí văn bản sau khi nhận dạng. TÀI LIỆU THAM KHẢO [1] S. Mori, C.Y. Suen, K. Yamamoto, Historical review of OCR research and development, Proceedings of the IEEE, vol. 80, issue. 7, 1992. [2] Optical Character Recogntion, Available: http://en.wikipedia.org/wiki/Optical_ character_recognition. [3] Hasnat, M. R. Chowdhury and M. Khan, An open source Tesseract based Optical Character Recognizer for Bangla script, presented at the 10th International Conference on Document Analysis and Recognition (ICDAR‟2009), Barcelona, Spain, 26-29, 2009. [4] Google Inc., CA, USA, Google Goggles, Available: https://www.google.com/ mobile/goggles, 2010. [5] Institute of Information Technology, VnDOCR 4.0 Professional, Available: http://www.vndocr.com/home/Products.asp?ProductID=2. [6] VietOCR, Available: http://vietocr.sourceforge.net/ [7] R.C. Gonzalez, R. E. Woods, Digital Image Processing, 2nd ed., New Jersey: Prentice Hall, 2002. 182
  13. KỈ YẾU HỘI NGHỊ SINH VIÊN NGHIÊN CỨU KHOA HỌC NĂM HỌC 2013-2014 [8] J. Liang, D. Doermann and H. Li., Camera-based analysis of text and documents a survey, International Journal on Document Analysis and Recognition (IJDAR‟2005), Doi: 10.1007/s10032-004-0138-z, 2005. [9] S.V. Rice, F.R. Jenkins, T.A. Nartker, The Fourth Annual Test of OCR Accuracy, Technical Report 95-03, Information Science Research Institute, University of Nevada, Las Vegas, 1995. [10] R.W.Smith, An overview of Tesseract OCR engine, In Proc. Ninth Annual Conference on Documen Analysis and Recognition, volumne 2, 2007. [11] Google Inc., Mountain View, CA 94043, USA, Tesseract OCR, Available: https://code.google.com/p/tesseract-ocr/, 2006. [12] R. Smith, Tesseract OCR Engine, Available: http://tesseract-ocr.googlecode.com/ files/TesseractOSCON.pdf, 2007. [13] Google Inc., Mountain View, CA 94043, USA, Training Tesseract 3, Available: http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3, 2006. [14] U. Patel, An Introduction to the Process of Optical Character Recognition, International Journal of Science and Research (IJSR), India, 2012. [15] R. Smith, D. Antonova, D.S. Lee, Adapting the Tesseract Open Source Engine for Multilingual OCR, Google Inc., Mountain View, CA 94043, USA, 2009. [16] The International Organization for Standardization (ISO), SO 639-3 Language Codes, Available: http://www-01.sil.org/iso639-3/codes.asp?order=639_3& letter=v. [17] Google Inc., Mountain View, CA 94043, USA, Tesseract Android Tools, Available: https://code.google.com/p/tesseract-android-tools/, 2006. [18] Levenshtein, How Levenshtein works, Available: http://www.levenshtein.net/ index.htmL. [19] Đinh Điền, Xử lí ngôn ngữ tự nhiên, NXB Đại học Quốc gia Tp. HCM, 2004. 183
nguon tai.lieu . vn