3 Chương : NHẬN DẠNG KÝ TỰ QUANG HỌC
3.3.2 Chuyển mã bộ nhận dạng Tesseract vào hệ điều hành Symbian
Tesseract được hiện thực bằng ngôn ngữ lập trình C++ trong đó có sử dụng các thư viện chuẩn STL (Standard Library) trên môi trường Windows. Vì vậy, để
thực hiện chuyển mã Tesseract vào hệđiều hành Symbian, ta phải nghiên cứu cách thức chuyển mã một chương trình từ hệ điều hành Windows vào hệ điều hành Symbian.
Có hai cách để chuyển mã nguồn từ Windows vào Symbian:
Ø Chuyển mã trực tiếp: Người lập trình sẽ chuyển mã bằng cách viết lại tất cả các đoạn mã của chương trình cũ bằng ngôn ngữ lập trình mới (ngôn ngữ Symbian C++).
Ưu điểm: chương trình sẽđược biên dịch và chạy tốt nhất vì các đoạn mã
đã được tối ưu hóa trên môi trường mới.
Bắt đầu Tesseract Kết thúc Kết quả nhận dạng Ảnh đã được thu nhận và xử lý
Khuyết điểm: Tiêu tốn rất nhiều thời gian và công sức của người lập trình.
Ø Chuyển mã gián tiếp: Mã nguồn của chương trình cũ hầu như là không bị
thay đổi, người lập trình chỉ cần sửa một số chỗ cần thiết và chỉ thị những thư viện phù hợp cho việc biên dịch mã nguồn cũ trên nền Symbian đồng thời thiết lập những tham số môi trường để chương trình có thể chạy
được trên nền Symbian.
Ưu điểm: đỡ mất nhiều thời gian và công sức của người lập trình.
Khuyết điểm: Chương trình sẽ được biên dịch và chạy chậm hơn vì phải sử dụng các thư viện trung gian.
Trong hai cách trên, cách một gần như là không thể thực hiện được trong phạm vi một luận văn thạc sĩ vì đây là một công việc tiêu tốn rất nhiều thời gian và công sức. Ngoài ra, Tesseract cũng có một bộ mã nguồn khá lớn, gồm 256 tập tin header (*.h) và 221 tập tin mã nguồn (*.cpp) với hàng trăm ngàn dòng mã. Chính vì vậy, luận văn này chọn cách thứ hai: chuyển gián tiếp mã nguồn Tesseract từ hệ điều hành Windows sang hệđiều hành Symbian.
Để thực hiện chuyển mã nguồn Tesseract sang Symbian, ta phải thực hiện các bước chính sau:
Ø Cài đặt IDE (Integrated Development Environment) Carbide.c++15
Ø Cài đặt thư viện Open C++ vào SDK (Software Development Kit) đang sử dụng. Các tập tin header sẽ được chép vào thư mục: SDK_root\epoc32\include\stdapis\stlport.
Ø Cài đặt thư viện Open C++ lên thiết bịđiện thoại đang dùng để chạy thử. Chương trình cài đặt: SDK_root\nokia_plugin\opencpp\s60opencppsis\ STDCPP_s60_1_7_SS.sis.
15
Ø Tạo một ứng dụng mới trên IDE Carbide.c++ và chép lần lượt toàn bộ tập tin header và mã nguồn của Tesseract thư mục /inc và /src trong thư mục gốc của ứng dụng vừa tạo.
Ø Trong tập tin project (*.mmp) của ứng dụng mới ta làm như sau:
o Thêm các chỉ thị về việc include các tập tin header của Tesseract:
USERINCLUDE ..\inc\api USERINCLUDE ..\inc\ccmain USERINCLUDE ..\inc\ccstruct USERINCLUDE ..\inc\ccutil USERINCLUDE ..\inc\classify USERINCLUDE ..\inc\cutil USERINCLUDE ..\inc\dict USERINCLUDE ..\inc\image USERINCLUDE ..\inc\textord USERINCLUDE ..\inc\viewer USERINCLUDE ..\inc\wordrec
o Thêm các chỉ thị về việc include các tập tin header đã được chuyển mã sang hệđiều hành Symbian:
SYSTEMINCLUDE \epoc32\include\stdapis\stlport
o Thêm các chỉ thị về việc include các thư viện chuẩn đã được chuyển mã sang hệđiều hành Symbian: STATICLIBRARY libcrt0.lib LIBRARY libc.lib LIBRARY euser.lib LIBRARY libstdcpp.lib LIBRARY libpthread.lib LIBRARY estlib.lib OPTION CW -wchar_t on MACRO _WCHAR_T_DECLARED Trong đó:
• libcrt0.lib và libc.lib được dùng khi sử dụng hàm
main() như là một entry point của ứng dụng.
• estlib.lib là thư viện C chuẩn.
• libstdcpp.lib là thư viện C++ chuẩn.
• libpthread.lib là thư viện hỗ trợ gọi các hàm thuộc hệ điều hành.
o Các chương trình lớn như Tesseract đòi hỏi rất nhiều bộ nhớ vì vậy ta phải thực hiện một thao tác rất quan trọng là phải chỉ thị kích thước của Stack và Heap. Không có các phát biểu này, Tesseract sẽ không thể chạy được trên hệđiều hành Symbian. Có thể nói đây là một bước vô cùng quan trọng nhưng không phải người lập trình nào cũng biết
được.
EPOCSTACKSIZE 0x10000
EPOCHEAPSIZE 0x10000 0x2000000
epocStackSize: là phát biểu dùng để chỉ rõ kích thước stack cho tập tin thực thi của ứng dụng. Giá trị mặc định là 8 KB. Giá trị lớn nhất là 80 KB. Trong ứng dụng này, kích thước của stack là 64 KB.
epocHeapSize: là phát biểu dùng để chỉ rõ kích thước nhỏ nhất (mặc
định là 4 KB) và lớn nhất (mặc định là 1 MB) của bộ nhớ heap trong việc khởi tạo heap cho một tiến trình. Trong ứng dụng này, giá trị nhỏ nhất là 64KB và giá trị lớn nhất là 32 MB.
Ngoài ra còn rất nhiều thay đổi khác chủ yếu là về việc thay đổi, thêm, bớt các chỉ thị biên dịch, các hàm trong mã nguồn của Tesseract để có thể biên dịch và thực thi thành công bộ nhận dạng này trên hệđiều hành Symbian. Nhưng vì số lượng quá nhiều nên không thể liệt kê hết trong phạm vi luận văn này. Việc chuyển đổi mã nguồn này, tuy nói sơ qua thì rất đơn giản nhưng thật ra lại chiếm rất nhiều thời gian trong quá trình thực hiện luận văn vì người viết phải đối mặt với rất nhiều lỗi biên dịch mà IDE Carbide.c++ lại là một công cụ rất yếu (so với một số IDE thông dụng như MS Visual Studio) trong việc chỉ ra lỗi thực sự nằm ởđâu.