TÓM TẮT Nhận dạng chữ viết tay có rất nhiều ứng dụng trong thực tế, nó giúp cho việc xử lý các loại biểu mẫu một cách nhanh chóng và hiệu quả.. Đề tài “Thiết kế hệ thống nhúng nhận dạng
TỔNG QUAN VỀ ĐỀ TÀI
Giới thiệu đề tài
Vấn đề nhận dạng chữ viết tay đang là vấn đề mở trong lĩnh vực nhận dạng các mẫu tự và rất quan trọng trong công nghiệp Trọng tâm của vấn đề nằm ở khả năng thiết kế một giải thuật hiệu quả để có thể nhận dạng được các ký tự viết tay bởi người dùng qua tablet, scanner và các thiết bị số khác
Nhận dạng chữ viết tay được nghiên cứu theo hai hướng chính: nhận dạng chữ viết on-line và nhận dạng off-line Nhận dạng off-line là quá trình chuyển đổi ký tự dưới dạng hình ảnh thành các ký tự dạng text Nhận dạng on-line là quá trình chuyển đổi ký tự được viết tay trực tiếp trên các thiết bị số đặc biệt hay PDA sang dạng text Các phần mềm hỗ trợ nhận dạng on-line đang được ứng dụng phổ biến trên smartphone
Các ứng dụng của nhận dạng chữ viết tay đã và đang có nhiều đóng góp vào đời sống Nhận dạng chữ viết tay có thể phục vụ cho các ứng dụng đọc và xử lý các chứng từ, hóa đơn, phiếu ghi, bản viết tay chương trình Tuy nhiên cho đến nay việc nhận dạng chữ viết tay vẫn còn là thách thức lớn đối với các nhà nghiên cứu Đã có nhiều công trình nghiên cứu về nhận diện các mẫu chữ viết tay của các hệ chữ cái Latinh, Ảrập, Trung Quốc nhưng kết quả vẫn còn khá hạn chế do chữ viết tay rất đa dạng về mẫu chữ cũng như các biến thể Các mẫu chữ viết tay phụ thuộc nhiều vào cách viết, trạng thái tinh thần của người viết.
Tình hình nghiên cứu
Nhận dạng chữ viết bằng tay được thực hiện dựa trên hai giải thuật chính: memory base và learning base Memory base lưu trữ ảnh các ký tự mẫu và nhận dạng một ký tự chưa biết bằng cách so sánh với các ký tự mẫu Learning base là giải thuật cố gắng học các mẫu ký tự chưa biết và xây dựng hàm nhận dạng tương ứng
Việc nhận dạng chữ viết tay thường được bắt đầu nghiên cứu với nhận dạng các số Bộ cơ sở dữ liệu chuẩn cho việc nghiên cứu này gồm hai bộ dữ liệu chính: USPS (United State Postal Service) gồm 7291 mẫu dùng để training và 2007 mẫu khác để testing, mỗi mẫu là một ảnh xám có kích thước 16x16; MNIST (National Institute of
Standard and Technology of the United States) gồm 60.000 mẫu dùng để training và 10.000 mẫu dùng để testing, mỗi mẫu là một ảnh xám có kích thước 28x28
Hình 1.1 Các mẫu số từ MNIST data base [15]
Các giải thuật nhận dạng các chữ số trên tập MNIST như: SVD, tangent distance (TD), Grassmannian đã được ứng dụng với những kết quả tương đối tốt Giải thuật SVD (singular value decomposition) là giải thuật đơn giản nhưng có hiệu quả tương đối tốt (đạt tỉ lệ 87.74%) [15] Giải thuật Tanget distance tỉ lệ nhận dạng chính xác là 80.36% Phương pháp Grassmannian được chia thành nhiều giải thuật khác nhau: Vector to vector, vector to subspace, subspace to subspace [15] Các giải thuật của phương pháp Grassmannian đạt tỉ lệ nhận dạng khá hơn so với SVD và TD
Bảng 1.1 Kết quả của các giải thuật trên MNIST data base [15]
Kết quả thực nghiệm trên MNIST data base được thực hiện với nhiều phương pháp khác nhau thường xuyên được cập nhật trên [2]
Bảng 1.2 Kết quả thực nghiệm trên MNIST database thời gian gần đây [2]
Ciresan et al Neural Computation 10, 2010 and arXiv 1003.0358,
800-10 [elastic distortions] width normalization, deslanting 0.39 Meier et al ICDAR
2011 deep convex net, unsup pre- training [no distortions] none 0.83 Deng et al Interspeech
Convolutional nets large/deep conv net, 1-20-
[elastic distortions] none 0.35 Ciresan et al IJCAI
20-P-40-P-150-10 [elastic distortions] width normalization 0.27 +-0.02 Ciresan et al ICDAR
1-20-P-40-P-150-10 [elastic distortions] width normalization 0.23 Ciresan et al CVPR
Trong nghiên cứu về nhận dạng chữ viết tiếng Việt hạn chế [6] kết quả đạt được như bảng 1.3
Bảng 1.3 Kết quả nhận dạng trên dữ liệu tiếng Việt viết tay hạn chế [6]
Kết quả nhận dạng với chữ viết tiếng Việt theo [4] đạt được theo bảng 1.4
Bảng 1.4 Kết quả nhận dạng chữ viết tay tiếng Việt [4]
Phương pháp trích đặc trưng có ý nghĩa quan trọng nó ảnh hưởng đến kết quả nhận dạng Có nhiều phương pháp trích đặc trưng và có nhiều nghiên cứu trên các phương pháp theo [5],[11] Kết quả thực hiện trên tập dữ liệu MNIST theo thuật toán SVM với chiến lược OVO [5] đạt được như bảng 1.5
Bảng 1.5 Kết quả nhận dạng trên tập dữ liệu MNIST với các đặc trưng [5]
Phương pháp nhận dạng bằng mạng neural được sử dụng trong [7] [10] các ký tự font “Arial” kết quả đạt được như bảng 1.6
Bảng 1.6 Kết quả của phương pháp mạng neural [10]
Hiện tại hầu hết các đề tài tìm hiểu về bài toán nhận dạng chữ viết tay đều được thực hiện trên máy tính kết quả đạt được cũng ở mức tương đối.
Mục tiêu và giới hạn đề tài
1.3.1 Mục tiêu của đề tài Đề tài xây dựng hệ thống nhận dạng chữ viết bằng tay trên nền hệ thống nhúng, cụ thể là kiến trúc ARM-cortex trên BeagleBoard xM (BBxM)
Trên cơ sở tìm hiểu và phát triển các giải thuật nhận dạng để đưa ra giải thuật nhận dạng các ký tự viết tay
1.3.2 Giới hạn của đề tài
Bài toán nhận dạng sẽ được thực hiện với bộ chữ cái La tinh bao gồm tập ký tự in hoa cụ thể như sau:
+ Tập ký tự in hoa: A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z Các chữ được kết hợp từ các ký tự và không bị dính nét với nhau
Xây dựng được ứng dụng thực thi trên board nhúng BeagleBoard xM.
Bố cục luận văn
Nội dung của luận văn chia thành 5 chương:
- Chương I: Giới thiệu tổng quan về đề tài, tình hình nghiên cứu, mục tiêu và giới hạn của đề tài
- Chương II: Phần cơ sở lý thuyết Giới thiệu về hệ điều hành nhúng Angstrom, một số lệnh cơ bản trên hệ điều hành Angstrom Phần này cũng giới thiệu về BeagleBoardxM, board nhúng được sử dụng trong đề tài Cuối cùng là giới thiều về OpenCV cùng với một số lý thuyết liên quan đến bài toán nhận dạng
- Chương III: Bài toán nhận dạng chữ viết tay Phần này đi sâu vào giới thiệu về sơ đồ thuật toán nhận dạng chữ viết tay Giải thích chi tiết về phương pháp cũng như thuật toán được sử dụng trong đề tài
- Chương IV: Xây dựng ứng dụng trên Board nhúng BeagleBoard xM Nội dung chương này sẽ mô tả các bước xây dựng ứng dụng trên board nhúng, các phương pháp cũng như các công cụ được sử dụng cho việc biên dịch ứng dụng để có thể thực thi trên một hệ điều hành nhúng
- Chương V: Kết quả Đánh giá kết quả đạt được của đề tài, đưa ra định hướng nghiên cứu và phát triển của đề tài.
CƠ SỞ LÝ THUYẾT
Hệ thống nhúng
Hệ điều hành Ångstrửm là một phiờn bản Linux cho cỏc thiết bị nhỳng (PDAs, Beagleboards, Mobile Phones v.v ) Ångstrửm được phỏt triển bởi một nhúm làm việc với dự ỏn OpenEmbedded, OpenZaurus và OpenSimpad để tạo ra một phiên bản ổn định và thân thiện đối với các thiết bị nhúng như các thiết bị cầm tay, hộp giải mã (set top box), các thiết bị lưu trữ gắn với mạng
Việc sử dụng Linux trên thiết bị nhúng đang được quan tâm Người sử dụng các thiết bị này thường không hài lòng vì chất lượng của hệ điều hành cũng như các phần mềm kèm theo Hoặc thường do “người hâm mộ” Linux không thích khi sử dụng hệ thống dựa trên UNIX Thuận lợi của hệ thống dựa trên UNIX là sự nổi tiếng Với những lý do đó mà các các phiên bản Linux được dùng cho các thiết bị nhúng
Cũng như cỏc phiờn bản hiện đại, Ångstrửm được dựa trờn cỏc gúi đầy đủ (fully package) Tuy nhiên sự tương tác với thiết bị trong khi khởi động giai đoạn cài đặt thì khú khăn Ångstrửm được khởi động (bootstrap) sử dụng một “image”, điều này cần thiết để thiết lập các gói đã liên kết với filesystem image Image này được cài đặt bằng cỏch sử dụng cỏc thiết bị cụ thể và cung cấp cỏc chức năng Ångstrửm cơ bản
Do mục tiêu thực hiên tính linh động cho hệ điều hành cũng như tạo điều kiện tốt nhất cho việc quản lý hệ thống Linux, image của Ångstrửm chỉ cung cấp cỏc gúi cốt lõi Điều này cho phép người dùng tùy biến hệ thống theo nhu cầu Việc thay đổi được thực hiện dễ dàng bằng cách cài thêm các phần mềm, các gói bất kỳ từ nguồn cung cấp của Ångstrửm (Ångstrửm‟s feeds) Tuy nhiờn để thuận tiện cho người dựng Angstrom cung cấp nhiều tùy biến image, ví dụ các image với các môi trường GUI khác nhau được cài đặt trước
2.1.1.2 Các lệnh cơ bản trên hệ điều hành Angstrom Để tìm kiếm các gói đã được cung cấp bởi Angstrom ta có thể truy cập vào [18] Để cập nhật danh sách các gói trên hệ thống, dùng lệnh: opkg update Để tự động cập nhật các gói cần cập nhật trên hệ thống, dùng lệnh: opkg upgrade Để tìm gói ta sử dụng lệnh opkg search ten_goi Để tìm các gói đã có trên hệ thống dùng lệnh opkg list
Khi đã biết tên gói cần cài đặt vào hệ thống, dùng lệnh opkg install ten_goi
Các lệnh trên được thực hiện khi thiết bị kết nối Internet
Nếu gói đã có sẵn trong bộ nhớ lệnh được dùng: opkg install duong_dan/ten_goi.ipk (duong_dan: đường dẫn đến vị trí chứa gói)
Khi cài đặt các gói cần quan tâm đến tính phụ thuộc của các gói Để gở (remove) một gói ra khỏi hệ thống, dùng lệnh: opkg remove ten_goi
Nếu muốn gở luôn các gói phụ thuộc của gói cần gở ta dùng lệnh opkg remove recursive ten_goi
Các thông tin đầy đủ về hệ điều hành Angstrom có thể được tham khảo tại [1] hoặc [19]
Hiện nay có rất nhiều sản phẩm phần cứng phục vụ cho việc nghiên cứu, ứng dụng và phát triển các hệ thống nhúng (xem chi tiết trên [http://free- electrons.com/community/hardware/boards/]) Ở Việt Nam các sản phẩm phần cứng phục vụ khá tốt cho việc nghiên cứu các ứng dụng nhúng đến từ hãng Texas Instrument (USA) và FriendlyArm (Trung Quốc)
BeagleBoard lần đầu tiên được giới thiệu trong năm 2008 của Texas Instruments Qua một thời gian cải tiến và phát triển hiện đã có thêm nhiều phiên bản mới trong đó có BBxM [20]
BeagleBoard (BB) được thiết kế dành cho Cộng đồng mã nguồn mở (Open Source Community) BB được trang bị một tập hợp các tính năng tối thiểu cho phép người dùng trải nghiệm sức mạnh của bộ vi xử lý và không có ý định phát triển đầy đủ nền tảng các đặc tính và giao diện được cung cấp bởi bộ vi xử lý không được truy nhập từ BB Với việc sử dụng bộ giao diện tiêu chuẩn, BB dễ dàng mở rộng để thêm nhiều tính tính năng và giao diện Tất cả các thông tin thiết kế là miễn phí và có thể được sử dụng như là cơ sở cho một sản phẩm
BBxM cung cấp một CPU ARM-Cortex A8 có thể hoạt động tối đa ở tốc độ 1Ghz cùng với bộ nhớ DDRAM công suất thấp 512MB
Kích thước của BBxM khá nhỏ gọn: 3.25" × 3.25" Nó cung cấp khá đầy đủ các kết nối của một máy tính mini: USB port, Audio input conector, Audio output connector, Svideo connector, DVI-D connector, LCD header
Bảng 2.1 Các đặc tính của BBxM [14]
2.1.2.3 Cấu trúc hệ thống BBxM
Sơ đồ khối hệ thống của BBxM được thể hiện trong hình 2.2
Hình 2.2 Sơ đồ hệ thống BBxM [14]
Chi tiết về sơ đồ phần cứng và các chi tiết khác có thể xem tại [14].
Xử lý ảnh số
2.2.1 Giới thiệu chung về xử lý ảnh [13]
Ngày nay hầu hết các lĩnh vực kỹ thuật đều chịu ảnh hưởng của lĩnh vực xử lý ảnh Xử lý ảnh được ứng dụng khá rộng rãi trong các lĩnh vực khoa học như y khoa, thiên văn học, robot công nghiệp Trong đời sống hàng ngày xử lý ảnh cũng có những ứng dụng để hỗ trợ cho con người trong việc nhận dạng đối tượng tự động giúp cho việc quản lý các công việc một cách chính xác và nhanh chóng
Cũng như xử lý dữ liệu bằng đồ hoạ, xử lý ảnh số là một lĩnh vực của tin học ứng dụng Xử lý dữ liệu bằng đồ họa đề cập đến những ảnh nhân tạo, các ảnh này được xem xét như là một cấu trúc dữ liệu và được tạo ra bởi các chương trình Xử lý ảnh số bao gồm các phương pháp và kỹ thuật để biến đổi, để truyền tải hoặc mã hóa các ảnh tự nhiên Mục đích của xử lý ảnh gồm:
* Thứ nhất, biến đổi ảnh và làm đẹp ảnh
* Thứ hai, tự động nhận dạng ảnh hay đoán nhận ảnh và đánh giá các nội dung của ảnh
Nhận dạng ảnh là quá trình liên quan đến các mô tả đối tượng mà người ta muốn đặc tả nó Quá trình nhận dạng thường đi sau quá trình trích chọn các đặc tính chủ yếu của đối tượng Có hai kiểu mô tả đối tượng
- Mô tả tham số (nhận dạng theo tham số)
- Mô tả theo cấu trúc (nhận dạng theo cấu trúc)
Nhận biết và đánh giá các nội dung của ảnh là sự phân tích một hình ảnh thành những phần có nghĩa để phân biệt đối tượng này với đối tượng khác Dựa vào đó ta có thể mô tả cấu trúc của hình ảnh ban đầu Có thể liệt kê một số phương pháp nhận dạng cơ bản như nhận dạng biên của một đối tượng trên ảnh, tách cạnh, phân đoạn hình ảnh Kỹ thuật này được sử dụng nhiều trong y học (xử lý tế bào, nhiễm sắc thể)
Trong thực tế người ta đã áp dụng kỹ thuật nhận dạng khá thành công với nhiều đối tượng khác nhau như: nhận dạng ảnh vân tay, nhận dạng chữ (chữ cái, chữ số, chữ có dấu) Nhận dạng chữ in hoặc đánh máy trong văn bản phục vụ cho việc tự động hoá quá trình đọc tài liệu, tăng nhanh tốc độ và chất lượng thu nhận thông tin từ máy tính, Nhận dạng chữ viết tay (với mức độ ràng buộc khác nhau về cách viết, kiểu chữ, ) Các quá trình của xử lý ảnh:
Các quá trình của xử lý ảnh được tiến hành theo sơ đồ sau:
Hình 2.3 Quá trình xử lý ảnh [13]
Trước hết là qúa trình thu nhận ảnh Ảnh có thể thu nhận qua camera Thường ảnh thu nhận qua camera là tín hiệu tương tự (loại camera ống kiểu CCIR), nhưng cũng có thể là tín hiệu số hoá (loại CCD - Charge Coupled Device) Ảnh có thể thu nhận từ vệ tinh qua các bộ cảm ứng (sensor), hay ảnh, tranh được quét qua scanner Tiếp theo là quá trình số hóa (Digitalizer) để biến đổi tín hiệu tương tự sang tín hiệu rời rạc (lấy mẫu) và số hóa bằng lượng hóa, trước khi chuyển sang giai đoạn xử lý, phân tích hay lưu trữ lại
Quá trình phân tích ảnh thực chất bao gồm nhiều công đoạn nhỏ Trước hết là công việc tăng cường hình ảnh (Image Enhancement) để nâng cao chất lượng hình ảnh Do những nguyên nhân khác nhau: có thể do thiết bị thu nhận ảnh, do nguồn sáng hay do nhiễu, ảnh có thể bị suy biến Do vậy cần phải tăng cường và khôi phục (Image Restoration) lại ảnh để làm nổi bật một số đặc tính chính của ảnh, hay làm cho ảnh gần giống với trạng thái gốc- trạng thái trước khi ảnh bị biến dạng Giai đoạn tiếp theo là phát hiện các đặc tính như biên (Edge Detection), phân vùng ảnh (Image Segmentation), trích chọn các đặc tính (Feature Extraction),v.v
Cuối cùng, tuỳ theo mục đích của ứng dụng, sẽ là giai đoạn nhận dạng, phân lớp hay các quyết định khác Các giai đoạn chính của quá trình xử lý ảnh có thể mô tả ở hình 2.3
Việc xử lý ảnh số được thực hiện với nhiều phương pháp và các giải thuật khác nhau nhằm vào một số mục đích chinh như: biến đổi và làm đẹp ảnh (phục hồi ảnh), nhận dạng, phỏng đoán đối tượng trong ảnh hoặc đánh giá nội dung ảnh Ảnh sau khi xử lý sẽ chứa đựng các thông tin mà người dùng muốn có được (ảnh rõ hơn, phân biệt được các đối tượng có trong bức ảnh )
2.2.2 OpenCV với xử lý ảnh
Thị giác máy là một lĩnh vực đa dạng và đang rất phát triển Khái niệm thị giác máy (Computer vision) có liên quan tới nhiều ngành học và hướng nghiên cứu khác nhau Từ những năm 1970 khi mà năng lực tính toán của máy tính ngày càng trở nên mạnh mẽ hơn, các máy tính lúc này có thể xử lý được những tập dữ liệu lớn như các hình ảnh, các đoạn phim thì khái niệm và kỹ thuật về thị giác máy ngày càng được nhắc đến và nghiên cứu nhiều hơn cho tới ngày nay Hiện tại, lĩnh vực này được các chuyên gia đánh giá là vẫn còn mới mẻ và sẽ có rất nhiều thay đổi trong thời gian tới
Từ giữa những năm thập niên 1980 đã có rất nhiều mô hình hệ thống xử lý hình ảnh được bán ra trên toàn thế giới cùng với các thiết bị ngoại vi kèm theo kết nối với hệ thống máy tính Những năm sau đó thị trường chuyển sang thiết kế các phần cứng cho các hệ thống xử lý đó chính là các board đơn lẽ tương thích với các chuẩn công nghiệp cũng như máy tính các nhân
Lĩnh vực nghiên cứu của thị giác máy rất rộng, và đặc điểm chung là các bài toán về thị giác máy tính đều không có một đề bài chung và cách giải duy nhất Mỗi giải pháp giải quyết vấn đều được một kết quả nhất định cho những trường hợp cụ thể Ta có thể thấy sự tương quan giữa thị giác máy với các lĩnh vực khác
OpenCV viết tắt của Open Source Computer Vision Library, chứa hơn 500 hàm sử dụng trong thị giác máy OpenCV là một thư viện mã nguồn mở http://sourceforge.net/
Thư viện được viết bằng ngôn ngữ C và C++ có thể chạy trên các hệ điều hành Linux, Window và Mac OS X OpenCV được thiết kế để nâng cao hiệu suất tính toán và nhấn mạnh đến hệ thống thời gian thực OpenCV là một hệ thống đơn giản, dễ sử dụng giúp mọi người nhanh chóng xây dựng các ứng dụng trong thị giác máy, kể cả các hệ thống kiểm tra trong nhà máy, hình ảnh trong lĩnh vực y học, bảo mật, rô bốt học v v Nó chứa các hàm lập trình xử lý ảnh rất đơn giản, kể cả thực thi các hàm bậc cao như dò tìm khuôn mặt, theo dõi khuôn mặt, nhận dạng khuôn mặt, lọc Kalman
Kể từ khi được giới thiệu vào tháng 1 năm 1999, OpenCV đã được sử dụng trong rất nhiều ứng dụng, các sản phẩm và các nghiên cứu Ví dụ trong lĩnh vực hàng không vũ trụ, bản đồ web, sử dụng giảm nhiễu trong y học, phân tích đối tượng, an ninh, hệ thống dò tìm, theo dõi tự động và hệ thống bảo mật, quản lý hệ thống sản xuất, xử lý camera, ứng dụng trong quân sự, hệ thống hàng không không người lái, trên mặt đất, các tàu ngầm Ngoài ra, nó còn được sử dụng trong nhận dạng âm thanh OpenCV còn là một chìa khóa quan trọng trong các rô bốt sử dụng thị giác máy như Stanford, Asimo
2.2.2.2 Các hàm cơ bản của OpenCV
OpenCV có rất nhiều hàm Trong nội dung quyển báo cáo sẽ giới thiệu tóm tắt các hàm được sử dụng chính trong phạm vi nghiên cứu của đề tài:
- cvCaptureFromCAM: khởi tạo việc ghi video từ camera Cú pháp:
IplImage* cvLoadImage( const char* filename, int iscolor=CV LOAD IMAGE COLOR);
- cvFindContour: tìm hình bao trong ảnh nhị phân Cú pháp: int cvFindContours (CvArr* image,
CvSeq** first contour, int header size=sizeof(CvContour), int mode=CV RETR LIST, int method=CV CHAIN APPROX SIMPLE,
- cvAdaptiveThreshold: xác định ngưỡng thích nghi cho một ảnh, hàm được dùng để nhị phân hóa ảnh xám Cú pháp: void cvAdaptiveThreshold (const CvArr* src,
CvArr* dst, double maxValue, int adaptive method=CV ADAPTIVE THRESH MEAN C, int thresholdType=CV THRESH BINARY, int blockSize=3,double param1=5);
- cvDilate: làm giãn một đối tượng ảnh sử dụng một phần tử cấu trúc cụ thể Cú pháp: void cvDilate (const CvArr* src,
IplConvKernel* element=NULL, int iterations=1);
- cvErode: làm co một đối tượng ảnh sử dụng một phần tử cấu trúc cụ thể Cú pháp: void cvErode (const CvArr* src,
IplConvKernel* element=NULL, int iterations=1);
- cvMorphologyEx: thực hiện các phép biến đổi hình thái nâng cao Cú pháp của hàm: void cvMorphologyEx (const CvArr* src,
IplConvKernel* element, int operation,int iterations=1);
- cvRectangle: Vẽ hình chữ nhật với các thông số được xác định trong hàm Cú pháp: void cvRectangle (CvArr* img,
CvScalar color, int thickness=1, int lineType=8, int shift=0);
- cvSetImageROI: thiết lập một image theo vùng được đặt trước (vùng hình chữ nhật) Cú pháp: void cvSetImageROI (IplImage* image, CvRect rect);
- cvDrawContours: Vẽ hình bao bên trong hoặc bên ngoài của đối tượng ảnh
Cú pháp: void cvDrawContours (CvArr *img,CvSeq* contour,
CvScalar hole color, int max level, int thickness=1, int lineType=8);
- cvCvtColor: chuyển đổi không gian màu của một bức ảnh Cú pháp: void cvCvtColor (const CvArr* src,CvArr* dst,int code);
- cvQueryFrame: lấy và trả về một khung ảnh từ camera hoặc file video Hàm này thường được đi sau hàm cvCaptureFromCAM Cú pháp của hàm:
Bài toán nhận dạng
Nội dung phần này trích từ [12]
Mẫu (pattern) có thể phân thành 2 loại: mẫu trừu tượng và mẫu cụ thể Các ý tưởng, lập luận và khái niệm là những ví dụ về mẫu trừu tượng, nhận dạng các mẫu như vậy thuộc về lĩnh vực nhận dạng khái niệm Các mẫu cụ thể bao gồm các đối tượng có tính không gian, thời gian và hình ảnh Các đối tượng vật lý, chữ ký, chữ viết, ký hiệu, ảnh, đoạn sóng âm thanh, điện não đồ hoặc điện tâm đồ, hàm số là những ví dụ về mẫu cụ thể
2.3.2 Nhận dạng mẫu là gì ?
Không có một định nghĩa thống nhất cho nhận dạng mẫu (Pattern recognition) nhưng điều này không gây tranh cãi gì trong giới nghiên cứu Sau đây là một số định nghĩa theo ngữ cảnh nghiên cứu:
- Duda Et Al: Nhận dạng mẫu là việc quy những đối tượng vật lí hay sự kiện vào một loại (nhóm) nào đó đã xác định từ trước
- Jürgen Schürmann: Nhận dạng mẫu là việc gán nhãn w cho một quan sát x
- Selim Aksoy: Nhận dạng mẫu là việc nghiên cứu cách làm cho một máy có thể thực hiện:
+ Học cách phân biệt được các mẫu cần quan tâm
+ Đưa ra các quyết định đúng đắn về loại (nhóm) của các mẫu
2.3.3 Lịch sử của lĩnh vực nhận dạng mẫu
Nhận dạng mẫu đã có lịch sử khá lâu đời, trong thập kỷ 60 của thế kỷ 20 hầu hết vấn đề nhận dạng mẫu dừng lại ở việc nghiên cứu lí thuyết thống kê Về sau với sự phát triển mạnh mẽ của máy tính thì phần thực nghiệm cũng trở nên đơn giản hơn Khi mà xã hội chúng ta đang phát triển từ thời kỳ công nghiệp sang hậu công nghiệp, đối với vấn đề tự động hóa thì việc thông tin được nhận và xử lý một cách tự động là rất cần thiết Khuynh hướng này làm cho vấn đề nhận dạng mẫu trở nên rất quan trọng trong ứng dụng kỹ thuật và trong nghiên cứu ngày nay Nhận dạng mẫu tích hợp hầu hết vào các hệ thống máy móc thông minh, có khả năng tự đưa ra quyết định để giải quyết vấn đề
2.3.4 Ứng dụng của nhận dạng mẫu
Nhận dạng mẫu có rất nhiều ứng dụng trong đời sống cũng như trong khoa học kỹ thuật:
- Trong nông nghiệp: Nhận dạng mẫu được sử dụng để phân tích mùa màng, dự báo các đại dịch như châu chấu, sâu bệnh, cúm gia cầm, cúm lợn Ngoài ra nhận dạng mẫu cũng còn được dùng để phân loại đất từ các ảnh được chụp từ vệ tinh
- Khám phá tri thức trên Web: Ngày nay việc bùng nổ lượng thông tin khổng lồ trên Internet làm cho việc tìm kiếm và lọc thông tin trên mạng là hết sức quan trọng Nhận dạng mẫu được nhúng vào các máy tìm kiếm để trả lại kết quả tìm kiếm thông minh và chính xác Ngoài ra nó cũng được trong các hệ thống lọc thư rác, nhận dạng tự động các trang web đen
- Trong lĩnh vực y học: Phân tích và biểu diễn gene, phân loại sinh học dựa trên thông tin di truyền
- Trong lĩnh vực kinh tế: Phân tích đánh giá sự thay đổi kinh tế, chỉ số chứng khoán
2.3.5 Các bài toán nhận dạng mẫu
Trên thực tế thường gặp các bài toán nhận dạng mẫu sau:
- Phân lớp (classify): Dựa trên một tập con đã biết nhãn, đưa ra một cách phân các đối tượng thuộc tập nền thành các lớp
- Phân cụm (cluster): Chia tập đối tượng thành nhóm sao cho các đối tượng trong mỗi nhóm tương đối giống nhau còn các đối tượng khác nhóm thì khác nhau
- Phân tích hồi quy (regression) hay nhận dạng hàm: Xác định một biến (hàm) qua tập các biến khác
- Nhận thực (Identify): Xác định đối tượng trong tập đã cho có là đối tượng đang quan tâm hay không Chẳng hạn như nhận thực vân tay, nhận thực mặt người
- Mô tả: Mô tả các đối tượng dưới hình thức dễ phân tích Ví dụ đối tượng mô tả điện tâm đồ dưới dạng biểu đồ đặc trưng hoặc xâu mã
2.3.6 Các bước xử lý trong hệ thống nhận dạng mẫu
Mặc dù có rất nhiều loại bài toán nhận dạng mẫu, tuy nhiên để giải quyết một bài toán thì một hệ thống nhận dạng mẫu phải thực hiện qua các bước cơ bản dưới đây:
Hình 2.4 Các bước xử lý trong hệ thống nhận dạng mẫu [12]
Nếu là hệ nhận dạng đối tượng vật lý, ở đầu vào của hệ thống thường là một loại thiết bị chuyển đổi như máy ghi hình hay ghi âm… Thiết bị này thu nhận tín hiệu về đối tượng để nhận dạng Các tín hiệu này thông thường sẽ được số hóa, sau đó sẽ được tiến hành tiền xử lý như: lọc nhiễu, tách ngưỡng…
Phân đoạn là một trong những bài toán rất khó trong nhận dạng mẫu Chẳng hạn, trong bài toán nhận dạng văn bản in ra dữ liệu text thì giai đoạn phân đoạn chính là việc xác định đâu là vùng dữ liệu text để nhận dạng, tiếp đó ta phải tách được những vùng có thể là một từ, rồi lại tách tiếp ra từng ký tự Như vậy có thể nói việc phân đoạn trong bài toán nhận dạng mẫu là quá trình xác định được đâu là vùng dữ liệu cần quan tâm
Ranh giới khái niệm giữa việc trích chọn đặc trưng và phân lớp ở mức độ nào đó có phần không rõ ràng: một bộ trích chọn đặc trưng lý tưởng phải làm cho công việc còn lại của bộ phân lớp trở nên dễ dàng Mục tiêu chung của bộ trích chọn đặc trưng là dựa trên tín hiệu thu được mô tả các đối tượng bằng các giá trị của chúng mà chúng có giá trị gần xấp xỉ nhau đối với các đối tượng thuộc cùng loại và khác xa nhau nếu khác loại Hơn nữa để tiện xử lý thì càng ít đặc trưng càng tốt Điều này dẫn đến việc phải tìm ra các đặc trưng khác nhau và chúng không phụ thuộc hoàn cảnh ta thu tín hiệu về đối tượng Đầu ra của công đoạn này được gọi là vector đặc trưng của đối tượng, thông thường đây là một vector số thực
Nhiệm vụ của thành phần này trong hệ thống là sử dụng các vector đặc trưng được cung cấp từ bước trước (trích chọn đặc trưng) để gắn các đối tượng vào các lớp hoặc phân tích hồi quy hay mô tả đối tượng Các kỹ thuật thường được sử dụng cho công đoạn nhận dạng đó là: thuật toán k-láng giềng gấn nhất, mạng neural, máy vector hỗ trợ SVM Nói chung, ở bước này gần như đã có công thức xử lý cố định thường không bị phụ thuộc vào bài nhận dạng mẫu cụ thể nào
Một bộ nhận dạng hiếm khi chỉ để dùng đơn lẻ Thay vào đó nó thường dùng để đưa ra thao tác tương ứng, mỗi thao tác mất một chi phí tương ứng Hậu xử lý sẽ dùng đầu ra của bộ phân lớp để quyết định thao tác tương ứng Theo quan niệm, cách đơn giản nhất để đánh giá hoạt động của một bộ nhận dạng là xem tỷ lệ nhận dạng sai với các mẫu mới Do đó chúng ta cần phải nhận dạng với tỷ lệ lỗi thấp nhất Tuy nhiên chúng ta cần các thao tác tương ứng phải làm cho tổng chi phí là thấp nhất Có thể phải kết hợp các tri thức đã biết về chi phí, và nó sẽ có ảnh hưởng đến việc ra các quyết định hành động Chúng ta cũng cần ước lượng trước chi phí để xem có thỏa mãn hay không.
Phương pháp nhận dạng SVM (Support Vector Machine)
Trong những năm gần đây phương pháp nhận dạng Support Vector Machine (SVM) đã thu hút được sự quan tâm nghiên cứu của các nhà khoa học và đã đạt những kết quả nhận dạng tốt trong nhiều bài toán nhận dạng Trong nhiều trường hợp, chẳng hạn như nhận dạng chữ viết quang học offline, SVM đã đạt những kết quả ngang bằng các phương pháp truyền thống như mạng Neural
Phương pháp SVM được Vapnik đề xuất vào năm 1995 Đây là một phương pháp dựa trên lý thuyết học thống kê (Statistical Learning Theory) nên có một nền tảng toán học chặt chẽ để bảo đảm rằng kết quả đạt được tối ưu Ý tưởng chính của SVM là chuyển tập mẫu từ không gian biểu diễn Rn của chúng sang một không gian Rd có số chiều lớn hơn Trong không gian Rd tìm một siêu phẳng tối ưu để phân hoạch tập mẫu này dựa trên phân lớp của chúng, cũng có nghĩa là tìm ra miền phân bố của từng lớp trong không gian biễu diễn Rn, để từ đó xác định được phân lớp của một mẫu cần nhận dạng
Cũng như mạng Neural, phương pháp SVM là một phương pháp có tính tổng quát cao, có thể áp dụng cho nhiều loại bài toán nhận dạng khác nhau
Xét trường hợp việc phân chia hai lớp mẫu có thể được phân chia hoàn toàn bằng một siêu phẳng tuyến tính (hình 2.5) Việc phân lớp tuyến tính là tìm ra một siêu phẳng H (w.x+ b = 0) với khoảng cách giữa H1 và H2 là lớn nhất
2.4.1.1 Giai đoạn huấn luyện SVM
Giả sử tập mẫu có được gồm l phần tử là:
Trong đó є còn є {-1;1} là phân lớp của
Cần xác định được siêu phẳng mà có thể tách biệt được hai lớp trên Có thể có siêu phẳng như vậy và vấn đề là cần tìm ra siêu phẳng nào làm cho khoảng cách Euclid giữa hai lớp trên là lớn nhất (hình 2.6) Lúc đó các vector có khoảng cách gần siêu phẳng nhất được gọi là support vector
Hình 2.6 Siêu phẳng phân cách hai tập mẫu [8]
Giả sử phương trình siêu phẳng cần tìm là w.x+ b= 0 trong đó w là pháp vector của siêu phẳng w є Ta có hai bất phương trình sau:
Kết hợp hai bất phương trình trên ta được:
Lúc đó những support vector thỏa mãn phương trình w + b= -1 thì nằm trên siêu phẳng , phương trình w + b =+1 thì nằm trên siêu phẳng
Khoảng cách có dấu từ gốc tọa độ đến là: =(1-b)/||w|| (2.3) Khoảng cách có dấu từ gốc tọa độ đến là: = (-1-b)/||w|| (2.4) Suy ra khoảng cách phân hoạch d giữa và là: d = | - |=2/||w|| (2.5)
Do đó để có d lớn nhất thì ||w|| phải nhỏ nhất hay nói cách khác phải đi tìm cực tiểu của Việc tìm cực tiểu sẽ là quá trình đi tìm w và b từ đó tìm ra siêu phẳng
Kết quả của bài toán này theo [16]
(2.6) với α i là hệ số nhân Lagrange
(2.7) với N VS là số vector hỗ trợ
Sau khi tìm ra siêu phẳng phân chia tập mẫu, việc nhận dạng một mẫu x là việc xác định xem x thuộc phân lớp nào Phân lớp y của x (-1 hoặc +1) được xác định theo công thức: y=f(x)=sign(wx+b)=sign( +b) (2.8)
Trường hợp tổng quát chung của bài toán SVM là các mẫu không thể phân chia hoàn toàn bằng một siêu phẳng Lúc này công việc đầu tiên là làm sao chuyển đổi để đưa các mẫu này thành một tập hợp có thể phân chia hoàn toàn Giải pháp cho bài toán này là ánh xạ các mẫu sang một không gian đặc trưng có chiều cao hơn để có thể phân chia hoàn toàn các mẫu này với một siêu phẳng tuyến tính Lúc này hàm ngõ ra được biễu diễn với dạng như sau:
Với x là vector đầu vào cần được phân lớp, K() là hàm kernel sẽ thực hiện một phép ánh xạ từ không gian đầu vào trong không gian đặc trưng Có bốn loại hàm K() thường được sử dụng [9]: tuyến tính, đa thức, Radial Basis Function (RBF) và Signmoid
Trong đó γ và r là các hằng số
Trong một số trường hợp việc phân lớp không thể được thực hiện một cách hoàn toàn dù thực hiện phép ánh xạ Corinna Cortes và Vladimir N Vapnik đã đề xuất thuật toán lề mềm để giải quyết bài toán trong trường hợp này Với bài toán này với mỗi mẫu xi sẽ được gán một sai số ξi
Hai phương pháp phổ biến được đề xuất trong SVM là C-SVM và v-SVM C- SVM dựa trên giá trị khoảng cách lỗi còn v-SVM thì dựa trên phương án tối thiểu số điểm lỗi
Kết quả trong phương pháp C-SVM
Với C là hằng số dương cho trước
Kết quả trong phương pháp v-SVM
(2.16) Trong đó ν ∈ (0, 1] là ngưỡng giữa lỗi huấn luyện và vector hỗ trợ.
HỆ THỐNG NHẬN DẠNG CHỮ VIẾT TAY
Sơ đồ khối và hoạt động của hệ thống
Bài toán nhận dạng chữ viết tay được thực hiện với sự hỗ trợ của thư viện xử lý ảnh OpenCV, giao diện chương trình được xây dựng trên Qt Creator
Trong phần này sẽ trình bày về sơ đồ khối của hệ thống nhận dạng chữ viết tay và chức năng và hoạt động của từng khối Hình 3.1 là sơ đồ khối của hệ thống nhận dạng chữ viết tay
Thu nhận ảnh Thu nhận ảnh Tiền xử lý Thu nhận ảnh Tách ký tự
Trích đặc trưng Nhận dạng
Hình 3.1 Sơ đồ khối hệ thống nhận dạng chữ viết tay Ảnh sẽ được thu vào qua khối thu nhận ảnh, ngõ ra của khối này sẽ là ảnh với kích thước 640x480 Ảnh sau khi thu nhận sẽ được đưa vào khối tiền xử lý, chức năng của khối này là chỉnh sửa, loại bỏ các nhiễu không mong muốn, chuyển ảnh về dạng nhị phân Ngõ ra khối thu nhận ảnh là một ảnh nhị phân 8 bit
Nhiệm vụ khối tách ký tự là nhận dạng được các dòng chữ, chữ và ký tự Công việc sẽ được thực hiện theo từng cấp: tách ảnh ra thành các ảnh nhỏ chứa các dòng thành các mẫu ký tự Ngõ ra của khối tách ký tự là các mẫu ký tự rời rạc theo từng cấp bậc (ký tự thuộc chữ nào và dòng chữ nào)
Khối trích đặc trưng sẽ dùng một số phép toán để lấy ra đặc trưng của mẫu ký tự và tạo thành một mẫu nhận dạng trong bài toán nhận dạng của hệ thống Ngõ ra của khối trích đặc trưng là một vector đặc trưng
Vector đặc trưng có được sau khi trích đặc trưng sẽ được đưa vào khối nhận dạng Khối nhận dạng sẽ kết hợp bộ huấn luyện với vector đặc trưng sẽ đưa ra kết quả nhận dạng Kết quả của khối nhận dạng là một giá trị nhãn có được trong quá trình huấn luyện mẫu với mô hình SVM
Kết quả nhận dạng sẽ được ghi lại và hiển thị trên giao diện chương trình Khối hiển thị kết quả sẽ thực hiện nhiệm vụ này
Sơ đồ thuật toán và giải thuật thực hiện các khối chức năng này sẽ được trình bày chi tiết trong phần tiếp theo sau.
Quá trình thu nhận ảnh
Ảnh đầu vào được thu nhận qua camera với lần lượt từng khung ảnh với chu kỳ lấy từng khung là 33.3ms (30 khung/giây)
Các hàm được sử dụng cho quá trình này là CvCaptureFromCAM và CvQueryFrame được thực hiện trong một timer 33.3ms
Giải thuật được thực hiện như sau:
+ Khởi động camera với hàm CvcaptureFromCAM
+ Khởi động Timer với thời gian 100/3 ms
+ Lấy từng khung ảnh theo timer với hàm CvQueryFrame
Lưu đồ giải thuật quá trình thu nhận ảnh được thể hiện như hình 3.2
Khởi động Timer Lấy khung ảnh
Hình 3.2 Quá trình thu nhận ảnh
Giai đoạn tiền xử lý
Sau khi ảnh được đưa vào hệ thống, quá trình tiền xử lý sẽ thực hiện các phương pháp lọc nhiễu, hiệu chỉnh độ nghiêng, tìm ngưỡng để đưa ảnh về dạng nhị phân phục vụ cho các bước tiếp theo
Quá trình tiền xử lý được thể hiện trong sơ đồ hình sau Ảnh thu được
Nhị phân hóa Ảnh nhị phân
Hình 3.3 Quá trình tiền xử lý
Hình 3.4 Minh họa kết quả tiền xử lý ảnh 3.3.2 Các bước thực hiện
Quá trình tiền xử được thực hiện theo các bước sau:
+ Chuyển đổi ảnh màu sang ảnh xám với hàm cvCvtColor
+ Ảnh xám được lọc nhiễu với hàm cvSmooth
+ Phát hiện vùng chứa nội dung với cvMinAreaRect2
+ Xoay ảnh với cv2DRotationMatrix và cvWarpAffine
Tách ký tự
Ảnh sau khi được nhị phân hóa sẽ được tách ra thành từng dòng chữ, từng chữ và cuối cùng là các ký tự rời rạc
Quá trình tách ký tự được thực hiện cụ thể như sau Ảnh nhị phân
Tách ký tự Ảnh ký tự
Tính toán phân bố năng lượng theo dòng
Tách dựa theo hình bao Tính toán phân bố năng lượng theo cột
Hình 3.5 Quá trình tách ký tự 3.4.2 Các bước thực hiện
Quá trình tách ký tự được chia thành 3 bước chính: tách dòng, tách chữ, tách ký tự
Việc tách dòng được thực hiện như sau:
+ Xác định phân bố điểm ảnh theo dòng: được thực hiện với 3.1
Với i = 0->high-1 (high: chiều cao ảnh) width: độ rộng ảnh
+ Xác định giá trị điểm bắt đầu dòng chữ và độ rộng dòng chữ Giải thuật đuợc thể hiện trong lưu đồ hình 3.6
Sodong =0 Length[sodong]=0 Daudong=0 Flag=0 i=0
Hình 3.6 Giải thuật xác định các dòng chữ
+ Cắt ảnh dòng chữ từ ảnh gốc: Việc cắt ảnh các dòng được thực hiện bằng các hàm cvSetImageROI với vị trí độ lớn được xác định từ lưu đồ hình 3.6 và hàm cvCopy
Hình 3.7 Minh họa quá trình tách dòng
Quá trình thực hiện việc tách chữ được thực hiện theo các bước:
+ Xác định phân bố điểm ảnh theo cột được thực hiện theo 3.2
Với i = 0->width-1 (width: độ rộng ảnh) high: chiều cao ảnh
+ Xác định điểm bắt đầu khoảng trắng, độ rộng khoảng trắng Quá trình này được thực hiện theo lưu đồ hình 3.8
Sospace =0 Length[sospace]=0 Dauspace=0 Flag=0 i=0
Hình 3.8 Giải thuật xác định các chữ trong dòng chữ
+ Cắt ảnh các chữ từ ảnh gốc thực hiện tương tự như cắt ảnh dòng chữ với các vị trí đuược xác định theo giải thuật trong hình 3.8
Hình 3.9 Minh họa quá trình tách chữ 3.4.2.3 Tách ký tự
Do giới hạn của đề tài là nhận dạng các ký tự rời không dính nét nên việc thực hiện tách ký tự được thực hiện theo giải thuật phát hiện hình bao của đối tượng và sau đó cắt các ký tự theo hình chữ nhật nhỏ nhất bao quanh ký tự.
Hình 3.10 Minh họa quá trình tách ký tự
Trích đặc trưng
Quá trình trích đặc trưng được thực hiện trên từng ký tự nhận được sau khi tách ký tự Đặc trưng có ý nghĩa quan trọng trong việc quyết định tỷ lệ nhận dạng đúng ký tự Để tránh những phức tạp của chữ viết tay cũng như tăng cường độ chính xác, ta cần phải biểu diễn thông tin chữ viết dưới những dạng đặc biệt hơn và cô đọng hơn, rút trích các đặc điểm riêng nhằm phân biệt các ký tự khác nhau Dùng các phương pháp biến đổi, giải thuật toán học để tìm ra đặc trưng của các ký tự
Có nhiều hình thức trích đặc trưng thông dụng trong nhận dạng ký tự viết tay: đặc trưng nhị phân, đặc trưng vùng, đặc trưng theo chu tuyến, dùng biến đổi Haar Wavelet
Phương pháp trích đặc trưng được sử dụng trong đề tài là phương pháp trích đặc trưng theo chu tuyến kết hợp với phân bố điểm ảnh theo chiều ngang và chiều dọc Ảnh ký tự được chuẩn hóa kích thước 22x30 Ảnh có nền màu đen nét chữ màu trắng Với phương pháp trích đặc trưng trong đề tài thì chiều dài vector đặc trưng là
156 So với sử dụng phương pháp đặc trưng nhị phân (chiều dài vector đặc trưng là 660) thì phương pháp sử dụng trong đề tài sẽ giúp cho thời gian huấn luyện cũng như nhận dạng nhanh hơn gấp nhiều lần
Quá trình trích đặc trưng được thực hiện như sau: Ảnh ký tự
Trích chu tuyến từ trái sang
Trích chu tuyến từ phải sang
Trích chu tuyến từ trên xuống
Trích chu tuyến từ dưới lên
Phân bố điểm ảnh theo dòng
Phân bố điểm ảnh theo cột
Hình 3.11 Quá trình trích đặc trưng
Vector đặc trưng F có được từ sự kết hợp các giá trị được xác định từ 6 quá trình thực hiện trong hình 3.11
(3.3) với L: là các giá trị đặc trưng lấy từ trái sang có 30 giá trị
R: là các giá trị đặc trưng lấy từ phải sang có 30 giá trị
U: là các giá trị đặc trưng lấy từ trên xuống có 22 giá trị
D: là các giá trị đặc trưng lấy từ dưới lên có 22 giá trị
V: là các giá trị đặc trưng phân bố theo dòng có 30 giá trị
H: là các giá trị đặc trưng phân bố theo cột có 22 giá trị
Vector đặc trưng F có chiều dài là 156
3.5.2 Các bước thực hiện Đặc trưng theo chu tuyến là phương pháp xác định khoảng cách từ các lề của mẫu đến giá trị điểm ảnh trắng (255) đầu tiên theo các chiều và xét theo từng dòng (hoặc từng cột)
3.5.2.1 Chu tuyến từ trái sang
Việc lấy chu tuyến từ trái sang là xác định khoảng cách từ lề trái của mẫu đến vị trí điểm ảnh màu trắng đầu tiên theo từng dòng
Các giá trị đặc trưng L được xác định theo công thức 3.4
Với i = 0->29 d [P(0,i),P W ] là khoảng cách từ điểm ảnh có tọa độ (0,i) đến điểm ảnh có giá trị
255 đầu tiên theo chiều từ trái sang
Hình 3.12 Minh họa trích đặc trưng theo chu tuyến từ trái sang
3.5.2.2 Chu tuyến từ phải sang
Chu tuyến từ phải sang xác định khoảng cách từ lề phải đến điểm trắng đầu tiên trên từng dòng
Các giá trị đặc trưng R được xác định theo công thức 3.5
Với i = 0->29 d [P(21,i),P W ] là khoảng cách từ điểm ảnh có tọa độ (21,i) đến điểm ảnh có giá trị 255 đầu tiên theo chiều từ phải sang
Hình 3.13 Minh họa trích đặc trưng chu tuyến từ phải sang 3.5.2.3 Chu tuyến từ trên xuống
Xác định khoảng cách từ lề trên của mẫu đến điểm trắng đầu tiên theo từng cột Các giá trị đặc trưng U được xác định theo công thức 3.6
Với j = 0->21 d [P(j,0),PW] là khoảng cách từ điểm ảnh có tọa độ (j,0) đến điểm ảnh có giá trị
255 đầu tiên theo chiều từ trên xuống
Hình 3.14 Minh họa trích đặc trưng chu tuyến từ trên xuống 3.5.2.4 Chu tuyến từ dưới lên
Xác định khoảng cách từ lề dưới của mẫu đến điểm trắng đầu tiên theo từng cột Các giá trị đặc trưng D được xác định theo công thức 3.7
Với j = 0->21 d [P(j,29),P W ] là khoảng cách từ điểm ảnh có tọa độ (j,29) đến điểm ảnh có giá trị 255 đầu tiên theo chiều từ dưới lên
Hình 3.15 Minh họa trích đặc trưng chu tuyến từ dưới lên 3.5.2.5 Phân bố điểm ảnh theo dòng Đặc trưng này dựa trên tổng số điểm trắng phân bố trên từng dòng ảnh
Các giá trị đặc trưng V được xác định theo công thức 3.8
Với i = 0->29; P(i,j) giá trị điểm ảnh (i,j)
Hình 3.16 Minh họa đặc trưng phân bố theo dòng 3.5.2.6 Phân bố điểm ảnh theo cột
Xác định tổng số điểm trắng phân bố trên từng cột
Các giá trị đặc trưng H được xác định theo công thức 3.9
Với j = 0->21; P(i,j) giá trị điểm ảnh (i,j)
Hình 3.17 Minh họa đặc trưng phân bố theo cột
Xây dựng bộ huấn luyện
Bộ huấn huyện được xây dựng trên các mẫu chữ viết tay được lấy mẫu theo sơ đồ sau: Ảnh các mẫu ký tự
Chuẩn hóa và trích đặc trưng mẫu Tiền xử lý
Hình 3.18 Quá trình xây dựng bộ huấn luyện
Quá trình tiền xử lý được thực hiện giống như tiền xử lý trong quá trình nhận dạng Quá trình tách rời mẫu được thực hiện bằng phương pháp tách hình bao được sử dụng trong kỹ thuật tách ký tự
Các mẫu ký tự sẽ được lấy đặc trưng theo phương pháp lấy đặc trưng trong quá trình nhận dạng Đặc trưng của mẫu sẽ được huấn luyện theo mô hình SVM.
Nhận dạng và hiển thị kết quả
Mẫu ký tự được tách ra trong quá trình tách ký tự sẽ được đưa vào kết hợp với bộ huấn luyện sẽ cho kết quả nhận dạng
Kết quả sau khi nhận dạng với phương pháp SVM sẽ trả về một giá trị nhãn trong bộ huấn luyện SVM Với mỗi giá trị nhãn sẽ cho ta một ký tự tương ứng Kết quả sẽ được ghi vào file đồng thời hiển thị trên giao diện của ứng dụng
Bộ dữ liệu huấn luyện
Hiển thi kết quả svm_type = CvSVM :: C_SVC; kernel_type = CvSVM :: LINEAR; degree = 0; gamma = 20;
C = 7; term_crit type = CV_TERMCRIT_ITER
| CV_TERMCRIT_EPS; term_crit max_iter = 1000; term_crit epsilon = 1e-6;
Hình 3.19 Quá trình nhận dạng và hiển thị kết quả
XÂY DỰNG ỨNG DỤNG TRÊN BOARD NHÚNG BBxM
Sơ đồ hệ thống
Hình 4.1 Hệ thống phần cứng
Hệ thống phần cứng được sử dụng trong đề tài là Board nhúng BBxM (phần 2.1.2), camera Logitech C525, màn hình LCD dùng để hiển thị kết quả
Hình 4.2 Hệ thống phần mềm
Hệ thống hỗ trợ thiết kế phần mềm gồm có:
+ Hệ điều hành Ubuntu 10.10: xây dựng và thiết kế các giao tiếp với BBxM
+ Angstrom-toolchain: công cụ biên dịch chéo các ứng dụng và packages cho kiến trúc ARM-Cortex A8
+ Qt Creator: công cụ thiết kế giao diện và ứng dụng
+ Qt-Everywhere: Công cụ biên dịch Qt cho kiến trúc ARM Ứng dụng
Qt và OpenCV library Linux kernel, Rootfile Systems
Uboot và Env.txt Logitech Camera
+ OpenCV library: thư viện hỗ trợ cho công việc xử lý ảnh.
Xây dựng hệ điều hành nhúng
Hệ điều hành nhúng có phân vùng khác hẳn so với Window nên việc đầu tiên để xây dựng được hệ điều hành cho hệ điều hành nhúng ta cần phân chia ổ đĩa đúng định dạng để có thể khởi động hệ điều hành Để có thể khởi động hệ thống trên Board nhúng (BBxM), việc đầu tiên là phân vùng thẻ nhớ SD BBxM sử dụng thẻ nhớ SD để lưu trữ tất cả các tập tin Việc phân chia sẽ tạo ra hai partition Partiton thứ nhất được sử dụng để lưu trữ boot loader, kernel và root file system Partition thứ hai được dùng để chứa các file chung của hệ điều hành
Việc phân vùng thẻ nhớ được thực hiện trên hệ điều hành Linux Phiên bản Ubuntu 10.10 được sử dụng để thực hiện công việc này
Sử dụng lệnh dmesg để hiển thị thông tin của SD card
Tạo partition đầu tiên theo định dạng FAT32 Kích thước của partition được chọn là 64M
Command action e extended p primary partition (1-4) p
First cylinder (1-1020, default 1): (Press Enter)
Last cylinder, +cylinders or +size{K,M,G} (1-1020, default 1020): +64M
Hex code (type L to list codes): c
Tạo parttition thứ hai theo định dạng EXT2
Command action e extended p primary partition (1-4) p
First cylinder (18-1020, default 18): (Press Enter)
Last cylinder, +cylinders or +size{K,M,G} (18-1020, default 1020): (Press Enter)
Hex code (type L to list codes): 83
Kiểm tra việc thiết lập và ghi lại các thay đổi trên thẻ nhớ
Disk /dev/sdb: 3951 MB, 3951034368 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Device Boot Start End Blocks Id System /dev/sdb1 * 1 18 67051+ c W95 FAT32 (LBA)
/dev/sdb2 18 1020 3789564+ 83 Linux Command (m for help): w
Cuối cùng là gán các nhãn cho các partition
> mkfs.vfat -F 32 -n "boot" /dev/sdb1
> mke2fs -L "files" /dev/sdb2
U-Boot boot loader được sử dụng để copy kernel và root file system vào bộ nhớ và sau đó boot hệ thống Sử dụng các lệnh dưới để down, giải nén và cài đặt U-boot
> wget ftp://ftp.denx.de/pub/u-boot/u-boot-2010.12-rc3.tar.bz2
> tar -jxf u-boot-2010.12-rc3.tar.bz2
> export CROSS_COMPILE=arm-unknown-linux-gnueabi-
> export PATH="/files/beagle/x-tools/bin:$PATH"
Tiếp theo là cấu hình và make Uboot
Hai file có thể được copy vào thẻ SD File MLO sẽ load U-Boot-binary File này phải được copy vào thẻ trước, sau đó copy U-Boot binary vào thẻ
> mount /dev/sdb1 /mnt/beagle
> wget http://www.angstrom- distribution.org/demo/beagleboard/MLO
> mount /dev/sdb1 /mnt/beagle
> cp u-boot-2010.12-rc3/u-boot.bin /mnt/beagle
U-Boot sẽ tìm script file được sử dụng để thiết lập môi trường boot Scrpit phải được biên dịch sử dụng lệnh mkimage
> cp /files/beagle/u-boot-2010.12-rc3/tools/mkimage
> export PATH="/opt/beagleBoard-xM/bin:$PATH"
Tạo một file script như sau mmc init setenv console tty0 console=ttyS2,115200n8 setenv ramroot /dev/ram0 rw ramdisk_size1072 initrd=0x88000000,128M setenv optargs memM@0x80000000 mem84M@0x88000000 setenv bootargs console=${console} ${optargs} mpurate0 root=${ramroot} rootfstype=ext2 fatload mmc 0 0x82000000 uImage fatload mmc 0 0x88000000 rootfs.ext2 bootm 0x82000000
Sử dụng các lênh dưới đây để tạo một boot script được biên dịch File được tạo ra là file boot.scr sẽ được copy vào thẻ
> mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n 'Boot script' -d bootScript boot.scr
> cp /files/beagle/boot.scr /mnt/beagle
Linux kernel chuẩn có thể dược sử dụng với BBxM Tuy nhiên nó yêu cầu 2 bản patchs Download, giải nén và patch kernel kernel-2.6.36-bb-xm-mmc-fix.patch kernel-2.6.36-bb-xm-usb-pwr.patch
> wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-
> tar -jxf linux-2.6.36.2.tar.bz2
> patch -p1 < /patches/kernel-2.6.36-bb-xm-usb-pwr.patch
> patch -p1 < /patches/kernel-2.6.36-bb-xm-mmc-fix.patch
> export CROSS_COMPILE=arm-unknown-linux-gnueabi-
> export PATH="/files/beagle/x-tools/bin:$PATH"
Kernel image được copy vào thẻ nhớ
> cp arch/arm/boot/uImage /mnt/beagle
4.2.5 Root file system sử dụng buildroot
Buildroot được sử dụng để tạo ra các file system và có thể thêm vào các ứng dụng khác nhau Sử dụng các lệnh sau để giải nén và sử dụng buildroot
> wget http://www.buildroot.org/downloads/buildroot-2010.11.tar.gz
> tar -zpxf buildroot-2010.11.tar.gz
Cấu hình buildroot và copy rootfs.ext2 vào thẻ nhớ
> cp output/images/rootfs.ext2 /mnt/beagle
Sau khi thực hiện các bước trên lúc này trên thẻ SD sẽ có một số file sau: Để boot hệ thống chỉ cần gắn thẻ SD vào khe cắm thẻ của BBxM và nhấn nút power
Chi tiết hơn về quá trình xây dựng hệ điều hành cho BBxM có thể tham khảo tại [21]
Ngoài việc thực hiện các bước như trên, hiện tại cũng có một số forum chuyên về BBxM cũng đã xây dựng sẵn một số Buildroot hỗ trợ những tính năng cần thiết cho việc sử dụng BBxM
Tại [22] có hỗ trợ sẵn một số phiên bản buildroot tùy theo yêu cầu sử dụng mà ta có thể chọn phiên bản phù hợp Để build các buildroot chỉ đơn giản thực hiện các lệnh: git clone git://github.com/MaxGalemin/buildroot.git cd /buildroot make beagle_xm_full_defconfig make
Sau khi thực hiện xong, tất cả các file cần thiết sẽ được đặt trong thư mục buildroot/output/images, bao gồm:
1 MLO – U-Boot SPL first stage bootloader;
3 uEnv.txt – simple file with U-Boot parameters;
5 rootfs.tar – Root Filesystem image;
MLO Loader u-boot.bin U-Boot Boot loader boot.scr U-Boot script uImage Linux Kernel rootfs.ext2 Root Filing System
Việc build buildroot này yêu cầu phải cài đặt toolchain Codesourcery 2011.09-70 trong thư mục /opt/CodeSourcery Toolchain Codesourcery được hướng dẫn cài đặt chi tiết trong [23]
4.2.8 Sử dụng Image file cho BBxM
BBxM được xây dựng sẵn image với hệ điều hành nhúng Angstrom được ship cùng với thẻ nhớ SD 4GB kèm theo BBxM RevC
Image này chứa file Uboot hỗ trợ tốt cho các phiên bản RevA và RevB File uEnv.txt sẽ chứa thông tin cấu hình boot Kernel là phiên bản 2.6.32
Image này được ghi vào thẻ nhớ 4GB bằng một số phần mềm hỗ trợ trên Window Đầu tiên download file ảnh của BBxM từ địa chỉ: http://circuitco.com/support/files/BeagleboardxM/xM_Rev_C_Production_4-25- 2010.7z
Download phần mềm Win32DiskImager để ghi file ảnh vào thẻ nhớ theo địa chỉ: https://wiki.ubuntu.com/Win32DiskImager
Nếu máy tính chưa có phần mềm giải nén file zip download phần mềm 7-zip tại địa chỉ: www.7-zip.org
Download phần mềm format thẻ nhớ HP formating tool từ địa chỉ: http://hp-usb- disk-storage-format-tool.software.informer.com/
Chi tiết về các thao tác ghi file image vào thẻ nhớ có tại [24]
Việc ghi file image cho BBxM có thể được thực hiện tại http://www.angstrom- distribution.org/builder/ cho phép thiết lập các tùy chọn cho hệ điều hành angstrom bằng cách lựa chọn các gói cần thiết cho ứng dụng.
Biên dịch ứng dụng trên Board
Ứng dụng được xây dựng với phần mềm Qt Creator được cài đặt trên hệ điều hành Ubuntu 10.10 Công việc xử lý ảnh được thực hiện với thư viện OpenCV Để có thể thực thi ứng dụng trên BBxM các thư viện hỗ trợ của Qt và OpenCV phải chạy được trên nền kiến trúc ARM Nội dung phần này sẽ trình bày các bước xây dựng và biên dịch Qt và thư viện OpenCV để có thể thực thi ứng dụng trên BBxM
Phần này sẽ cung cấp các bước để build OpenCV cho nền tảng ARM Cortex-A8 sử dụng Cmake trên môi trường Linux Toolchain được sử dụng là Codecourcery 2010.12 Nội dung phần này tham khảo từ [25]
OpenCV sử dụng cmake để build Cmake là một hệ thống meta-makefiles để tạo ra makefile cmake cần được cài đặt trước
$ sudo apt-get install cmake cmake-curses-gui
Download và cài đặt Codesourcery 2010.12 từ http://www.codesourcery.com/sgpp/lite/arm/portal/release1600 Giả sử toolchain được cài đặt trong thư mục /opt/arm-2010.12, add /opt/arm-2010.12/bin đến path
$ export PATH=$PATH:/opt/arm-2010.12/bin
Download OpenCV 2.2 từ http://opencv.willowgarage.com/wiki/ Giải nén và chuyển vào thư mục gốc
$ tar -jxf OpenCV-2.2.0.tar.bz2
Cmake hỗ trợ build bên ngoài source, ta sử dụng phương pháp này để build OpenCV Do đó cần tạo một thư mục trong $HOME để build
Ta cần tạo một file toolchain.cmake để biết được công việc cross-compile
Thêm vào đoạn sau vào file toolchain.cmake và save lại set( CMAKE_SYSTEM_NAME Linux ) set( CMAKE_SYSTEM_PROCESSOR arm ) set( CMAKE_C_COMPILER arm-none-linux-gnueabi-gcc ) set( CMAKE_CXX_COMPILER arm-none-linux-gnueabi-g++ ) set( CMAKE_FIND_ROOT_PATH ~/targetfs)
Run cmake để tạo ra makefile
$ cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake /OpenCV-2.2.0/
Khi biên dịch chéo cho ARM, một số items không thể build vì vậy cần dùng cmake curses gui để tùy chỉnh ngõ ra cmake và tạo lại makefile trước khi build
Tùy chỉnh các thông số sao cho phù hợp với yêu cầu của ứng dụng
Sau khi tùy chỉnh nhấn „c‟ để config và „g‟ để tạo lại makefile Thực hiện lệnh make để tạo ra thư viện OpenCV
Thư viện OpenCV sau khi build chính là các thư viện được sử dụng trên nền kiến trúc ARM và được sử dụng trên BBxM
4.3.2 Thiết lập Qt cho BBxM
Phần này sẽ hướng dẫn các bước xây dựng công cụ biên dịch chéo các ứng dụng xây dựng trên Qt để có thể thực thi trên board nhúng BBxM
Nội dung phần này tham khảo từ [26] Công việc này bao gồm một số bước, chúng ta sẽ lần lượt thực hiện các bước
4.3.2.1 Cài đặt trình biên dịch chéo
Một toolchain cần được cài đặt để biên dịch code trên hệ thống Linux có thể thực thi trên vi xử lý ARM của BBxM Các vi xử lý ARM khác nhau sẽ được biên dịch khác nhau Cách đơn giản nhất là sử dụng một toolchain được cấu hình trước cho hệ điều hành nhúng và vi xử lý ta đang dùng Toolchain hỗ trợ cho việc build ứng dụng trên BBxM với hệ điều hành Angstrom là Angstrom toolchain Toolchain này có thể được download từ: angstrom-2010.4-test-20100422-i686-linux-armv7a-linux-gnueabi- toolchain-qte-4.6.2.tar.bz2 đối với hệ điều hành Ubuntu 32- bit hoặc angstrom-2010.4- test-20100421-x86_64-linux-armv7a-linux-gnueabi-toolchain-qte-4.6.2.tar.bz2 đối với hệ điều hành Ubuntu 64-bit Ta có thể vào webstie http://www.angstrom- distribution.org/toolchains/ để download toolchain mới nhất
Giải nén cho toolchain vừa download sudo tar -xvj -C / -f [DownloadFileName]
Sau khi giải nén ta đã có toolchain để phục vụ cho việc biên dịch chéo ứng dụng trên Qt
Sau khi đã có toolchain ta có thể build Qt Đầu tiên ta phải download Open Source LGPL phiên bản Qt libraries cho Embedded Linux (Qt Everywhere hay Qt Embedded) Các phiên bản Qt Everywhere có thể được download tại trang chủ http://qt.nokia.com/downloads (chọn phiên bản phù hợp với phiên bản Qt Creator đang cài trên máy) Giả sử ta chọn phiên bản 4.6.2
Qt Everywhere download về sẽ được giải nén với lệnh tar -xvzf qt-everywhere-opensource-src-4.6.2.tar.gz
Cần tạo một file make.conf mới Thực hiện lệnh sau để tạo đường dẫn mkspecs mới cho vi xử lý BBxM cp -R [DownloadDirectory]/mkspecs/qws/linux-arm-g++/
[DownloadDirectory]/mkspecs/qws/linux-DM3730-g++/
Thay đổi nội dung file qmake.conf trong thư mục /mkpecs/qws/linux-DM3730- g++/ như sau:
# qmake configuration for building with arm-linux-g++
# include( / /common/g++.conf) include( / /common/linux.conf) include( / /common/qws.conf)
#Compiler Flags to take advantage of the ARM architecture
QMAKE_CFLAGS_RELEASE = -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat- abi=softfp
QMAKE_CXXFLAGS_RELEASE = -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat- abi=softfp
QMAKE_CC = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/gcc
QMAKE_CXX = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/g++
QMAKE_LINK = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/g++
QMAKE_LINK_SHLIB = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/g++
QMAKE_AR = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/ar cqs
QMAKE_OBJCOPY = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/objcopy
QMAKE_STRIP = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/strip load(qt_config)
/configure -opensource -confirm-license -prefix /opt/qt-arm -no- qt3support -embedded arm -little-endian -xplatform qws/linux-DM3730-g++ - qtlibinfix E
Sau khi configure xong tiếp theo là thực hiện lệnh make và make install (công việc này có thể mất vài giờ tùy thuộc vào cầu hình máy tính) make make install
Có thể sử dụng lệnh make –j2 hoặc –j4 đối với máy có CPU lõi kép hoặc lõi tứ để tăng tốc độ biên dịch rút ngắn thời gian thực hiện
4.3.2.3 Thiết lập Qt Creator để biên dịch với nền tảng Qt Everywhere
Khởi động Qt Creator Chọn Tool -> Option -> Qt4
Tại thẻ Qt Versions nhấn vào nút add (biểu tượng dấu „+‟) thêm vào nội dung như hình dưới
Hình 4.3 Add trình biên dịch ARM trên Qt
Toolchain phục vụ cho việc biên dịch chéo đã được thêm vào Qt Creator Khi tạo một project mới từ Qt Creator sẽ có một thông báo cho việc chọn lựa công cụ biên dịch, ta nên chọn hết vừa có trình biên dịch trên máy vừa có trình biên dịch chéo để tiện cho việc kiểm tra Đối với một project có sẵn ta cần add thêm trình biên dịch này vào Ta thực hiện như sau:
+ Chọn mục projects Chọn thẻ Build Settings
+ Nhấn vào nút „add‟ để thêm vào trình biên dịch cho ARM
+ Lúc này để chọn trình biên dịch ta vào mục „Manage‟ để chọn
Hình 4.4 Chọn lựa trình biên dịch cho Qt 4.3.2.4 Biên dịch ứng dụng Qt với thư viện OpenCV cho BBxM
Các thư viện OpenCV được cài sẵn trên Ubuntu không thể sử dụng để build ứng dụng chạy trên ARM, để có thể build ứng dụng Qt có sử dụng thư viện OpenCV ta cần add các thư viện của OpenCV đã được build theo phần 4.2.1 Công việc này được thực hiện như sau:
Mở project Qt, thêm vào đường dẫn đến các thư viện của OpenCV trong file pro
Hình 4.5 Thiết lập file pro
Khi cần build ứng dụng chạy trên máy thì CONFIG += build_host, nếu muốn build ứng dụng chạy trên BBxM thì CONFIG += build_BB
Tương tự trong file header cũng cần chỉ đường dẫn phù hợp để chọn lựa việc build ứng dụng
Hình 4.6 Thiết lập file header 4.3.2.5 Thiết lập BBxM
Các thư viện của Qt và OpenCV sau khi biên dịch đã có thể thực hiện trên nền ARM Cortex-A8 tức là có thể thực thi trên BBxM Tất cả các file được build sẽ được copy vào BBxM theo đúng đường dẫn Đối với Qt Everywhere thì copy theo đường dẫn /opt/qt-arm/lib Trên BBxM sẽ không có sẵn đường dẫn này, ta có thực hiện việc này với các lệnh sau (lệnh này được thực hiện trên BBxM) cd / mkdir opt cd opt mkdir qt-arm cd qt-arm mkdir lib cd lib Đối với các thư viện OpenCV có thể copy vào thư mục /usr/lib trên BBxM
Cần cài thêm một số packages lên BBxM để hỗ trợ Qt opkg update opkg install libgles-omap3 opkg install libstdc++6 opkg install libpng12-0 Để thực hiện được các lệnh trên BBxM cần được kết nối internet Nếu BBxM không được kết nối internet thì các packages cần được download về từ http://www.angstrom-distribution.org/repo/ sau đó copy vào BBxM và thực hiện việc cài đặt với lệnh: opkg install duong_dan/ten_goi.ipk
4.3.2.6 Build và thực thi ứng dụng Qt trên BBxM
Khởi động Qt Creator, mở hoặc tạo một project mới Chọn build setting là qt – arm sau đó build project tạo ra file bin Copy file bin vào BBxM
Sử dụng lệnh sau để thực thi ứng dụng trên BBxM cd duong_dan_den_file
KẾT QUẢ
Kết quả đạt được
Xây dựng được giao diện chương trình trên Qt Creator Kiểm tra hoạt động của hệ thống trên máy tính cá nhân Build chương trình thực thi trên BBxM
Sau đây là một số hình ảnh của chương trình
Giao diện chính của chương trình
Hình 5.1 Giao diện chính của chương trình 5.1.1 Hoạt động của chương trình
Khi khởi động chương trình tất cả các nút nhấn sẽ ở trạng thái “disable” trừ nút
“Start” và “Thoát” Nhấn “Start” cho phép các nút nhấn “Enable”
Khung tùy chọn trên giao diện cho phép chương trình hoạt động ở hai chế độ nhận dạng: nhận dạng từ các file ảnh hoặc nhận dạng từ camera Ở chế độ nhận dạng từ file vùng hiển thị sẽ hiện thị nội dung file ảnh được nhận dạng Nhấn “xử lý” để thực hiện việc nhận dạng Ở chế độ nhận dạng từ camera vùng hiện thị cho biết nội dung lấy được từ camera Nhấn “xử lý” để nhận dạng khung ảnh đang được hiển thị Ở chế độ này khi nhấn “xử lý” khung ảnh cũng sẽ được lưu lại
Chương trình hỗ trợ chức năng điều chỉnh một số thông số khi thu nhận ảnh từ camera Chức năng nằm trong khung chỉnh ảnh trên giao diện bao gồm chỉnh các thông số về độ sáng, độ tương phản, độ chói của ảnh
5.1.2 Một số kết quả đạt được của chương trình nhận dạng
Nhận dạng ảnh với các ký tự kích thước lớn Kết quá nhận dạng khá tốt
Hình 5.2 Kết quả nhận dạng chữ có nhiều dòng chữ
Nhận dạng ảnh các dòng chữ bị nghiêng ở mức độ vừa phải, kết quả nhận dạng tốt
Hình 5.3 Kết quả nhận dạng dòng chữ bị nghiêng
Nhận dạng ảnh có xuất hiện nhiễu (phần nằm ngoài trang giấy), chương trình loại được nhiễu và cho kết quả tốt
Hình 5.4 Nhận dạng ảnh có nhiễu
Nhận dạng ảnh bị nhiễu sáng (làm cho nền ảnh bị chuyển màu) và một phần ảnh không phải trang giấy, kết quả nhận dạng tốt
Hình 5.5 Nhận dạng ảnh có nhiễu sáng
Nhận dạng ảnh với nhiễu trên nền ảnh, kết quả lọc nhiễu tốt và cho kết quả chính xác
Hình 5.6 Nhận dạng ảnh có nhiễu trên nền ảnh
Qua các kết quả trên cho thấy: các ảnh ký tự với nét chữ và độ rộng tương đối thì kết quả nhận dạng khá chính xác
Thời gian xử lý: tùy thuộc vào kích thước khung ảnh và mật độ xuất hiện của các ký tự trên ảnh mà thời gian xử lý khác nhau Đối với ảnh kích thước 320x240 thời gian xử lý trung bình từ 20-40ms Đối với ảnh kích thước 640x480 thời gian xử lý nhiều hơn
Một số kết quả thống kê về thời gian xử lý, tỉ lệ nhận dạng được thể trong các bảng bên dưới
Bảng 5.1 Thời gian nhận dạng
Máy tính cá nhân ~20-40ms ~100-130ms
Số lượng mẫu được sử dụng trong đề tài bao gồm 4799 mẫu trong đó bao gồm
1504 mẫu được dùng để training và 3295 mẫu dùng để test Số lượng các mẫu chữ và kết quả nhận dạng được thể hiện trong bảng 5.2
Bảng 5.2 Kết quả nhận dạng
Ký tự Số mẫu trainning
Tỉ lệ nhận dạng đúng (%) Ký tự nhận dạng sai
Số mẫu CT+ PB * CT ** NP *** sai
Ký tự Số mẫu trainning
Tỉ lệ nhận dạng đúng (%) Ký tự nhận dạng sai
Số mẫu CT+ PB * CT ** NP *** sai
*: phương pháp trích đặc trưng kết hợp chu tuyến và phân bố điểm ảnh theo dòng và cột (sử dụng trong đề tài)
**: Phương pháp trích đặc trưng theo chu tuyến
***: Phương pháp trích đặc trưng nhị phân
Thời gian training và test (thực hiện trên máy tính cá nhân) được thể hiện trong bảng 5.3
Bảng 5.3 Thời gian training và test (laptop)
Kết quả nhận dạng với SVM theo các phương pháp trích đặc trưng:
- CT + PB: hiệu suất 94.43%, thời gian test 1.17s, thời gian training 0.66s
- CT: hiệu suất 93.39%, thời gian test 0.88s, thời gian training 0.51s
- NP: hiệu suất 90.94%, thời gian test 3.78s, thời gian training 1.8s
Từ kết quả trên ta nhận thấy phương pháp trích chu tuyến kết hợp với mật độ điểm ảnh cho hiệu suất nhận dạng tốt nhất và thời gian xử lý ngắn Phương pháp trích nhị phân thời gian xử lý nhiều nhưng tỉ lệ nhận dạng vẫn thấp hơn so với phương pháp chu tuyến
Tỉ lệ nhận dạng của phương pháp này tốt hơn so với [6] (tỉ lệ nhận dạng từ 82.24%- 90.69%) và các phương pháp sử dụng trong [15] (tỉ lệ nhận dạng cao nhất đạt 90.07%)
Các mẫu có tỉ lệ nhận dạng thấp (J,W,Z) là do số mẫu training còn ít, để tỉ lệ nhận dạng tăng lên ta cần thêm số mẫu cho các ký tự này Điểm mới của đề tài là ứng dụng được thực thi trên board nhúng (BBxM) Việc thực hiện các ứng dụng trên board nhúng sẽ giúp hệ thống phần cứng gọn nhẹ có thể sử dụng một cách linh hoạt
Hệ thống có thể nhận dạng được các chữ trên các dòng riêng biệt, có thể tách các chữ trên dòng tương đối chính xác Hầu hết các đề tài nhận dạng chữ viết tay (chữ và số) chỉ thực hiện trên các mẫu rời rạc
Kết quả trên được thực hiện trên các mẫu rời rạc đã được chuẩn hóa chính xác Nếu xử lý trên ảnh còn phụ thuộc vào nhiều các bước thực hiện trong cả hệ thống và do đó tỉ lệ này sẽ có thể giảm thấp hơn.
Kết luận
Sau thời gian nghiên cứu, tìm hiểu và xây dựng chương trình, luận văn đã đạt được những kết quả sau:
+ Xây dựng hoàn chỉnh hệ thống nhận dạng chữ viết tay rời rạc
+ Xây dựng ứng dụng thực thi trên board nhúng BBxM
+ Kết quả nhận dạng ở mức khá cao (trên 90%)
Sau quá trình nghiên cứu, bản thân đã có được thêm nhiều kiến thức mới mà trước đó chưa đồng thời cũng nâng cao thêm một số kiến thức mà bản thân vẫn còn thiếu sót Bản thân đã hiểu rõ hơn về hệ thống nhúng, việc xây dựng ứng dụng trên hệ thống nhúng Biết thêm về phầm mềm Qt Creator, thư viện OpenCV mà trước đây chưa từng sử dụng Nâng cao thêm kiến thức về xử lý ảnh số, các thuật toán nhận dạng
+ Hệ thống chỉ nhận dạng được các ký tự rời rạc không liền nét
+ Kết quả nhận dạng còn phụ thuộc nhiều vào chất lượng ảnh đầu vào (do chất lượng camera)
+ Thời gian nhận dạng trên hệ thống nhúng còn cao (~1s/khung ảnh), do đó để đáp ứng cho hệ thống thời gian thực sẽ gặp nhiều khó khăn.
Hướng nghiên cứu và phát triển
Phát triển mô hình nhận dạng chữ viết để có thể nhận dạng được các chữ viết bị dính nét Việc này đòi hỏi cần phải sử dụng kỹ thuật phân đoạn ảnh nâng cao để có thể tách được các ký tự dính nét Phát triển mô hình nhận dạng chữ viết tay tiếng Việt Chữ viết tay tiếng Việt chỉ có thêm phần dấu, phần còn lại đều giống với chữ cái la tinh Do đó chỉ cần xây dựng thêm bộ training sử dụng để nhận dạng các mẫu dấu
Xây dựng giải thuật hậu xử lý để nâng cao tỷ lệ nhận dạng Kết quả sau khi nhận dạng sẽ được xem xét trong ngữ cảnh để có thể giải quyết một số trường hợp sai so với cấu trúc ngữ pháp tiếng Việt [17]
Cải tiến giải thuật giúp cho hệ thống hoạt động nhanh hơn để có thể đáp ứng với hệ thống thời gian thực Phương pháp đề nghị là kết hợp quá trình tách dòng và ký tự ngay trong quá trình tiền xử lý, điều này sẽ rút ngắn thời gian xử lý của chương trình Trong quá trình tiền xử lý nên xem xét sử dụng phương pháp nhị phân hóa ảnh với phương pháp ngưỡng tự động Otsu.