Tesseract ban đầu được thiết kế để nhận dạng các từ tiếng Anh trên ngôn ngữ hệ Latinh. Sau này, nhờ sự cố gắng của nhiều nhà phát triển mà các phiên bản của Tesseract đã có thể nhận dạng được các ngôn ngữ khác ngoài hệ Latinh như tiếng Trung, tiếng Nhật và tương thích với các ký tự trong bảng mã UTF-8. Việc nhận dạng các ngôn ngữ mới trên Tesseract có thể thực hiện được nhờ vào việc huấn luyện dữ liệu.Để huấn luyện dữ liệu trên Tesseract cho một ngôn ngữ mới cần có một số tập tin dữ liệu chứa trong thư mục tessdata, sau đó kết hợp các tập tin này thành tập tin duy nhất. Các tập tin có trong thư mục tessdata có quy tắc đặt tên theo dạng: tên ngôn ngữ.tên tập tintrong đó tên ngôn ngữ được đặt theo chuẩn ISO 639-3. Ví dụ các tập tin cần thiết khi thực hiện việc huấn luyện tiếng Anh (3.0) gồm[11]:
tessdata/eng.unicharambigs tessdata/eng.inttemp tessdata/eng.pffmtable tessdata/eng.normproto tessdata/eng.punc-dawg tessdata/eng.word-dawg tessdata/eng.number-dawg tessdata/eng.freq-dawg
…và sau đó các tập tin này được kết hợp với nhau thành một tập tin duy nhất:
tessdata/eng.traineddata
Để thực hiện quá trình huấn luyện cho một ngôn ngữ mớita sử dụng công cụ có sẵn của Tesseract. Trong luận văn này, tôi sử dụng công cụ Tesseract 3.02để thực hiện huấn luyện cho chữ số viết tay.
Quá trình huấn luyện được thực hiện qua các bước như sau [11],[ 15],[ 6]:
Hình 18: Quá trình huấn luyện chữ số viết tay với Tesseract
Phát sinh các tập tin hình ảnh cho việc huấn luyện: Đây là quá trình thủ công, tôi thực hiện lấy mẫu số viết tay của 50 người, mỗi người có thể viết một hoặc vài mẫu trên giấy, sau đó các trang được scan thành các tập tin hình ảnh dạng .tif với độ phân giải là 300dpi để sử dụng cho việc huấn luyện và thử nghiệm.
Hình 19: Bảng lấy mẫu số viết tay
Tạo các tập tin dạng .box: Tập tin dạng .box (box file) là tập tin văn bản chứa 1 dãy các chữ số trong tập tin hình ảnh. Mỗi hàng trong tập tin dạng .box chứa nhãn của 1 chữ số và tọa độ đường bao quanh ký tự đó trong tập tin ảnh. Để tạo ra tập tin dạng .box cho mỗi tập tin ảnh dùng để huấn luyện ta sử dụng lệnh:
Tesseract file_name.tif file_name batch.nochop
makebox
Những trường hợp thông tin hiển thị trong tập tin .box chưa chính xác về nhãn của ký tự hoặc kích thước của đường bao quanh ký tự (bounding box), khi đó cần chỉnh sửa tập tin .box để đảm bảo các thông số của từng ký tự khớp với thông tin trong tập tin ảnh huấn luyện. Ở đây tôi sử dụng công cụ bbTesseract[9]để chỉnh sửa trực tiếp tập tin .box.
Hình 20: Sửa tập tin .box với công cụ bbTesseract
Sau khi có các tập tin .boxvới thông tin chính xác, với mỗi cặp tập tin ảnh và tập tin .box tương ứng thực hiện lệnh sau:
Tesseract file_name.tif file_name nobatch box.train
Nếu thành công thì tại bước này, Tesseract sẽ phát sinh ra tập tin .tr chứa các đặc trưng của mỗi ký tự trong tập tin huấn luyện.
Ước lượng tập ký tự của ngôn ngữ cần huấn luyện: để Tesseract nhận diện được các ký tự có trong tất cả các tập tin .box ta dùng lệnh sau:
unicharset_extractor *.box
Sau khi thực hiện bước này, tập tin unicharset sẽ được tạo ra.
Xác định kiểu font trong dữ liệu: Đây là tính năng mới chỉ có từ phiên bản Tesseract 3.0.1 trở đi. Với tính năng này người dùng có thể huấn luyện dữ liệu với nhiều loại font khác nhau thay vì chỉ có thể dùng các font mặc định sẵn ở các phiên bản trước. Ta cần tạo tập tin font properties để quy định thông số các kiểu font ta đã sử dụng trong các mẫu văn bản huấn luyện.
Cấu trúc của tập tin font_properties là mỗi hàng chứa tên 1 loại font huấn luyện và các đặc tính của font đó:
<fontname><italic><bold><fixed><serif><fraktur>trong đó fontname là một chuỗi ký tự không chứa khoảng trống, đánh dấu có thuộc tính bằng bit 1 hoặc không có dùng bit 0.
Ví dụ cấu trúc tập tin font_properties tôi đã sử dụng để huấn luyệnchữ số viết tay là có nội dung là: UnknownFont 0 0 0 0 0.
Gom nhóm dữ liệu: ở bước này các đường nét khung của ký tự đã được rút trích ra và chúng ta cần gom nhóm lại các dữ liệu ban đầu để tạo ra mẫu thử (prototype). Hình dạng, đường nét của các ký tự sẽ được gom nhóm lại nhờ vào các lệnh mftraining và cntraining có sẵn trong công cụ Tesseract:
mftraining -F font_properties -U unicharset -O lang.unicharset *.tr
Lệnh mftraining sẽ tạo ra các tập tin dữ liệu: inttemp (chứa hình dạng mẫu), pffmtable (số lượng đặc trưng dự kiến cho mỗi ký tự) và shapetable (chứa đặc trưng hình dạng của ký tự).
Dùng lệnh cntraining để tạo ra tập tin dữ liệu normproto.
cntraining *.tr
Kết hợp các tập tin lại tạo thành tập tin huấn luyện dữ liệu: Cuối cùng sau khi đã có đủ các tập tin huấn luyện cần thiết (unicharset, inttemp, pffmtable, normproto, shapetable) ta đổi tên các tập tin lại cho đúng dạng với tiền tố lang. trước tên tập tin với lang là 3 ký tự đại diện cho ngôn ngữ huấn luyện theo chuẩn ISO 639-3. Thực hiện lệnh sau để kết hợp các tập tin lại và tạo ra tập tin lang.traineddata. Đặt tập tin này vào thưc mục tessdata của Tesseract thì Tesseract đã có thể nhận dạng được ngôn ngữ mới (theo lý thuyết).
Combine_tessdata lang.