Kết quả thƣ̣c nghiê ̣m

Một phần của tài liệu Xây dựng ứng dụng OCR cho thiết bị iPhone (Trang 42)

Chƣơng trình thực nghiệm này sử dụng bộ thƣ viện Tesseract 2.04 làm công cụ chính để nhận dạng. Trong khóa luận này tôi xin trình bầy kết quả thực nghiệm về độ chính xác và thời gian xử lý của chƣơng trình đƣợc cài đặt trên thiết bị iPhone 3GS. Các ảnh nguồn đƣa vào để đánh giá độ chính xác và thời gian xử lý đƣợc đƣợc chụp từ các loại sách báo, biển quảng cáo, bao bì sản phẩm. Kết quả thực nghiệm nhƣ sau:

Số ảnh mẫu 100

Số từ trong mẫu 3950

Số từ nhận dạng chính xác 3430

Tỷ lệ chính xác 86.87 %

Bảng 1. Kết quả thƣ̣c nghiê ̣m chƣơng trình

Chƣơng trình thực nghiệm cho kết quả khá tốt với độ tin cậy cao 96.7% với các ảnh chụp từ các ấn phẩm là sách báo hoặc tạp chí. Các ấn phẩm này thƣờng đƣợc in với font chữ đồng nhất cố định và không chứa nhiều họa tiết phía sau nền. Đối với các ảnh chụp thử nghiệm từ các biển quảng cáo, hay bao bì sản phẩm thì cho ra kết quả với độ chính xác không cao 31.3%. Các mẫu ảnh loại này thƣờng chứa nhiều font chữ khác nhau và thƣờng có nhiều họa tiết, hoa văn ở phía sau nền nên ảnh hƣởng lớn đến kết quả nhận dạng

KẾT LUẬN

Cuốn luận văn này đã trình bầy và làm sáng tỏ kiến trúc của bộ thƣ viện mở Tesseract, là bộ thƣ viện mở phục vụ việc xây dựng ứng dụng OCR. Các kỹ thuật đƣợc áp dụng, các bƣớc xử lý chính của bộ thƣ viện Tesseract đã đƣợc trình bầy một cách đây đủ và cô đọng. Qua đây chúng ta có thể nắm bắt đƣợc kiến trúc của nó và giúp chúng ta có thể tham gia vào việc cải tiến giúp nâng cao hơn nữa năng lực xử lý của bộ mã nguồn mở này.

Cuốn luận văn này cũng đã làm rõ đƣợc kiến trúc của hệ điều hành iOS. Các lớp thƣ viện chính của iOS phục vụ cho việc xây dựng một ứng dụng cho thiết bị di động cùa hãng Apple cũng đã đƣợc trình bầy. Từ các nghiên cứu này tác giả đã đề xuất kiến trúc của một ứng dụng OCR cho thiết bị iPhone và xây dựng một ứng dụng thử nghiệm.

Ứng dụng thực nghiệm đã cho kết quả tốt, 96.7% trên các ảnh chụp trên các loại văn bản in nhƣ sách, báo, tạp chí…Tuy nhiên đối với các ảnh chụp từ các loại nhƣ nhãn mác sản phẩm, bao bì sản phẩm, biển quảng cáo thì cho kết quả kém chính xác do nhiều yếu tố làm suy giảm nhƣ: quá nhiều font chữ khác nhau, các hình ảnh, vân nền đƣợc sử dụng ở phía nền của ảnh.

Hƣớng nghiên cứu tiếp theo của luân văn này đó là cải tiến tốc độ xử lý và tính tiện dụng của ứng dung. Việc nghiên cứu và xây dựng bộ từ điển tích hợp cho ứng dụng giúp làm cho ứng dụng hoạt động đƣợc nhanh chóng hơn. Nâng cao hơn nữa tốc độ xử lý, cũng nhƣ tính linh hoạt bằng việc cho phép ngƣời sử dụng lựa chọn vùng nhận dạng trong chế độ xem trƣớc hình ảnh (preview) mà không cần phải lƣu lại các ảnh chụp để xử lý.

TÀI LIỆU THAM KHẢO

[1] R.W. Smith, The Extraction and Recognition of Text from Multimedia

Document Images, PhD Thesis, University of Bristol, November 1987.

[2] R. Smith, “A Simple and Efficient Skew Detection Algorithm via Text Row

Accumulation”, Proc. of the 3rd Int. Conf. on Document Analysis and

Recognition (Vol. 2), IEEE 1995, pp. 1145-1148.

[3] Smith, R., ―An Overview of the Tesseract OCR Engine‖ Proc 9th

Int. Conf. on Document Analysis and Recognition, 2007, pp629-633.

[4] David A. Forsyth, Jean Ponce, Computer vision – A modern approach,

Prentice Hall, 2002

[5] Apple inc, iOS Technology Overview, Apple, 2010

[6] Tesseract Open-Source OCR: http://code.google.com/p/tesseract-ocr.

[7] G. Nagy, ―At the frontiers of OCR‖, Proc. IEEE 80(7), IEEE, USA, Jul 1992, pp 1093-1100.

PHỤ LỤC 1. GIỚI THIỆU NGÔN NGƢ̃ LẬP TRÌNH OBJECTIVE-C

1. Giới thiệu tổng quan

Objective-C là ngôn ngữ lập trình đã xuất hiện từ rất lâu, nó đƣợc thiết kế và phát triển từ năm 1980. Hiện tại, Objective-C lại trở nên phổ biến vì nó đƣợc Apple chọn làm ngôn ngữ lập trình cho hệ thống Mac và iPhone.Objective-C đƣợc thiết kế bởi Brad Cox khi ông làm việc cho công ty Stepstone vào đầu những năm 1980. Objective-C đƣợc thiết kế để phục vụ mục đích lập trình hƣớng đối tƣợng. Nó hoạt động giống nhƣ là một tập hợp các thành phần mở rộng rất mạnh mẽ của ngôn ngữ C. Objective-C kết hợp các đặc điểm ƣu tú nhất của C và ngôn ngữ SmallTalk. Objective-C khá đơn giản để học và có đầy đủ các khả năng của một ngôn ngữ lập trình hƣớng đối tƣợng.Objective-C đơn giản và nhỏ gọn nhƣng lại là một thành phần mở rộng rất mạnh của ngôn ngữ chuẩn ANSI C. Objective-C cung cấp đầy đủ các khả năng lập trình hƣớng đối tƣợng nhƣng lại đƣợc thực thi theo cách khá đơn giản và dễ dàng.

Hầu hết các ngôn ngữ lập trình hƣớng đối tƣợng cung cấp: ● Một thƣ viện các Objects.

● Các công cụ phát triển cần thiết

● Hỗ trợ hƣớng đối tƣợng và các thƣ viện liên quan.

Objective-C cũng cung cấp đầy đủ các thành phần trên. Bạn có thể sử dụng Objective-C để phát triển một phần mềm hoàn thiện. Apple đã chọn Objective-C làm ngôn ngữ lập trình chính cho hệ thống máy Mac và iPhone. Là ngôn ngữ hƣớng đối tƣợng nên Objective-C giải quyết các vấn đề lập trình dựa trên khái niệm các Object. Nó bao gồm 3 phần:

Interface:Interface của một lớp(class) thông thƣờng đƣợc định nghĩa

Implementation:Mã nguồn của chƣơng trình đƣợc viết trong phần implementation của một lớp và đƣợc định nghĩa trong một file có đuôi .m. Đây là nó phần định nghĩa của lớp.

Instantiation:Sau khi khai báo và định nghĩa một lớp, chúng ta có thể thực

thể hóa lớp này bằng việc cấp phát bộ nhớ cho new object của lớp đó. Tóm lại Objective-C là:

- Thành phần mở rộng của ngôn ngữ lập trình C.

- Là ngôn ngữ lập trình hƣớng đối tƣợng đơn giản nhƣng mạnh mẽ.

- Là ngôn ngữ đƣợc Apple sử dụng để phát triển các ứng dụng cho hệ thống máy Mac và iPhone.

2. Tại sao lại sử dụng Objective-C

Ngôn ngữ lập trình Objective-C đƣợc chọn cho Cocoa framework vì một số lý do dƣới đây:

● Nó là ngôn ngữ lập trình hƣớng đối tƣợng và các chức năng cung cấp bởi Cocoa framework chỉ có thể đƣợc mang lại bởi các kỹ thuật hƣớng đối tƣợng.

● Nó là thành phần mở rộng của chuẩn ANSI C vì vậy các chƣơng trình viết bằng C của framework này sẽ không bị mất đi tính năng nào và ngƣời dùng đƣợc hƣởng các lợi thế của ngôn ngữ C.

Với ngôn ngữ này, ngƣời dùng có thể lựa chọn cả lập trình hƣớng đối tƣợng và lập trình thủ tục khi cần thiết.

● Nó đơn giản và dễ học bởi cú pháp của nó khá ngắn gọn nên nó giúp cho lập trình viên đạt đƣợc hiệu quả mong muốn mà không gặp nhiều khó khăn.

● Nó rất năng động nếu so sánh với các ngôn ngữ mở rộng khác dựa trên C. Trình biên dịch đóng một vai trò rất quan trọng trong việc bảo vệ thông tin liên quan đến các đối tƣợng để sử dụng lúc run time.

● Nó là một ngôn ngữ mạnh bởi vì các quyết định có thể đƣợc đƣa ra lúc biên dịch sẽ đƣợc trì hoãn cho tới khi chƣơng trình chạy.

Sự năng động của Objective-C có hai lợi thế đáng kể:

● Nó hỗ trợ ràng buộc động và mở tạo ra một cấu trúc đơn giản đối với giao diện tƣơng tác ngƣời dùng.

● Nó cho phép phát triển các công cụ phát triển phức tạp. Một giao diện cho hệ thống run time tạo điều kiện cho việc tiếp cận các thông tin lúc run time giúp cho việc monitor ứng dụng viết bằng Objective-C.

3. Cú pháp của ngôn ngữ Objective-C

Trong phần này chúng ta sẽ khám phá các từ khóa (keyword) đƣợc sử dụng trong ngôn ngữ lập trình Objectvie-C. Nhƣ các bạn đã biết, Objectvie-C là mở rộng của ngôn ngữ lập trình C, vì thế chƣơng trình đƣợc viết bằng C hay C++ hoàn toàn có thể đƣợc biên dịch nhƣ Objectvie-C. Ngoài các từ khóa dùng trong C và C++, Objectve C cung cấp thêm một số từ khóa khác. Để tránh xung đột với từ khóa của ngôn ngữ khác, Objectvie-C dùng ―@‖ đứng trƣớc mỗi từ khóa. Những từ khóa này đƣợc gọi là Compiler Directives.

● Các Directives đƣợc sử dụng để khai báo, định nghĩa các classes, categories, protocols:

Directive Ý nghĩa

@interface Sử dụng để khai báo một class hay một interface. @implemen

tation

Dùng để định nghĩa một class hay một category.

protocol).

@end Kết thúc khai báo, định nghĩa category hoặc protocol.

Các Directive đƣợc sử dụng để xác định khả năng truy cập của các thực thể. (Mặc định là @protected).

Directive Ý nghĩa

@private Giới hạn phạm vi truy cập của một biến thực thể chỉ trong lớp mà nó đƣợc khai báo.

@protecte d

Giới hạn phạm vi truy cập một biến thực thể trong lớp khai báo nó và các lớp khác kế thừa lớp này.

@public Không giới hạn phạm vi truy cập của biến này.

Các Directives liên quan đến việc xử lý ngoại lệ (Exception handling).

Directive Ý nghĩa

@try Định nghĩa một khối mã lệnh mà trong khối này có thể phát sinh ngoại lệ.

@throw Tung ra một ngoại lệ.

@catch Bắt (khối lệnh đƣợc thực thi nếu ngoại lệ phát sinh) ngoại lệ bên trong khối mã lệnh @try ngay trƣớc nó.

@finally Một khối mã lệnh sẽ đƣợc thực thi không cần biết có ngoại lệ xảy ra trong @try hay không.

Các Directive sử dụng cho từng mục đích cụ thể.

Directive Definition

@class Khai báo tên của một lớp đƣợc định nghĩa ở

đâu đó.

@selector(method_na me)

Trả về selector đã đƣợc biên dịch xác định phƣơng thức có tên là tham số trong dấu ngoặc.

@protocol(protocol_n ame)

Trả về protocol( thực thể của một Protocol class) có tên trong dấu ngoặc. @protocol(không có tham số) cũng hợp lệ khi khai báo chuyển tiếp(forward declarations).

@encode(type_spec) Cho ta chuỗi đã đƣợc encode của tham số type_spec.

@”string” Định nghĩa một hằng chuỗi NSString object

và khởi tạo chuỗi với 7-bit chuẩn ASCII-encoded.

@”string1″ @”string2″ …

@”stringN”

Định nghĩa một hằng chuỗi NSString object. Chuỗi đƣợc tạo ra là kết quả của việc nối các chuỗi xác định trong các directives.

@synchronized() Định nghĩa một khối mã lệnh mà chỉ đƣợc chạy (execute) bằng một thread tại mỗi thời điểm.

in out inout bycopy

byref oneway

Những từ khóa sử dụng cho mục đích quản lý bộ nhớ trong Objective-C Chúng đƣợc gọi là từ khóa nhƣng thực chất là các phƣơng thức trong lớp cha đầu tiên (root class) NSObject.

alloc retain release autorelease

Một số từ khóa khác:

bool là từ khóa trong objective-C nhƣng giá trị của nó ở đây là YES hoặc NO. Trong C và C++ nó có giá trị là TRUE hoặc FALSE.

‘super’ và ‘self’ có thể gọi là từ khóa, nhƣng self là một đối số ẩn của của mỗi phƣơng thức và super chỉ dẫn cho trình biên dịch cách sử dụng mỗi từ khóa self khác nhau.

Các Directives tiền xử lý (Preprocessor Directives)

Các directives tiền xử lý là những thông báo đặc biệt:

Directive Definition

// Sử dụng để bắt đầu 1 dòng chú thích (comment) trong tệp code.

#import Giống nhƣ C và C++ nó đƣợc sử dụng để include một file nhƣng không include nhiều hơn một lần.

- Cách khai báo phƣơng thức trong Objectvie-C Không tham số:

<(kiểu trả về)> Có tham số:

<(kiểu trả về)> :<(kiểu)> :<(kiểu)> ; - Lời gọi phƣơng thức

không trả về: [<đối tƣợng> ];

[<đối tƣợng> :<(kiểu)> ];

[<đối tƣợng> :<(kiểu)> :<(kiểu)> ]; Trả về kết quả: = [<đối tƣợng> ]; = [<đối tƣợng> :<(kiểu)> :<(kiểu)> ];

Lớp và đối tƣợng

Objectvie-C sử dụng khái niệm Interface và Implementation để phân biêt file Header và file Source của C (*.h và *.c) một lớp trong Objective-C định nghĩa là trên một giao diện (.h) còn phần thực thi trên file .m các bạn chú ý là m vì nó khác với C và C++.

@interface:

#import @interface Fraction: NSObject {

int numerator;

@private

int denominator;

}

-(void) print;

-(void) setDenominator: (int) d;

-(int) numerator;

-(int) denominator;

@end

và đây là phần thực thi.

@implementation

#import Fraction.h

@implementation Fraction

-(void) print {

printf( %i/%i, numerator, denominator );

}

-(void) setNumerator: (int) n { numerator = n;

}

-(void) setDenominator: (int) d { denominator = d; } -(int) denominator { return denominator; } -(int) numerator { return numerator; } @end

4. Một số lƣu ý khi lập trình Objectvie-C:

Một số tính chất và đặc điểm của ngôn ngữ lập trình Objective-C: ● Là ngôn ngữ hƣớng đối tƣợng

● Mở rộng từ C

● Nhẹ nhàng (không dùng kỹ thuật máy ảo -Virtual machine)

● Mềm dẻo (mở rộng từ C nên bạn có thể dùng C thuần cấu trúc ngoài ra đây là ngôn ngữ run-time)

● Reflection (có hỗ chợ)

● nil thay thế cho NULL trong C: bạn có thể gửi thông điệp cho nil, nhƣng không thể làm nhƣ vậy với NULL.

● BOOL có 2 giá trị là YES và NO chứ không phải là true và false nữa. ● Khái niệm methods và message đc sử dụng mang ý nghĩa nhƣ nhau đối

với Objective-C theo đó message có những thuộc tính đặc biệt. Một message có thể chuyền động từ obj tới một obj khác. Việc gọi thông điệp trên một obj không có nghĩa là obj đó sẽ thực hiện message nó có thể chuyển tiếp tới một obj khác chƣa biết trƣớc tóm lại có khả năng đáp trả thông điệp không trực tiệp thì gián tiếp.

● Sử dụng #import để thay thế cho #include (đây là cơ chế thông minh hơn #include của C/C++ bạn chỉ phải thêm 1 lần thôi )

● Objectvie-C chỉ cho phép đơn kế thừa. Mặc định tất cả các lớp sẽ kế thừa từ NSObject.

● Cặp @…. và @end là cặp giới hạn phạm vi một lớp.

● Các thuộc tính dc khái báo trong cặp { ….. } và khai báo phƣơng thức ở bên ngoài.

● Nếu phƣơng thức bắt đâu bằng ―+‖ có nghĩa nó là thuộc phạm vi lớp (static), còn nếu ―-‖ thì nó ở phạm vi object.

● Các phạm vi truy xuất public,protected và private giống nhƣ C++ mặc định là protected.

● Các truy nhập phần tử cũng sử dụng toán tử ―.‖ đối với object và ―->‖ nếu là con trỏ.

● không có các tầm vực truy xuất đối với phƣơng thức (tức là trong ObC các phƣơng thức có cùng một tầm vực là public)

Khi làm việc với Objectvie-C bạn cần chú ý là bởi vì nó đƣợc xây dựng trên nền của C cho nên việc bạn sử dụng cú pháp C trộn lẫn với cú pháp chính thống của Objectvie-C là hoàn toàn chấp nhận, tuy nhìn khi sử dụng việc trộn lẫn quá nhiều sẽ gây phức tạp trong việc review code về sau.

Một phần của tài liệu Xây dựng ứng dụng OCR cho thiết bị iPhone (Trang 42)

Tải bản đầy đủ (PDF)

(55 trang)