IỊ1.1. Mô hình bài toán

Một phần của tài liệu báo cáo bài tập lớn xử lý ngôn ngữ tự nhiên đề tài nhận dạng chữ viết (Trang 29 - 34)

Chương IỊ Nội dung thực hiện

IỊ1.1. Mô hình bài toán

trình nhận dạng đó là phân tích tập mẫu và huấn luyện mạng.

IỊ1.1.1. Phân tích mẫu

Get image boundary : cắt lấy khung bao của ký tự

Thuật toán cắt :

o Lấy biên trái : giữ nguyên x (x ban đầu có giá trị 0), xét các giá trị của y từ trên xuống dưới, gặp pixel đen thì dừng lại lưu giá trị của x vào biến

left, nếu xét hết y ở giá trị x tương ứng đó mà không gặp pixel đen nào thì xét đến x tiếp theo theo thứ tự từ trái sang phảị

o Lấy biên phải : giữ nguyên x (x ban đầu có giá trị 319), xét các giá trị của y từ trên xuống dưới, gặp pixel đen thì dừng lại lưu giá trị của x vào biến right, nếu xét hết y ở giá trị x tương ứng đó mà không gặp pixel đen nào thì xét đến x tiếp theo theo thứ tự từ phải sang tráị

o Lấy biên trên : giữ nguyên y (y ban đầu có giá trị 0), xét các giá trị của x từ trái sang phải, gặp pixel đen thì dừng lại lưu giá trị của y vào biến top, nếu xét hết x ở giá trị y tương ứng đó mà không gặp pixel đen nào thì xét đến y tiếp theo theo thứ tự từ trên xuống dướị

o Lấy biên dưới : giữ nguyên y (y ban đầu có giá trị 239), xét các giá trị của x từ trái sang phải, gặp pixel đen thì dừng lại lưu giá trị của y vào biến

bottom, nếu xét hết x ở giá trị y tương ứng đó mà không gặp pixel đen nào thì xét đến y tiếp theo theo thứ tự từ dưới lên trên.

Thuật toán ánh xạ :

o Tạo hai mảng lưu lại các vị trí tọa độ x,y của ảnh sau khi bị cắt được ánh xạ vào ma trận pixel đầu vàọ

o Chia đều giá trị x,y trong tọa độ của mỗi pixel của ảnh bị cắt ra 10 khoảng với x, và 15 khoảng với ỵ Khoảng cách giữa 10 phần và 15 phần đó gọi là bước nhảỵ trong đoạn code dưới đây, bước nhảy là biến temp

temp = (int)(character_width / matrix_width); if (temp < 1) temp = 1;

x_map_axis[0] = 0;

x_map_axis[9] = character_width - 1; x_map_axis[4] = (int)(x_map_axis[9] / 2); x_map_axis[5] = x_map_axis[4] + temp; x_map_axis[2] = (int)(x_map_axis[4] / 2); x_map_axis[3] = x_map_axis[2] + temp; x_map_axis[1] = x_map_axis[0] + temp;

x_map_axis[6] = x_map_axis[1] + x_map_axis[5]; x_map_axis[7] = x_map_axis[2] + x_map_axis[5]; x_map_axis[8] = x_map_axis[3] + x_map_axis[5]; temp = (int)(character_height / matrix_height); if (temp < 1) temp = 1;

y_map_axis[0] = 0;

y_map_axis[14] = character_height - 1; y_map_axis[4] = (int)(y_map_axis[14] / 3); y_map_axis[9] = (int)2 * (y_map_axis[14] / 3); y_map_axis[2] = (int)(y_map_axis[4] / 2); y_map_axis[1] = y_map_axis[0] + temp; y_map_axis[3] = y_map_axis[2] + temp; for (int i = 5; i < 9; i++)

{

y_map_axis[i] = y_map_axis[i - 5] + y_map_axis[4]; }

for (int i = 10; i < 15; i++) {

y_map_axis[i] = y_map_axis[i - 10] + y_map_axis[9]; }

Map input matrix vector :ánh xạ ma trận pixel sang ma trận các số (0,1) tương ứng, pixel đen tương ứng với số 1, pixel trắng tương ứng với số 0.

• Lưu các vector tương ứng của mỗi ảnh trong tập mẫu vào một mảng hai chiều, đó là mảng các vector đầu vàọ

IỊ1.1.2. Huấn luyện mạng

Quá trình huấn luyện mạng được thể hiện qua sơ đồ sau :

Thuật toán huấn luyện :

• Khởi tạo :

o Khởi tạo mạng nơron : số lớp, số nơron lớp ẩn, số đầu vào, số nơron đầu rạ o Khởi tạo các giá trị trọng số, các giá trị này nằm trong khoảng từ 0 - 0.5. • Phân tích, xử lý ảnh trong tập mẫu tạo ra mảng các vector đầu vàọ (adsbygoogle = window.adsbygoogle || []).push({});

• Tính đầu ra, cập nhật trọng số, tính lỗi trung bình.

o Với mỗi vector trong mảng đầu vào, tính đầu ra tương ứng với qua bộ trọng số, so sánh 16 đầu ra của mạng nơron với 16 bit đầu ra mong đợi để tính giá trị lỗi, sau đó cập nhật trọng số, tính lỗi trung bình (Các đầu ra mong đợi là các ký tự tương ứng với các ảnh đưa vào, các ký tự đó đượng chuyển sang dạng Unicode có 16 bit tương ứng với 16 đầu ra của mạng nơron đã cài đặt).

o Hết mảng đầu vào của một vòng huấn luyện epochs, tính lỗi trung bình, so sánh với ngưỡng chấp nhận được của lỗi nếu lỗi trung bình nhỏ hơn ngưỡng chấp nhận được thì dừng quá trình huấn luyện, không thì tính tiếp các vòng huấn luyện sau cho đến vòng cuối cùng theo yêu cầu huấn luyện.

o Các vector cho quá trình huấn luyện được được lấy ra một cách ngẫu nhiên từ tập các vector đầu vàọ

IỊ1.1.3. Modun kiểm thử

Từ tập 150 ảnh cho quá trình test, phân tích như lúc phân tích với tập huấn luyện để thu được tập 150 vector đầu vào cho quá trình test. Các vector này cũng được đưa vào một cách ngẫu nhiên.

Với mỗi vector trong tập 150 vector vào, tính giá trị 16 nơron đầu ra rồi so sánh với ngưỡng 0.5. Nếu giá trị một nơron đầu ra nhỏ hơn ngưỡng 0.5 thì gán giá trị 0 vào phần tử mảng tương ứng với 16 nơron đầu ra, nếu nơron đầu ra có giá trị lớn hơn 0.5 thì gán 1 cho phần tử mảng tương ứng.

Từ 16 bit đầu ra này, tính giá trị của ký tự Unicode tương ứng.

IỊ1.1.4. Modun nhận dạng trực quan

Thực ra đây cũng chỉ là một cách kiểm tra trực quan bằng cách load trực tiếp ảnh của ký tự cần nhận dạng, sau đó chương trình cũng thực hiện các bước phân tích ảnh gồm có cắt ảnh biên, ánh xạ ma trận pixel, ánh xạ ma trận số (0,1) cho vector đầu vàọ Sau đó chương trình cũng thực hiện tính đầu ra tương ứng với vector được trích rút từ ảnh đầu vào, so sánh các giá trị của các nơ ron đầu ra với ngưỡng 0.5 để tạo ra mảng 16 giá trị (0,1) đây được coi là ký tự dạng Unicode, sau đó chương trình sẽ chuyển ký tự Unicode đó sang dạng char.

IỊ1.2. Giao diện chương trình

Một phần của tài liệu báo cáo bài tập lớn xử lý ngôn ngữ tự nhiên đề tài nhận dạng chữ viết (Trang 29 - 34)