Xem mẫu
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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