Chƣơng 4 THỰC NGHIỆM, ĐÁNH GIÁ
4.1. Xây dựng mô hình nhận dạng client-server
Như được trình bày trong chương 4, chúng tôi tiến hành xây dựng hệ thống theo mô hình client-server. Quá trình tiến hành xây dựng và hoàn thiện hệ thống được tiến hành như sau:
Hình 31 Các bước tiến hành thực nghiệm
Chúng tôi tiến hành thực nghiệm với ba bước: cài đặt mô hình client-server, cài đặt các thuật toán tiền xử lý và tiến hành kiểm tra, đánh giá kết quả của các thuật toán.
Cài đặt mô hình client-server
Bước đầu tiên, chúng tôi triển khai mô hình client-server cho bài toán nhận dạng trên thiết bị di động. Ở bước này, server nhận dạng sử dụng ứng dụng nhận dạng hiện có [1] trên PC, để xây dựng thành Web-service nhằm mục đích dễ dàng truy cập và sử dụng từ client là thiết bị di động. Ở phía client (thiết bị Android), chúng tôi xây
Cài đặt mô hình client-server
• Chuyển ứng dụng nhận dạng thành Web-service
• Cài đặt ứng dụng client trên điện thoại Android kết nối đến server
Cài đặt các thuật toán
• Cài đặt các thuật toán tiền xử lý trên điện thoại Android
Kiểm tra, đánh giá
• Kiểm tra các kết quả
dựng ứng dụng có chức năng kết nối đến server để yêu cầu nhận dạng và nhận kết quả trả về.
Thông tin về server như sau:
URL: http://112.137.130.44:8080/Service1.asmx Namespace: NomRecognition
Hình 32 Thông tin dịch vụ (service) nhận dạng của server
Cài đặt thuật toán nhận dạng trên Android
Hình 33 Thiết kế kiến trúc của chương trình client
Ứng dụng được thiết kế theo mô hình MVC nhằm giúp cho các các module trở nên độc lập, nhằm dễ dàng cho việc nâng cấp sau này. Module Views thực hiện cài đặt các màn hình chính của chương trình. Module Controller cài đặt các thuật toán tiền xử lý đã được trình bày trong chương 4, được sử dụng cho bước tiền xử lý của bài toán nhận dạng. Module Models cài đặt các mô hình dữ liệu sử dụng trong bài toán nhận dạng.
Người dùng thao tác với các Views để thực hiện việc nhận dạng, các thuật toán tiền xử lý, giao tiếp với server nhận dạng sẽ được thực hiện ở module Controller, và kết quả trả về sẽ được trả về dưới dạng dữ liệu được định nghĩa ở Models.
Module Views
Chương trình gồm 3 màn hình: màn hình chụp ảnh (CaptureActivity), màn hình nhận dạng một từ (WordRecognitionActivity), và màn hình thực hiện tách chữ và nhận dạng nhiều từ (SegmentationActivity).
Màn hình chụp ảnh cung cấp cho người dùng màn hình để thực hiện việc lựa chọn vùng chữ và chụp ảnh của chữ. Controller CharacterRecognition OtsuBinarization SkewDetectAndCorrect Segmentation Models NomMeanMap SegmentationResult Views CaptureActivity WordRecognitionActivity SegmentationActivity
Hình 34 Ảnh minh họa chụp và chọn chữ
Sau khi người dùng thực hiện xong chụp ảnh, màn hình nhận dạng một từ được hiển thị với ảnh chụp đã được thực hiện nhị phân hóa.
Nếu ở màn hình chụp ảnh, chỉ một từ được lựa chọn, người dùng có thể lựa chọn nhận dạng luôn. Nếu là một vùng chữ được chọn, người dùng lựa chọn thưc hiện tách chữ, màn hình tách chữ và nhận dạng được hiển thị để bắt đầu tiến hành xử lý nghiêng và tách chữ.
Sau khi quá trình xử lý nghiêng và tách chữ thự hiện xong, nút nhận dạng sẽ được hiển thị để người dùng lựa chọn.
Hình 36 Hiển thị nút nhận dạng
Hình 37 Hiển thị kết quả nhận dạng
Module Controller
Các thuật toán được cài đặt trong module Controller, mỗi thuật toán sẽ được cài đặt trong một lớp độc lập. Do đó, việc cải tiến thuật toán, hay cài đặt thêm các thuật toán là dễ dàng và không làm ảnh hưởng đến các thuật toán khác.
Lớp CharacterRecognition thực hiện kết nối với server, gửi ảnh bitmap (được mã hóa dưới dạng chuỗi) của ảnh lên sau đó nhận kết quả nhận dạng và chuyển đổi mã kết quả thành nghĩa Tiếng Việt.
Lớp OtsuBinarization cài đặt thuật toán nhị phân hóa ảnh, thực hiện việc xác định ngưỡng của ảnh xám sau đó nhị phân hóa ảnh xám thành ảnh nhị phân.
Sau khi ảnh được nhị phân hóa, lớp SkewDetectAndCorrect cài đặt thuật toán phát hiện và xử lý nghiêng sẽ thực hiện xử lý nghiêng cho ảnh. Đầu ra sẽ là ảnh đã được xử lý nghiêng.
Lớp Segmentation lấy đầu vào là ảnh đã được xử lý nghiêng, cài đặt thuật toán tách chữ để tiến hành tách chữ. Đầu ra sẽ là một mảng các đối tượng SegmentationResult. Sử dụng mảng đối tượng này, khi người dùng lựa chọn nhận dạng, mỗi chữ sẻ được thực hiện nhận dạng bởi lớp CharacterRecognition.
Trong quá trình thực hiện tiền xử lý, dữ liệu tách chữ được định nghĩa trong lớp SegmentationResult, với thông tin về bitmap, và vị trí trên vùng chữ.
Để tiến hành chuyển đổi từ mã nhận dạng trả về từ server, lớp NomMeanMap cài đặt một ánh xạ từ mã trả về sang nghĩa Tiếng Việt.