Chương trình demo

Một phần của tài liệu Tìm hiểu thuật toán Neural Network và Support Vector Machine Áp dụng nhận dạng chữ số viết tay (Trang 25)

14.1 Cấu trúc dữ liệu học

Thông tin của dữ liệu học được lấy từ địa chỉ

http://archive.ics.uci.edu/ml/datasets/Semeion+Handwritten+Digit, bao gồm - 1593 chữ số viết tay của 80 người được đưa vào máy tính xử lý, chuyển thành hình ảnh nhị phân có kích thước 16x16pixel, mỗi pixel cso giá trị là 0 hoặc 1. - Hình ảnh nhị phân sẽ được ghi vào cơ sở dữ liệu học gồm có 256 thuộc tính (tương đương với 256 pixel), mỗi thuộc tính có giá là là 0 hoặc 1.

14.2 Cấu trúc engine máy học

Input: Là 1 vector có 256 giá trị 0/1 thể hiện cho giá trị đọc từ tập tin dữ liệu học. Output: Là 1 vector có 10 giá trị 0/1, trong đó vị trí của số 1 trong vector này thể hiện cho giá trị của số được nhận dạng.

Ví dụ: số 0 là 1000000000, số 1 là 0100000000 v.v…

Neural Network được cài đặt có 3 layer với input layer có 256 node tương ứng với 256 giá trị sẽ được truyền vào, hidden layer có 266 node và output layer là 10 node tương ứng với 10 giá trị output trình bày ở trên.

SVM được cài đặt thành 10 engine khác nhau dùng để nhận dạng các kí tự từ 0…9. Mỗi engine sẽ có input là 1 vector 256 giá trị và output là {1,-1}. Khi thực hiện nhận dạng, chương trình sẽ duyệt qua 10 engine này để tìm engine nào trả về giá trị output là 1 sẽ tương ứng với số nhận dạng được.

Hình ảnh tự nhiên của 1 chữ số Hình ảnh tự nhiên của 1 chữ số

Dùng hàm findContour để tìm hình chữ nhật nhỏ nhất chứa chữ số cần nhận dạng. Dùng hàm findContour để tìm hình chữ nhật nhỏ nhất chứa chữ số cần nhận dạng.

Cắt hình ban đầu theo kích thước và vị trí hình chữ nhật tìm được. Cắt hình ban đầu theo kích thước và vị trí hình chữ nhật tìm được.

Chuyển thành hình trắng đen (grayscale) Chuyển thành hình trắng đen (grayscale)

Chuyển thành ảnh nhị phân với các pixel có độ xám <130 sẽ có giá trị là 1 và ngược lại. Chuyển thành ảnh nhị phân với các pixel có độ xám <130 sẽ có giá trị là 1 và ngược lại.

Thu nhỏ hình ảnh về kích thước 16x16 pixel Thu nhỏ hình ảnh về kích thước 16x16 pixel

Chuyển ảnh nhị phân thành chuỗi các số 0/1 bằng vòng lặp Chuyển ảnh nhị phân thành chuỗi các số 0/1 bằng vòng lặp

Truyền chuỗi số này vào hàm kiểm tra của SVM và Neuron Network Truyền chuỗi số này vào hàm kiểm tra của SVM và Neuron Network

Các thư viện sử dụng:

- Thư viện MinGW http://www.mingw.org/ để viết ứng dụng bằng C++ chạy trên mọi nền tảng (Windows hoặc Linux)

- Thư viện OpenCV 2.4 http://opencv.willowgarage.com/ hỗ trợ lập trình xử lý hình ảnh bằng C++.

Hướng dẫn cài đặt môi trường windows để chạy ứng dụng demo - Tải và cài đặt thư viện MinGW cho windows tại địa chỉ

http://sourceforge.net/projects/mingw/files/

- Tải và cài đặt thư viện OpenCV cho Windows tại địa chỉ

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.0/

- Cập nhật lại biến PATH cho hệ điều hành. Trên Windows 7, vào "Control Panel", chọn "System and Security", chọn "Advanced system setting", chọn tab "Advanced", chọn "Envioment Variables", ở mục "System variable" chọn Path, bấm Edit và thêm vào chuỗi đường dẫn sau.

C:\msys\bin\;C:\MinGW\bin\;D:\OpenCV\opencv\build\x86\mingw\bin

Đây là 3 đường dẫn tới thư mục binary của 2 thư viện bổ xung ở trên (Tên đường có thể thay đổi tùy vào lúc cài đặt các gói thư viện).

15. Đánh giá

- Cả 2 thuật toán đã nhận dạng được 100% kí tự số không nhiễu được tạo từ các bộ font phổ biến trên máy tính. Và khoảng 60% kí tự viết tay được scan hoặc chụp thành hình ảnh đưa vào máy tính.

- Tuy nhiên tốc độ “training” và nhận dạng của Neural Network chậm hơn SVM khá nhiều.

- Các kí tự số viết tay thường khó nhận dạng được là số 6, số 9, số 8. Lý do chủ yếu là vì chương trình xử lý hình ảnh cho kết quả nhị phân chưa thật sự tốt.

16. Kết luận: (adsbygoogle = window.adsbygoogle || []).push({});

- Việc nhận dạng chữ số viết tay hiện tại không đánh giá chính xác được chất lượng của 2 thuật toán nói trên vì kĩ thuật xử lý ảnh chưa thật sự tốt và còn phụ thuộc nhiều vào chất lượng hình ảnh và độ nhiễu của môi trường xung quanh.

- Tuy nhiên, với tỉ lệ nhận dạng thành công như trên, cũng đã phần nào nói lên hiệu quả khi được đầu tư áp dụng vào thực tế.

Một phần của tài liệu Tìm hiểu thuật toán Neural Network và Support Vector Machine Áp dụng nhận dạng chữ số viết tay (Trang 25)