Xử lý dữ liệu (phân tích ảnh)

Một phần của tài liệu Nhận dạng chữ viết tay tiếng Việt sử dụng mạng nơron (Trang 57 - 86)

Quá trình phân tích ảnh là quá trình tìm ra đặc tính của ký tự. Các điểm ảnh này chính là giá trị đầu vào cho cả quá trình huấn luyện và quá trình kiểm tra. Quá trình phân tích này dựa trên việc nhận dạng từ ảnh ngƣời sử dụng vẽ vào bằng phƣơng pháp tìm các điểm đen RGB(0,0,0) hoặc điểm trắng

RGB(255,255,255). Kết quả thu đƣợc là ma trận điểm ảnh. Sau đó ma trận này sẽ đƣợc ánh xạ thành véctơ đầu vào có kích thƣớc 100 phần tử. Trƣớc khi đƣa vào mạng véctơ này còn đƣợc xử lý làm nổi điểm ảnh thành véctơ gồm các phần tử 0.5 và -0.5.

Hình 2.4 Quá trình ánh xạ từ ma trận điểm sang ma trận giá trị 2.5.4. Huấn luyện mạng nơron Kohonen

Một mạng nơron đã đƣợc xây dựng sẽ phải đƣợc huấn luyện trên một không gian đầu vào đã đƣợc chuẩn bị trƣớc. Khi hoạt động, mạng nơron sẽ đọc giá trị đã đƣợc huấn luyện.

Sự phức tạp của các tham số cho việc huấn luyện mạng: Việc chọn giá trị cho các tham số (tốc độ học, số lần lặp cần thiết, giá trị ngƣỡng của lỗi ... ) đƣợc dựa vào kinh nghiệm và qua những lần tiến hành thực nghiệm.

Mục đích của quá trình huấn luyện là hiệu chỉnh trọng số W sao cho giống với véctơ đầu vào nhất. Thực hiện hiệu chỉnh các véctơ trọng số ứng với từng ký tự mẫu. Kết quả thu đƣợc một ma trận trọng số W giống với tập véctơ đầu vào. Huấn luyện bao gồm các bƣớc:

 Thiết lập các tham số đầu vào.

 Tất cả các mẫu đầu vào đƣợc lấy mẫu hình ảnh ký tự xuống lƣới kích thƣớc 10*10. Ta đƣợc một ma trận hai chiều kích thƣớc 10*10 có các giá trị tƣơng ứng với giá trị các điểm ảnh.

 Chuyển thành các véctơ đầu vào có kích thƣớc 10* 10.

 Đƣa các véctơ đầu vào vào mạng.

2.5.5 Nhận dạng mạng nơron Kohonen

Quá trình nhận dạng đƣợc diễn ra theo các bƣớc sau:

Bước 1: Ngƣời sử dụng vẽ ký tự cần nhận dạng.

Bước 2: Ký tự đƣợc lấy mẫu xuống lƣới kích thƣớc 10*10. Ta đƣợc một ma trận hai chiều kích thƣớc 10* 10 có các giá trị tƣơng ứng với giá trị các điểm ảnh.

Bước 3: Chuyển ma trận điểm ảnh thành véctơ đầu vào có kích thƣớc 10* 10 bao gồm các giá trị 0.5, - 0.5.

Bước 4: Véctơ đầu vào đƣợc đƣa vào mạng nơron để tìm nơron chiến thắng.

Bước 5: Thiết lập mảng chứa các ký tự trong tập mẫu, với chỉ số của mạng tƣơng ứng với chỉ số của nơron đầu ra.

Bước 6: Ánh xạ nơron chiến thắng vào mảng trên để tìm ra ký tự tƣơng ứng với nơron chiến thắng.

Bước 7: Hiển thị kết quả nhận dạng đƣợc tƣơng ứng với ký tự đƣợc vẽ.

2.5.6 Kết luận

Có nhiều phƣơng pháp để giải quyết bài toán nhận dạng ký tự viết tay tiếng Việt. Nếu áp dụng mạng nơron để giải quyết, thông thƣờng ngƣời ta hay sử dụng mạng dẫn tiến đa lớp cho việc thực hiện nhận dạng. Nhƣng chúng ta sẽ thấy một số khó khăn trong vấn đề tìm ra số nơron trong từng lớp, nhất là lớp ẩn. Thuật toán lan truyền ngƣợc cũng phức tạp hơn, nhiều công thức tính toán hơn, lại phải xét trên từng lớp mạng. Trong khi đó, mạng nơron Kohonen cũng là một loại mạng rất phổ biến, có cấu trúc đơn giản hơn, các bƣớc thực hiện đơn giản,

rõ ràng, dễ dàng lựa chọn và hiệu chỉnh các tham số đầu vào, quá trình huấn luyện mạng nhanh, dễ hội tụ.

Vì vậy, lựa chọn mạng nơron Kohonen để giải quyết bài toán nhận dạng ký tự viết tay tiếng Việt rời rạc trực tuyến sẽ đơn giản và hiệu quả hơn.

CHƢƠNG III

MÔ PHỎNG NHẬN DẠNG KÝ TỰ VlẾT TAY TIẾNG VIỆT RỜI RẠC SỬ DỤNG MẠNG NƠRON KOHONEN

3.1 Giới thiệu

Trong luận văn này do hạn chế về mặt thời gian và độ phức tạp của bài toán nhận dạng chữ viết tay tiếng Việt cho nên tôi chỉ hạn chế mô phỏng nhận dạng ký tự viết tay tiếng Việt rời rạc trực tuyến. Các ký tự tiếng Việt gồm ký tự không dấu {A, B, C, D, Đ, E, G, H, I, K, L, M, N, O, P, Q, R, S, T, U, V, X, Y} và ký tự có dấu {À, Á, Ả, Ã, Ạ, Ă, Ằ, Ắ, Ẵ, Ẳ, Ặ, Â, Ầ, Ấ, Ẩ, Ẫ, Ậ, È, É, Ẻ, Ẽ, Ẹ, Ê, Ề, Ế, Ể, Ễ, Ệ, Ì, Í, Ỉ, Ĩ, Ị, Õ, Ó, Ỏ, Õ, Ọ, Ô, Ồ, Ố, Ổ, Ỗ, Ộ, Ơ, Ờ, Ớ, Ở, Ỡ, Ợ, Ù, Ö, Ủ, Ũ, Ụ, Ƣ, Ừ, Ứ, Ử, Ữ, Ự, Ỳ, Ý, Ỷ, Ỹ, Ỳ}.

Chƣơng trình này đƣợc huấn luyện để có thể nhận dạng ký tự viết tay do ngƣời sử dụng vẽ chúng, chức năng này tƣơng tự nhƣ nhận dạng ký tự viết sử dụng các thiết bị cầm tay PDA (Personal Digital Assistant ). Chƣơng trình gồm một giao diện đơn giản cho phép ngƣời sử dụng dùng chuột vẽ ký tự cần nhận dạng và tiến hành nhận dạng.

Khi vẽ ký tự có một hình chữ nhật xung quanh ký tự đó. Mục đích của hình chữ nhật này là để cắt bất kỳ khoảng trống nào không liên quan đến ký tự, làm cho chƣơng trình có khả năng không cần quan tâm đến vị trí của ký tự đƣợc viết. Ta có thể vẽ ký tự ở giữa, trên, dƣới hay bất kỳ một vị trí khác nhƣng chƣơng trình vẫn có khả năng nhận dạng đúng.

Sau khi vẽ ký tự, ký tự đƣợc cắt bỏ khoảng trống xung quanh mà không liên quan đến ký tự, sau đó đƣợc lấy mẫu xuống vì ký tự đƣợc vẽ có độ phân giải quá

cao mà mạng nơron không hiểu đƣợc. Giảm mẫu hình ảnh, hình ảnh đƣợc ánh xạ vào một lƣới nhỏ có kích thƣớc 10*10. Nhìn vào đây ta có thể thấy đƣợc hình ảnh của ký tự. Nhờ lấy mẫu xuống nên số đầu vào ít hơn khi ký tự đầy đủ kích thƣớc. Đồng thời ký tự đƣợc quy về kích thƣớc cố định, do đó không còn phải quan tâm ký tự đƣợc vẽ lớn hay nhỏ khi huấn luyện hay khi nhận dạng.

Mẫu đƣợc đƣa đến mạng nơron Kohonen và nơron chiến thắng đƣợc lựa chọn. Chƣơng trình trả về ký tự tƣơng ứng với ký tự ngƣời sử dụng vẽ. Số nơron ở đầu ra bằng số ký tự nhận dạng chứa trong tập mẫu.[9]

3.2 Thực hiện chƣơng trình nhận dạng ký tự

Sử dụng ngôn ngữ java để mô phỏng cho việc sử dụng mạng nơron Kohonen để nhận dạng ký tự viết tay tiếng Việt rời rạc trực tuyến.

Một số lớp đƣợc sử dụng cho chƣơng trình này:

Entry.java: Khu vực vẽ ký tự cho phép ngƣời sử dụng vẽ ký tự cần nhận

dạng.

KohonenNetwork.java: Mạng nơron Kohonen. Thực hiện các phƣơng

thức là duy nhất đối với mạng nơron Kohonen. Đây là nơi mạng nơron Kohonen đƣợc huấn luyện.

MainEntry.java: Khung chính của ứng dụng, lớp này bắt đầu ứng dụng

nhận dạng ký tự viết tay.

Network.java: Các hàm chung cho mạng nơron, không chỉ riêng cho

mạng Kohonen. Lớp này để tính chiều dài véctơ, tích vô hƣớng và các công việc chung khác ...

Sample.java: Đƣợc sử dụng để hiển thị hình ảnh đƣợc lấy mẫu xuống trên

lƣới kích thƣớc 10* 10.

SampleData.java: Đƣợc sử dụng để lƣu giữ các tham số của hình ảnh lấy

mẫu xuống.

TrainingSet.java: Gồm các véctơ đầu vào kích thƣớc 100 phần tử để

huấn luyện cho mạng nơron.

3.2.1 Xác định các tham số cho mạng

Có rất nhiều loại mạng nơron khác nhau. Hầu hết đƣợc đặt theo tên ngƣời sáng tạo ra nó. Mạng nơron sẽ đƣợc sử dụng trong ứng dụng này là mạng nơron Kohonen. Các ký tự sau khi vẽ, đƣợc lấy mẫu xuống và đƣợc đƣa vào đầu mạng nơron. Có một nơron đầu vào cho mỗi điểm ảnh trong hình ảnh đƣợc lấy mẫu xuống. Vì hình ảnh đƣợc lấy mẫu xuống có kích thƣớc 10*10 nên có 100 nơron đầu vào. Số nơron đầu ra bằng số ký tự mẫu.

Ngoài yếu tố đầu vào và đầu ra còn có các kết nối giữa các nơron. Các trọng số này không bằng nhau đối với tất cả các kết nối. Mỗi kết nối đƣợc chỉ định một trọng số. Trọng số này là yếu tố duy nhất xác định đầu ra mạng nơron ứng với mỗi mẫu đầu vào. Để xác định tổng số kết nối phải nhân số nơron đầu vào với số nơron đầu ra. Mạng có kết nối đầy đủ nghĩa là mỗi đầu vào đƣợc kết nối với tất cả các đầu ra. Quá trình đào tạo là quá trình tìm ra các giá trị chính xác cho các trọng số này.

3.2.2 Vẽ hình ảnh

Mặc dù không trực tiếp liên quan đến mạng nơron, song quá trình ngƣời sử dụng vẽ ký tự là một phần quan trọng của ứng dụng nhận dạng ký tự viết tay tiếng Việt.

Lớp này định nghĩa một số thuộc tính đƣợc mô tả nhƣ sau:

downSampleTop: Cạnh trên của vùng cắt đƣợc sử dụng khi lấy mẫu

xuống.

downSampleBottom: Cạnh dƣới của vùng cắt đƣợc sử dụng khi lấy mẫu

xuống.

downSampleLeft: Cạnh trái của vùng cắt đƣợc sử dụng khi lấy mẫu

xuống.

downSampleRight: Cạnh phải của vùng cắt đƣợc sử dụng khi lấy mẫu

xuống.

entryGraphics: Một đối tƣợng đồ họa cho phép vẽ hình ảnh lên vùng để

vẽ tƣơng ứng với vùng vẽ ký tự.

entryImage: Những hình ảnh ký tự mà ngƣời sử dụng vẽ.

lastX: Tọa độ x cuối cùng mà ngƣời sử dụng vẽ tại đó.

lastY: Tọa độ y cuối cùng mà ngƣời sử dụng vẽ tại đó.

pixelMap: Số lƣợng pixel mà lấy mẫu xuống, điều này đƣợc thực hiện từ entryImage.

 ratioY: Tỷ lệ lấy mẫu xuống theo chiều y.

 sample: Đối tƣợng sẽ chứa hình ảnh đƣợc lấy mẫu xuống.

Hầu hết các ký tự vẽ đƣợc xử lý bởi processMouseMotionEvent. Nếu ngƣời sử dụng rê chuột để vẽ thì có một đƣờng đƣợc nối từ vị trí đặt chuột đầu tiên đến vị trí hiện tại của chuột. Đƣờng này đƣợc vẽ ra màn hình trong khung vẽ ký tự tƣơng ứng với ký tự vẽ vào.

3.2.3 Lấy mẫu xuống hình ảnh

Mỗi lần ký tự đƣợc vẽ để huấn luyện hay để nhận dạng, nó phải đƣợc lấy mẫu xuống.

3.2.3.1 Lƣu hình ảnh đƣợc lấy mẫu xuống

Hình ảnh đƣợc lấy mẫu xuống đƣợc lƣu trong lớp SampleData. Chƣơng trình thực hiện với một lƣới kích thƣớc 10*10. Tất cả hình ảnh đƣợc lấy mẫu xuống đƣợc lƣu trong lớp này. Lớp SampleData cũng bao gồm các phƣơng thức đã thiết lập và nhận đƣợc dữ liệu liên kết với lƣới lấy mẫu xuống. Lớp SampleData cũng chứa một phƣơng thức, đặt tên là clone, sẽ tạo ra một bản sao chính xác của hình ảnh này.

3.2.3.2 Kích thƣớc và vị trí

Tất cả hình ảnh đƣợc lấy mẫu xuống trƣớc khi đƣợc sử dụng. Điều này giúp cho mạng nơron không bị nhầm lẫn về vị trí và kích thƣớc. Vùng để vẽ đủ lớn để có thể vẽ ký tự với các kích thƣớc khác nhau. Bằng cách lấy mẫu hình ảnh xuống một kích thƣớc phù hợp, do đó không còn quan tâm đến vấn đề ký tự đƣợc viết có kích thƣớc nhƣ thế nào.

Khi vẽ một ký tự, đầu tiên chƣơng trình sẽ vẽ một hộp xung quanh biên của ký tự. Điều này cho phép loại bỏ tất cả khoảng trống xung quanh ký tự đƣợc vẽ. Quá trình này đƣợc thực hiện bên trong phƣơng thức downsample của lớp Entry.java. Thực hiện cắt hình ảnh này, và cuối cùng lấy mẫu xuống, chúng ta phải lấy các mẫu bit của hình ảnh ký tự. Điều này đƣợc thực hiện bằng cách sử dụng một lớp "PixelGrabber".

Để cắt hình ảnh và loại bỏ bất kỳ khoảng trống xung quanh, việc cắt đƣợc thực hiện bằng cách kéo bốn đƣờng ảo từ trên, bên trái, bên phải va từ dƣới của hình ảnh, nếu gặp điểm ảnh nào thì dừng lại không quét nữa. Bằng cách này bốn đƣờng thẳng sẽ là các cạnh ngoài của hình ảnh. Cả hai phƣơng thức hLineClear và vLineClear chấp nhận một tham số cho biết dòng quét, và trả về giá trị true

nếu dòng đó là trống. Chƣơng trình hoạt động bằng cách gọi hLineCIear và vLineClear cho đến khi gặp cạnh ngoài của ký tự. Để tính toán đƣờng biên trên cùng của hình chữ nhật giới hạn ký tự, chƣơng trình bắt đầu từ 0 và tiếp tục xuống dƣới hình ảnh. Để tìm đƣờng biên dƣới thực hiện quét ngƣợc lại từ dƣới đáy hình ảnh ký tự lên. Các quy trình để xác định giới hạn trái và phải đƣợc thực hiện cũng theo cách này.

3.2.3.3 Thực hiện lấy mẫu xuống

Sau khi ký tự đƣợc cắt nó sẽ đƣợc lấy mẫu xuống. Hình ảnh có độ phân giải lớn đƣợc giảm xuống thành độ phân giải 10*10. Tƣởng tƣợng rằng ta vẽ một lƣới lên trên ký tự, phân chia thành các hình vuông với 10 đƣờng ngang va 10 đƣờng xuống, Nếu bất kỳ điểm ảnh nào đƣợc điền đầy thì trong lƣới 10* 10 đó điểm ảnh tƣơng ứng cũng đƣợc điền đầy. Phần lớn công việc thực hiện quá trình này đƣợc thực hiện trong phƣơng thức "DownSampleQuadrant".

Phƣơng thức "downSampleRegion" chấp nhận số lƣợng vùng cần đƣợc tính toán. Đầu tiên, phải tính toán tọa độ x, y ban đầu và cuối cùng . Phƣơng thức "downSampleLeft" đƣợc sử dụng để tính toán tọa độ x cho vùng đầu tiên, đây là cạnh bên trái của hình chữ nhật bao quanh ký tự. Sau đó x đƣợc nhân với hệ số tỷ lệ x. Đó là tỷ lệ bao nhiêu pixel cho mỗi ô vuông. Điều này cho phép xác định nơi đặt "startX", và điểm bắt đầu "startY" đƣợc tính toán theo cách tƣơng tự. Tiếp theo lặp với mỗi tọa độ x và y thuộc mỗi hình vuông, Nếu có số chẵn pixel thì điền đầy, sau đó phƣơng thức trả lại giá trị đúng. Điều này chỉ ra rằng miền này đƣợc điền đầy.

3.2.4 Các tập huấn luyện

Để huấn luyện mạng phải cung cấp các tập huấn luyện. Dữ liệu huấn luyện này đƣợc lƣu trong các lớp TrainingSet.

Trong các lớp Trainingset lƣu các biến sau:

inputCount: Số các yếu tố đầu vào cho mỗi mẫu đào tạo.

outputCount: Số các yếu tố đầu ra cho mỗi mẫu đào tạo.

input[] []: Mẫu đầu vào huấn luyện.

output[][]: Mẫu đầu ra huấn luyện.

trainingSetCount: Số lƣợng mẫu huấn luyện 3.2.5 Lớp mạng cơ bản

Các thuộc tính đƣợc sử dụng cho các mục đích sau:

NEURON_ON: Giá trị mà một nơron phải lớn hơn hoặc bằng để đƣợc coi

NEURON_OFF: Giá trị mà một nơron phải nhỏ hơn hoặc bằng để đƣợc

coi là "off".

output[]: Đầu ra của mạng nơron.

totalError: Lỗi từ lƣợt cuối cùng. Đây là tổng 1ỗi của tất cả tập huấn

luyện.

inputNeuronCount: số nơron đầu vào.

outputNeuronCount: số nơron đầu ra.

random: Bộ tạo số ngẫu nhiên, đƣợc sử dụng để khởi tạo trọng số có giá

trị ngẫu nhiên.

Lớp mạng bao gồm phƣơng thức tính chiều dài véctơ cho một véctơ. Phƣơng pháp này tính tổng bình phƣơng các số có trong véctơ. Một chức năng quan trọng khác của các lớp cơ sở là tính tích vô hƣớng. Lớp mạng Kohonen đƣợc cung cấp nhƣ mạng con.

Trọng số đƣợc khởi tạo ban đầu với các giá trị ngẫu nhiên. Các giá trị ngẫu nhiên này đƣợc huấn luyện để tạo ra kết quả tốt hơn. Lúc bắt đầu của mỗi chu kỳ huấn luyện các trọng số cũng đƣợc khởi tạo ngẫu nhiên. Lớp mạng tạo ra một phƣơng thức để làm điều này.

3.2.6 Lớp mạng nơron Kohonen

Các thuộc tính đƣợc sử dụng bởi mạng Kohonen đƣợc tóm tắt nhƣ sau:

Halt: thiết lập bằng true để kết thúc huấn luyện.

learnMethod: phƣơng thức học, thiết lập bằng 1 cho trừ, hoặc giá trị khác

learnRate: tốc độ học ban đầu.

outputWeights[][]: trọng số nơron đầu ra và đầu vào.

quitError: Khi đạt đến tỷ lệ 1ỗi này thì ngừng huấn luyện.

reduction: Lƣợng giảm learnRate ở mỗi chu kỳ

retries: Tổng số chu kỳ cho phép, số chu kỳ huấn luyện cao nhất có thể

diễn ra.

train: Tập huấn luyện

Đầu tiên, cần lƣu ý rằng có một phƣơng thức dùng để sao chép ma trận trọng số. Sao chép ma trận trọng số là điều quan trọng bởi vì khi huấn luyện mạng Kohonen, ma trận trọng số mới tìm đƣợc thỏa mãn là ma trận trọng số tốt nhất,

Một phần của tài liệu Nhận dạng chữ viết tay tiếng Việt sử dụng mạng nơron (Trang 57 - 86)

Tải bản đầy đủ (PDF)

(86 trang)