NHẬN DIỆN CHỮ SỐ SỬ DỤNG THUẬT TOÁN SVM (có code)................... NHẬN DIỆN CHỮ SỐ SỬ DỤNG THUẬT TOÁN SVM (có code)................... NHẬN DIỆN CHỮ SỐ SỬ DỤNG THUẬT TOÁN SVM (có code)................... NHẬN DIỆN CHỮ SỐ SỬ DỤNG THUẬT TOÁN SVM (có code)................... NHẬN DIỆN CHỮ SỐ SỬ DỤNG THUẬT TOÁN SVM (có code)................... NHẬN DIỆN CHỮ SỐ SỬ DỤNG THUẬT TOÁN SVM (có code)...................
Trang 1NHẬN DIỆN CHỮ SỐ SỬ DỤNG
THUẬT TOÁN SVM
Trang 5OCR Optical Character Recognition
SVM Support vector machine
Trang 6CHƯƠNG 1 GIỚI THIỆU
1.1 Giới thiệu về chữ viết tay
• Nhận dạng chữ đang là vấn đề được quan tâm hiện nay và đến nay lĩnh vựcnày cũng đang gặt hái được nhiều thành tựu to lớn trên cả lý thuyết và ứngdụng thực tế Nhận dạng chữ được chia ra làm hai loại: nhận dạng chữ in vànhận dạng chữ viết tay
• Đến bây giờ thì nhận dạng chữ in gần như được giải quyết trọn vẹn Nhậndạng chữ viết tay vẫn đang là vấn đề khó khăn để có thể giải quyết được.Nhận dạng chữ viết tay được chia ra làm 2 loại: Nhận dạng chữ viết tay trựctuyến (online) và nhận dạng chữ viết tay ngoại tuyến (offline)
• Nhận dạng chữ viết tay trực tuyến được thực hiện trên cơ sở lưu lại các thôngtin nét chữ như thứ tự của các nét vẽ, hướng và tốc độ của nét viết trong quátrình viết Vì vậy nên máy tính nhận dạng theo loại này khá đơn giản Ngượclại đối với nhận dạng chữ viết tay ngoại tuyến đầu vào là một văn bản đượcquét nên việc nhận dạng khó hơn nhiều so với nhận dạng trực tuyến Do ảnhđầu vào là một ảnh văn bản nên nhận dạng chữ viết ngoại tuyến hay nhậndạng chữ in còn được gọi chung là nhận dạng chữ quang học (OCR)
• Khó khăn lớn nhất khi nghiên cứu về nhận dạng chữ viết tay là sự biến đổi
đa dạng chữ viết của mỗi người Cùng một chữ viết nhưng lại biến đổi theothói quen, ngữ cảnh và đặc biệt là kiểu viết của từng người Điều này gây ratrở ngại rất lớn cho việc nhận dạng
1.1.1 Phương pháp nhận dạng SVM
• Trong những năm gần đây, phương pháp nhận dạng SVM đã có được nhiềuthành tựu to lớn trong nhận dạng chữ viết ngoại tuyến và đạt được kết quảngang hàng so với phương pháp truyền thống như mạng Neural Networks
• Phương pháp SVM được Vapnik đề xuất vào năm 1995 Đây là phương phápdựa trên lý thuyết học về thống kê nên có nền tảng toán học chặt chẽ và vìvậy nên sẽ cho ra kết quả một cách tối ưu nhất Ý tưởng của phương pháp
Trang 7này là chuyển tập mẫu từ không gian biểu diễn Rn của chúng sang sang mộtkhông gian Rd có số chiều lớn hơn Trong không gian Rd tìm 1 siêu phẳngtối ưu để phân hoạch tập mẫu này dự trên phân lớp của chúng, cũng có nghĩatìm ra miền phân bố của từng lớp trong không gian biểu diễn Rn và từ đó xácđịnh được phân lớp của mẫu cần nhận dạng.
Hình 1-1 Siêu phẳng phân hoạch tập mẫu [1]
• Ý tưởng cơ bản của Kernel SVM và các phương pháp Kernel nói chung làtìm một phép biến đổi sao cho dữ liệu ban đầu không phân biệt tuyến tínhđược có thể biến sang được không gian mới Và ở không gian mới này có thểphân biệt được tuyến tính Cụ thể hơn, Kernel SVM sẽ tìm ra một hàm biếnđổi dữ liệu từ feature ban đầu thành dữ liệu trong không gian mới Hàm nàycần thỏa mãn mục đích của chúng ta: trong không gian mới, phân biệt tuyếntính hoặc gần như phải phân biệt tuyến tính Khi đó, ta có thể dung các bộphân lớp tuyến tính thong thường như: PLA, Logictis Regression, hayHard/Soft Margin SVM
• So sánh với thuật toán Neural Networks Đối với Neural Networks dungactivation functions dùng để phá vỡ tính tuyến tính của mô hình còn hàm
Trang 8tuyến tính Nói chung là giống nhau về kết quả nhưng ta có cách nhìn khácnhau về hướng giải quyết.
• Với hàm này thì kết quả tạo ra sẽ có số chiều cao hơn so với số chiều banđầu, thậm chí có thể đến vô hạn về số chiều Nếu tính toán trực tiếp chúng ta
sẽ gặp một số vấn đề bộ nhớ và hiệu năng tính toán Có cách để tiếp cận trựctiếp với nó là sử dụng Kernel functions mô tả quan hệ giữa hai điểm dữ liệubất kỳ trong không gian mới thay vì phải tính toán từng điểm dữ liệu trongkhông gian mới
• Trong kỹ thuật SVM không gian dữ liệu nhập ban đầu sẽ được ánh xạ vàokhông gian đặc trưng và trong không gian đặc trưng này mặt siêu phẳng phânchia tối ưu sẽ được xác định
• Ta có tập S gồm e các mẫu học:
với một vector đầu vào n chiều xi thuộc Rn thuộc lớp I hoặc lớp II (tương ứngnhãn yi = 1 đối với lớp I và yi = -1 đối với lớp II) Một tập mẫu được gọi làtầm thường nếu tất cả các nhãn bằng nhau
• Đối với các dữ liệu phân chia tuyến tính, chúng ta có thể xác định được siêuphẳng f(x) mà nó có thể chia tập dữ liệu Khi đó với mỗi siêu phẳng nhậnđược ta có: f(x) >= 0 nếu đầu vào x thuộc lớp dương, và f(x) < 0 nếu đầu vào
x thuộc lớp âm
trong đó w là vector pháp tuyến n chiều và b là giá trị ngưỡng
Vector pháp tuyến w xác định chiều của siêu phẳng f(x), còn giá trị ngưỡng bxác định khoảng cách giữa siêu phẳng và gốc
• Tại sao lại sử dụng thuật toán SVM trong phân lớp dữ liệu:
Trang 9o SVM rất hiệu quả để giải quyết bài toán dữ liệu có số chiều lớn (ảnhcủa dữ liệu biểu diễn gene, protein, tế bào, ).
o SVM giải quyết vấn đề overfitting rất tốt (dữ liệu có nhiễu và tách dờinhóm hoặc dữ liệu huấn luyện quá ít)
o Là phương pháp phân lớp nhanh
o Có hiệu suất tổng hợp tốt và hiệu suất tính toán cao
1.1.2 Tính năng HOG
• HOG là một feature descriptor được sử dụng để xử lý hình ảnh dùng để pháthiện một đối tượng Các khái niệm được đưa ra nhưng mãi đến năm 2005HOG mới được sử dụng rộng rãi kể từ sau khi Navneet và Bill Triggs cónhững bổ sung về HOG
• HOG cũng giống như các biểu đồ Edge Orientation, Scale-invariant featuretransform descriptors, shape contexts nhưng HOG tính toán trên một mạnglưới cell dày đặc và chuẩn hóa độ tương phản giữa các khối để nâng cao độchính xác HOG chủ yếu dùng để mô tả sự xuất hiện và hình dạng của mộtchủ đề chính trong ảnh
• HOG sẽ chuyển đổi kích thước cố định của một vector đặc trưng có kíchthước cố định HOG sẽ tính toán cho hình ảnh có kích thước 64 x 128 Kíchthước ban đầu của một hình ảnh là 64 x 128 x 3 = 24576 và sau khi qua tínhnăng HOG thì sẽ giảm xuống 3780
• HOG được thực hiện dựa trên ý tưởng phân bố các gradient theo các địnhhướng một cách hợp lý nhất
Trang 10CHƯƠNG 2 NỘI DUNG CỦA ĐỀ TÀI2.1 Sơ đồ khối
2.1.3 Sử dụng tính năng HOG
• Vì hình ảnh khi đưa vào có khá nhiều những thông tin không quan trọng vàcần thiết cho chúng ta nên cần phải loại bỏ chúng HOG sẽ làm nhiệm vụgiảm kích thước của hình ảnh từ 24576 xuống còn 3780 Dưới đây sẽ là cácbước HOG thực hiện trên hình ảnh có kích thước 64 x 128:
Đưa ảnh vàoTiền xử lý
Sử dụng tính năng HOG
Sử dụng thuật toán SVM để
nhận dạng
Xuất ra kết quả
Trang 11o Bước 1: Tính các gradient x, y, gx , gy từ hình ảnh ban đầu Để tínhđược ta sử dụng 2 ma trận H1 và H2 có kích thước [1 x 3] và [3 x 1],trong đó 1 ma trận là sự xoay 900 so với ma trận còn lại.
Hình 2-2 Ma trận Kernels [1]
o Sử dụng các ảnh gradient để ta tính toán được cường độ và hướng củacủa gradient theo công thức sau:
Hình 2-3 Công thức tính toán gradient
o Góc Theta sẽ nằm trong khoảng 0 đến 180 độ
o Bước 2: Chia hình ảnh ra thành 8x8 cells
o Bước 3: Tính toán biểu đồ trong 8x8 cells: Tại mỗi điểm ảnh trong8x8 cells này ta có được 1 gradient bao gồm hướng và độ lớn củagradient này Vì vậy ta sẽ có được 64 hướng và 64 độ lớn, tức là 128
số sẽ nhỏ gọn và hữu ích hơn cho việc tính toán Sau đó 128 số này sẽđược chuyển đổi thành biểu đồ 9 số Các số của biều đồ sẽ tương ứngvới các đường gradient được định trước: 0, 20, 40, 60, 80, 100, 120,
140, 160 độ Nếu số ở trong khoảng giữa 2 thùng sẽ được tính toán độlớn gradient dựa trên khoảng cách từ điểm đó đến hai số mốc
Trang 12o Bước 4: Bình thường hóa: Việc biểu đồ được tính ở các bước trênchưa làm thay đổi độ sáng một cách mạnh mẽ Việc nhân cường độhình ảnh bằng một yếu tố cũng sẽ tăng giá trị của biểu đồ gây sự sailệch ánh sáng Để khắc phục lỗi này ta sẽ bình thường nó lại để chúngtrở nên không sai lệch Việc thực hiện trên 8x8 cells sẽ tạo ra hình ảnhvới 16x16 cells Vậy thay vì việc biểu đồ có 9 thành phần thì bây giờbiểu đồ sẽ có 36 thành phần.
o Bước 5: Hình ảnh đầu vào là 64 x 128 pixel, chúng ta sẽ di chuyển 8pixel cùng một thời điểm Do đó chúng ta có thể thực hiện được 7bước theo hướng ngang và 15 bước theo hướng dọc Như vậy ta có7x15=105 bước Ở mỗi bước ta có 36 số Vậy ta có 105x36=3780 là
độ dài của vector
• Sau khi trải qua quá trình training và nhận dạng được sẽ xuất ra được kết quả
là chữ số sau khi nhận dạng được Việc khó khăn vẫn là thói quen viết củatừng người nên sự chuẩn xác không phải là chắc chắn
o Phân vùng bộ dữ liệu, training và kiểm tra
o Training sử dụng tính năng HOG
Trang 13o Sử dụng thuật toán SVM để kiểm tra.
2.2.1 Data set
• Ở bước này ta sẽ đưa vào 2 loại dữ liệu là những hình ảnh của những chữ sốviết tay theo nhiều thói quen của nhiều người để dễ dàng nhận dạng Loại dữliệu còn lại là những chữ số được bao quanh những chữ số khác tương tự nhưkhi ta nhìn những chữ số được nhìn thấy với nhau Việc sử dụng càng nhiềumẫu sẽ tạo ra nhiều trường hợp nhận dạng khác nhau nên sẽ đa dạng về cáchnhận dạng
Hình 2-3 Chọn thư mục hình ảnh
Hình 2-4 Synthetic và Handwritten
• Sau bước này chúng ta sẽ biến nó thành 1 vector của toàn bộ hình ảnh trongthư mục theo phương pháp đệ quy Trong đó vector này sẽ chạy từ 1 đến sốthư mục có trong file ta đã chọn ở trên
Hình 2-5 Biến file thành một vector
Trang 14• Sử dụng tính năng HOG thông qua hàm extractHOGFeatures dùng theoCellsize để trích xuất thông tin dữ liệu quan trọng Ở đây thì ta chọn Cellsize
là [4 4] vì nó mã hóa thông tin không gian đủ để xác định trực quan hìnhdạng của chữ số và hạn chế số lượng kích thước HOG hơn so với [2 2] và và
đủ thông tin hơn so với [8 8], giúp tăng tốc độ training Và chọn [4 4] là tối
ưu nhất
Hình 2-6 So sánh lượng thông tin các CellSize
2.2.3 Train HOG
• Phân loại chữ số lúc này là một vấn đề về phân loại đa lớp Phân loại để đưa
nó về 1 trong 10 chữ số có thể là nó Sau khi các hình ảnh được đưa qua bộtrain HOG và sử dụng chức năng fitcecoc để trích xuất ra các kết quả sau khitraining HOG Các tính năng này sẽ được đào tạo và phần loại để đưa qua bộtrain của thuật toán SVM
Trang 15Hình 2-7 Hàm để train HOG
Trang 16Hình 2-9 Kết quả train SVM
• Nhận xét: Kết quả có được không thỏa mong đợi Lý do ở đây là chữ viết tayquá ít hình ảnh nên việc train và đưa ra kết quả xác suất những con số ở đâykhông hoàn toàn đúng và sai lệch cao Cần thêm dữ liệu hình ảnh đưa vào đểxác suất trở nên tốt hơn Vì vậy tập tin Test cần phải được thay đổi các thànhphần hình ảnh để khi nhận dạng có thể tạo ra xác suất nhận dạng tốt nhất khó
có thể gây ra nhầm lẫn Dưới đây là một số tập tin Test được tạo ra ngẫunhiên để so sánh các kết quả tạo ra xác suất nhận dạng được số người dùngmong muốn Từ những kết quả này ta có thể lựa chọn tập tin Test phù hợp đểdùng trong chương trình
Bảng 2-1 12 số mặc định với Cell Size [4 4]
Trang 18Bảng 2-4 12 số tự vẽ với Cell Size [4 4]
Trang 21Bảng 2-12 6 số tự vẽ và 6 số mặc định với Cell Size [8 8]
• Nhận xét: Từ các tập test trên cho ra những kết quả xác suất có thể nhận dạng
ra chữ số người dùng mong muốn Tuy có những bảng có xác suất chính xáccủa một con số là khá cao nhưng xác suất nhận ra các chữ số còn lại là rấtthấp và dễ bị nhầm lẫn với các số khác Vì vậy ta sẽ chọn bảng 12 số mặcđịnh và chọn Cell Size là [4 4]
ra giá trị của các hang và cột của C
• Đây là một trong hai tính năng chính trong thuật toán SVM dùng trongchương trình nhận dạng này Sau khi các hình ảnh qua bộ train HOG đến cáchình ảnh cần nhận dạng cũng được đưa qua bộ extractHOG để phân tích ảnhthành những vector như các ảnh train Sau đó từ hai phần là của ảnh train vàHOG của ảnh cần nhận dạng ta đưa vào tính năng confusion Matrix để kếthợp hai để so sánh các vector của ảnh đưa vào với kết quả đã train được Saumột khoảng thời gian so sánh thì nó sẽ tạo ra một bảng confusion Matrix làkết quả xác suất nhận dạng được con số người dùng mong muốn đã đưa vào
Trang 23CHƯƠNG 1 KẾT QUẢ MÔ PHỎNG1.1 Xây dựng thuật toán
Hình 3-1 Confusion Matrix sau khi training
Hình 3-2 Ảnh sau khi resize đúng chuẩn [16 16]
Hình 3-3 Confusion Matrix của ảnh đưa vào
Trang 24Hình 3-4 Giao diện Guide
Hình 3-5 Kết quả nhận dạng số 0
Trang 25Hình 3-6 Kết quả nhận dạng số 1
Hình 3-7 Kết quả nhận dạng số 2
Trang 26Hình 3-8 Kết quả nhận dạng số 3
Hình 3-9 Kết quả nhận dạng số 4
Trang 27Hình 3-10 Kết quả nhận dạng số 5
Hình 3-11 Kết quả nhận dạng số 5
Trang 28Hình 3-12 Kết quả nhận dạng số 7
Hình 3-13 Kết quả nhận dạng số 8
Trang 29Hình 3-14 Kết quả nhận dạng số 9
Trang 30để nhầm lẫn với những con số còn lại.
• Số 7 xác suất sai lớn nhất bởi cấu tạo số 7 khi viết rất dễ gây ra nhầm lẫn vớinhững số như 3 hay 6
• Ở những kết quả sau khi thực nghiệm ta còn nhận thấy những số 3 hay 5 cócấu tạo từ những đường cong rất giống số 6 nên sự nhầm lẫn đã xảy ra nên
đã nhận dạng ra số 6 gây ra sự sai sót
• Chương trình vẫn chưa hoàn hảo về mặt kết quả do cấu tạo những chữ số nàygồm những đường cong hình thành nên dễ gây ra nhầm lẫn với những số cònlại Điều này cần được khắc phục bằng cách tăng xác suất những chữ số cóxác suất thấp trong bảng Confusion Matrix sau khi training Muốn làm đượcđiều đó cần phải nghiên cứu kỹ càng với tập hình ảnh trong file Test bởinhững chữ số thêm vào có thể gây nhầm lẫn với những số còn lại có thể gây
ra giảm xác suất lúc ban đầu khi chưa thêm vào
Trang 32CHƯƠNG 3 KẾT LUẬN
1.5 Kết luận
• Chương trình đã 80% nhận dạng được những chữ số vẫn còn khiếm khuyếtchưa thể nhận diện được hoàn toàn để cho ra được kết quả hoàn hảo Cầnnghiên cứu thêm để khắc phục lỗi này
Trang 33TÀI LIỆU THAM KHẢO
Tiếng Việt:
[1] m68Z0wL6KkG
https://viblo.asia/p/tim-hieu-ve-hoghistogram-of-oriented-gradients-[2] svm-hoi-gi-dap-nay/
https://ongxuanhong.wordpress.com/2015/09/19/support-vector-machine-Tiếng Anh:
[3] using-hog-features.html
https://uk.mathworks.com/help/vision/examples/digit-classification-[4] https://www.learnopencv.com/histogram-of-oriented-gradients/
[5] https://uk.mathworks.com/help/stats/classificationecoc-class.html?
searchHighlight=ClassificationECOC%20class&s_tid=doc_srchtitle
Trang 34PHỤ LỤC A
function varargout = VoChiCuong(varargin)
% VOCHICUONG MATLAB code for VoChiCuong.fig
% VOCHICUONG, by itself, creates a new VOCHICUONG or raises the existing
% applied to the GUI before VoChiCuong_OpeningFcn gets called An
% unrecognized property name or invalid value makes property
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help VoChiCuong
% Last Modified by GUIDE v2.5 30-Dec-2017 00:02:07
% Begin initialization code - DO NOT EDIT
Trang 35% - Executes just before VoChiCuong is made visible.
function VoChiCuong_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to VoChiCuong (see VARARGIN)
% Choose default command line output for VoChiCuong
% - Outputs from this function are returned to the command line.
function varargout = VoChiCuong_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% - Executes on button press in chon.
function chon_Callback(hObject, eventdata, handles)
% hObject handle to chon (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
syntheticDir = fullfile(toolboxdir('vision'),
'visiondemos','digits','synthetic');
handwrittenDir = fullfile(toolboxdir('vision'),
'visiondemos','digits','handwritten');
trainingSet = imageSet(syntheticDir, 'recursive');
testSet = imageSet(handwrittenDir, 'recursive');
cellSize = [4 4];
img = read(trainingSet(3),4);
[filename, pathname] = uigetfile('*','LOAD AN IMAGE');
img2 = imread(fullfile(pathname, filename));