Thuật toán học của mạng Neural Hamming, mà cụ thể đƣợc áp dụng cho bài toán này đƣợc biểu diễn nhƣ sau:
1. Chọn mẫu thứ i ( i từ 1 đến 10 và từ A đến Y).
2. Cắt ảnh mẫu thành ảnh có kích cỡ xác định (cụ thể trình bày ở phần 3.3.3.2).
3. Mẫu ở bƣớc 2 sẽ đƣợc truyền vào nhƣ tín hiệu đầu vào của mạng Neural với những điểm ảnh cụ thể. Nếu nhƣ điểm ảnh thứ k mà là màu đen (black) thì thành phần thứ k trong vecto đầu vào sẽ mang giá trị là +0,5, còn trong trƣờng hợp ngƣợc lại sẽ mang giá trị -0,5.
Hình 3.9. Hàm truyền của Neural lớp thứ 2
4. Tiếp tục bƣớc thứ 1 cho đến khi đã xem lần lƣợt tất cả các ảnh mẫu. Cụ thể thuật toán này đƣợc viết nhƣ sau :
TImage* I1=new TImage(this); // nap day cac mau chuan
I2->Width=iDestSize_Width; I2->Height=iDestSize_Hight; for(int i=0; i<M; i++)
{
I1->Picture->LoadFromFile(AnsiString(i)+".bmp"); vScale(I2,I1); //doc va dinh ti le cac mau
for(int x=0; x<iDestSize_Width ; x++) // Phân loại dây chuyền
for(int y=0; y<iDestSize_Hight ; y++) // Phân loại dây chuyền if(I2->Canvas->Pixels[x][y]==clBlack) InputRow[i].fW[x*iDestSize_Hight +y]=0.5; else InputRow[i].fW[x*iDestSize_Hight +y]=-0.5; } delete I1; delete I2; } 3.4.2.4 Nhận dạng
Quá trình nhận dạng của mạng neural đơn giản và dễ hiểu. Khi chƣơng trình chạy sẽ gọi các modun: phân tích ảnh, vector hóa... trong quá trình huấn luyện có thể đƣợc sử dụng lại trong quá trình nhận dạng. Thuật toán nhận dạng của mạng Neural Hamming đƣợc cấu thành từ 4 phần :
Truyền ảnh cần nhận dạng vào đầu vào của mạng; truyền dữ liệu từ lớp thứ 1 sang lớp thứ 2; xử lí dữ liệu ở lớp thứ 2; sau đó chọn mẫu nhận đƣợc
Thuật toán của phần 1 nhƣ sau: 1. Chọn 1 Neural nào đó
2. Gán đầu ra của Neural đó =0
3. Định vị và cắt ảnh với kích cỡ cần thiết
4. Định vị ảnh trên bƣớc 3 và chuyển hóa nó thành dạng vecto. Nếu nhƣ điểm ảnh thứ k trong cái ảnh mình đang xét mà là màu đen (black) thì giá trị đầu ra của Neural sẽ đƣợc cộng thêm trọng số của tín hiệu đầu vào từ điểm ảnh k. Trong trƣờng hợp ngƣợc lại sẽ là trừ đi trọng số của tín hiệu đầu vào.
5. Giá trị đầu ra nhận đƣợc qua hàm truyền xác định giá trị đầu ra. Code chƣơng trình thuật toán của phần 1 đƣợc xây dựng nhƣ sau :
for(int i=0; i<M; i++) {
InputRow[i].fOutput=0;
for(int x=0; x<iDestSize_Width ; x++) for(int y=0; y<iDestSize_Hight ; y++) if(Source->Canvas->Pixels[x][y]==clBlack) InputRow[i].fOutput+=InputRow[i].fW[x*iDestSize_ Hight +y]; Else InputRow[i].fOutput+=- InputRow[i].fW[x*iDestSize_Hight +y]; if(InputRow[i].fOutput>=N/2) InputRow[i].fOutput=N/2; } Hình 3.10 Sơ đồ hàm đầu ra
Tiếp theo ta cần truyền giá trị đầu ra của lớp thứ 1 vào đầu vào của lớp thứ 2 và danh sách các kết quả nhận dạng trƣớc đây. Code nhƣ sau:
float fOutputs[M];
for(int i=0; i<M; i++) {
SecondRow[i].fOutput=InputRow[i].fOutput; SecondRow[i].fSum=0;
}
Xét quá trình làm việc của Neural lớp thứ 2. Thuật toán làm việc nhƣ sau:
1. Gán số đếm của chu trình bằng 0
2. Nhớ những giá trị đầu ra của Neural vào trong danh sách những kết quả trƣớc đó
3. Chọn lại mạng theo từng Neural một
4. Neural thứ i truyền tín hiệu đầu ra của nó nhƣ là tín hiệu đầu vào thứ i của mỗi Neural
5. Mỗi Neural nhận giá trị là tổng của giá trị đầu vào nhân với giá trị trọng số e (ngoài trƣờng hợp, khi Neural nhận giá trị chính nó thì nó nhân với 1) 6. Chuyển lên bƣớc 4 cho đến khi xử lí hết Neural
7. Những tổng nhận đƣợc ở mỗi Neural đƣợc truyền ra ngoài hàm đầu ra của Neural
8. Chuyển lên bƣớc 2 cho đến khi những đầu ra của các Neural trong chu trình này không trùng với những đầu ra của chu trình trƣớc hoặc số lần chu trình đã vƣợt qua một giá trị ngƣỡng nào đó
Về mặt lý thuyết, lớp thứ 2 của mạng cần phải làm việc cho đến khi những tín hiệu đầu ra của nó ổn định, nhƣng trong thực tế thì số lần chu trình nhận dạng thƣờng đƣợc.
int iCount=0; do
{
for(int i=0; i<M; i++) {
fOutputs[i]=SecondRow[i].fOutput; SecondRow[i].fSum=0;
}
for(int i=0; i<M; i++) for(int j=0; j<M; j++) if(i==j)
SecondRow[j].fSum+=SecondRow[i].fOutput; Else
SecondRow[j].fSum+=SecondRow[i].fOutput*e; for(int i=0; i<M; i++)
SecondRow[i].fOutput=SecondRow[i].fSum; }
while(!bEqual(fOutputs) && ++iCount<25);
Phần cuối cùng, thuật toán của lớp đầu ra:
Chọn từ những Neural lớp thứ 2 kết quả giống nhau trong các mẫu nhận dạng. Trong bài toán cụ thể này, đơn giản là số thứ tự của Neural sẽ trùng với chính số thứ tự và chữ cái của mẫu nhận dạng.
float fMax=-N; int iIndex;
for(int i=0; i<M; i++)
if(SecondRow[i].fOutput>fMax) {
fMax=SecondRow[i].fOutput; iIndex=i; } vChart(C,iIndex); return iIndex; }
3.4.2.5 Giao diện chương trình
Dựa vào cơ sở lý thuyết đã đƣợc phân tích ở phần trên và sau quá trình xây dựng các thuật toán. Chƣơng trình đƣợc hoàn thành và giao diện chƣơng trình đƣợc thiết kế nhƣ sau:
Hình 3.11 Giao diện của chƣơng trình
Tiến trình hoạt động của chƣơng trinh đƣợc trình bày trên hình 3.3
3.5 Thử nghiệm chƣơng trình
Dƣới đây là quá trình nhận dạng chữ Â của font chữ Times New Roman với độ nhiễu và kích thƣớc khác nhau
Hình 3.12 Kết quả nhận dạng chữ Â với kích thƣớc là 80x50 và độ nhiễu 25%
Thử nghiệm tiếp theo cũng với chữ Â và thay đổi độ nhiễu là 35 %
Hình 3.13 Kết quả nhận dạng chữ Â với kích thƣớc là 80x50 pixel và độ nhiễu là 35%
Hình 3.14 Kết quả nhận dạng chữ Â với kích thƣớc là 60x30 pixel và độ nhiễu là 25%
Ngoài ra ta còn thử nghiệm quá trình nhận dạng với font chữ Arial
Hình 3.15 Kết quả nhận dạng chữ Â font Arial với kích thƣớc 60x30 pixel với độ nhiễu 25%
Ta thấy trong chƣơng trình có hai bảng trọng số đầu ra ảnh có tính nhiễu và ảnh không tính nhiễu. hai bảng này thể hiên các trọng số đầu ra sau khi so sánh khoảng cách Hamming của ảnh nhận dạng với mẫu chuẩn của 10 chữ số và 29 chữ cái đã dạy mẫu
Hình 3.16 Bảng kết quả trọng số đầu ra ảnh không tính nhiễu
Hình 3.17 Bảng kết quả trọng số đầu ra ảnh có tính nhiễu
Bảng 3.1: Kết quả nhận dạng các chữ cái Tiếng Việt Font Times New Roman
Font Times New Roman Các
ảnh đã nhận dạng
Kích thƣớc mẫu 80x50 Kích thƣớc mẫu 60x30 Kích thƣớc mẫu 30x20
Ghi chú Không tính nhiễu Có tính nhiễu Không tính nhiễu Có tính nhiễu Không tính nhiễu Có tính nhiễu 25 % 35% 25 % 35 % 25 % 35 % 0 0 0 0 0 0 O 0 0 O 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 A 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 Ô 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 S
Font Times New Roman Các
ảnh đã nhận dạng
Kích thƣớc mẫu 80x50 Kích thƣớc mẫu 60x30 Kích thƣớc mẫu 30x20
Ghi chú Không tính nhiễu Có tính nhiễu Không tính nhiễu Có tính nhiễu Không tính nhiễu Có tính nhiễu 25 % 35% 25 % 35 % 25 % 35 % 9 9 9 9 9 9 9 9 9 9 A A A A A A A A A Ă Ă Ă Ă Ă Ă Ă Ă Ă Ă Ă Â Â Â Â Â Â Â Â Â Â B B B B B B B B B P C C C C C C C C C C D D D D D D D D D U Đ Đ Đ Đ Đ Đ Đ Đ Đ Đ E E E E E E L E E L Ê Ê Ê Ê Ê Ê Ê Ê Ê Ê G G G G G G G G G G H H H H H H H H H H I I I I I I 1 I I 1 K K K K K K K K K K L L L L L L L L L L M M M M M M M M M V N N N N N N N N N N O O O O O O O O O O Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô Ơ Ơ Ơ Ơ Ơ Ơ Ơ Ơ Ơ Ơ P P P P P P P P P P Q Q Q Q Q Q Q Q Q O R R R R R R R R R R S S S S S S S S S S T T T T T T T T T T U U U U U U U U U L Ƣ Ƣ Ƣ Ƣ Ƣ Ƣ Ƣ Ƣ Ƣ Ƣ V V V V V V V V V V X X X X X X X X X X Y Y Y Y Y Y Y Y Y V Số kí tự lỗi 0/39 0/39 0/39 0/39 0/39 3/39 0/39 0/39 13/39 % lỗi 0 0 0 0 0 7,7 0 0 33,3
Chƣơng trình nhận dạng với font Times New Roman với nhiều kích thƣớc khác nhau nói chung đã đạt đƣợc kết quả tốt. Cụ thể chƣơng trình nhận dạng tốt tới 100% với các ảnh không tính nhiễu ở mọi kích cỡ. còn với các ảnh có tính nhiễu thì với độ nhiễu 25 % thì chƣơng trình nhận dạng cũng cho
kết quả tốt, còn với độ nhiễu 35% thì tùy từng kí tự , từng kích cỡ ảnh mà chƣơng trình có thể cho ra kết quả tốt còn lại là cho ra kết quả có độ sai lệch.
Bảng 3.2: Kết quả nhận dạng các chữ cái Tiếng Việt Font Arial
Font Arial Các ảnh
đã nhận dạng
Kích thƣớc mẫu 80x50 Kích thƣớc mẫu 60x30 Kích thƣớc mẫu 30x20
Ghi chú Không tính nhiễu Có tính nhiễu Không tính nhiễu Có tính nhiễu Không tính nhiễu Có tính nhiễu 25 % 35% 25 % 35 % 25 % 35 % 0 O O O O O O O O O 1 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2 2 2 2 2 3 3 3 2 3 3 2 3 3 2 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 0 0 6 6 6 6 6 Ô 6 7 7 7 7 7 7 7 7 7 Y 8 8 B 0 8 8 8 8 0 A 9 O 0 O O O O 9 9 O A A A A A A A A A A Ă Ă Ă Ă Ă Ă Ă Ă Ă Ă Â Â A A A A A Ă Ă A B B 3 8 O S 3 O 9 S C C C C C C G C C C D O O O O O O O Ô O Đ Đ Đ Đ Đ Đ Đ Đ Đ Â E C C C C C 5 C G S Ê Ê G Ô Ê C Ô Ô C C G Ô O C G G O G G G H S S S S S S S S S I 8 8 8 8 8 8 8 8 0 K K K K K K K K K G L L C C C U U U U O M M M M V Y V V V Y N 8 S 8 8 8 S 8 S S O O O O O O O O O Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô Ơ Ơ Ơ Ơ Ơ Ơ Ơ Ơ Ơ Ƣ P O 9 9 O O C O O 7 Q Q Q Q Q Q Q Q Q U R R R R R R R R R R S 5 3 5 3 3 3 3 3 5 T T T T T T T T T 7 U U U U U U U G G Ơ Ƣ Ƣ Ƣ Ƣ Ƣ Ƣ Ƣ Ƣ Ƣ Ƣ V V V V V V V V V V X X X X X X X X X X Y Y Y V Y Y Y Y Y Y Số kí tự lỗi 12/39 17/39 18/39 14/39 15/39 18/39 16/39 17/39 26/39 % lỗi 30,8 43,6 46,2 35,9 38,5 46,2 41 43,6 66,7
Với Font Arial chƣơng trình nhận dạng cho kết quả từ 60% - 70% ở độ nhiễu là 25% ở các kích cỡ còn ở độ nhiễu 35% ở kích cỡ 30x20 thì chƣơng trình nhận dạng cho kết quả không đƣợc tốt còn lại thì nhận dạng cho kết quả từ 40-50%.
Hình 3.18 So sánh giữa ảnh đầu vào và ảnh mẫu
Theo hình 3.18, ta có thể thấy đƣợc sự khác nhau giữa ảnh đầu vào Font Arial và Ảnh mẫu ( lấy theo Font Times New Roman). Trong ảnh font Arial, các đƣờng kẻ chữ to đều nhau, cân sang 2 bên; còn trong ảnh mẫu : giữa 2 đƣờng kẻ chéo tạo thành nên chữ, đƣờng chéo bên trái có kích thƣớc mảnh hơn so với đƣờng chéo bên phải, hơn nữa ở phía dƣới ( thƣờng có ở các chữ của Font Times New Roman) của 2 đƣờng chéo đều có đƣờng kẻ ngang – một điều khác biệt so với cách tạo thành chữ của Font Arial. Chính vì vậy, trong quá trình nhận dạng, so sánh giữa ảnh đầu vào và ảnh mẫu có sự sai lệch giữa 2 ảnh và đƣa ra kết quả có độ chính xác chƣa cao.
3.6 Nhận xét chung quá trình thử nghiệm nhận dạng chữ cái Tiếng Việt và kết luận chƣơng 3 và kết luận chƣơng 3
Kết thúc chƣơng 3 từ những định nghĩa những phân tích lý thuyết chúng ta đã xây dựng thành công chƣơng trình nhận dạng các chữ cái Tiếng Việt và dƣới đây là đánh giá sơ bộ kết quả của quá trình thử nghiệm chƣơng trình
- Chƣơng trình thực nghiệm đã đƣợc huấn luyện và nhận dạng với font Times New Roman với nhiều kích thƣớc khác nhau nói chung đã đạt đƣợc kết quả tốt, nhƣng còn một số tồn tại cần đƣợc phát triển để đạt kết quả cao hơn.
- Với font Arial ở nhiều kích thƣớc khác nhau chƣa cho đƣợc kết quả tốt, cần cải thiện để đạt kết quả chính xác hơn.
- Với đặc thù là bài toán nhận dạng Tiếng việt, nên việc nhận dạng 1 số chữ cái có dấu, mũ ở các kích thƣớc nhỏ và độ nhiễu cao cho kết quả chính xác 60-70% .
- Thử nghiệm với chữ cái thƣờng và chữ nghiêng có cùng kích thƣớc và độ nhiễu chƣơng trình cho kết quả không đƣợc tốt.
KẾT LUẬN
Trong thời gian vừa qua, nhƣ đã trình bày ở trên đây nội dung nghiên cứu đề tài của tôi bao gồm các phần chính sau:
Tìm hiểu mạng Neural nhân tạo
Tìm hiểu bài toán nhận dạng
Mô tả bài toán ứng dụng mạng Neural Hamming trong nhận dạng
Phân tích cụ thể bài toán nhận dạng
Thiết kế mạng và huấn luyện mạng Neural Hamming cho bài toán “ứng dụng mạng Neural Hamming trong nhận dạng chữ cái Tiếng việt”
Cài đặt và kiểm tra thực nghiệm bài toán này
Nhận dạng kí tự là một phần rất quan trọng của lĩnh vực nhận dạng nói riêng và xử lý ảnh nói chung. Cùng với việc sử dụng công cụ là mạng neural là một lĩnh vực còn khá mới cần đƣợc phát triển hơn.
Trong Luận văn này mới chỉ dừng ở phần thử nghiệm trên một số loại font và kích thƣớc nhất định và trong quá trình tìm hiểu và xây dựng hệ thống nhận dạng, tôi đã phát hiện ra rất nhiều phƣơng pháp nhận dạng mới không chỉ nhận dạng chữ viết bằng mạng Neural Hamming mà còn bằng nhiều mạng Neural khác nữa, chúng khai thác triệt để tính ứng dụng của mạng Neural phục vụ cho công việc nhận dạng. Dƣới đây là hƣớng phát triển tiếp theo của khóa luận này trong tƣơng lai
Nâng cao hiệu quả và độ chính xác trong việc nhận dạng chữ cái Tiếng Việt
Mở rộng thêm nhiều loại font
Mở rộng thêm nhận dạng chữ cái Tiếng Việt thƣờng
Mở rộng các cỡ chữ đặc biệt là các cỡ chữ dùng nhiều trong văn bản
Mở rộng trong việc nhận dạng các chữ viết tay; chữ cái tiếng việt; chữ ký ….
TÀI LIỆU THAM KHẢO Tiếng Việt
[1] Hoàng Kiếm, Nguyễn Hồng Sơn, Đào Minh Sơn, “Ứng dụng mạng nơron nhân tạo trong hệ thống xử lý biểu mẫu tự động”, Kỷ yếu hội nghị kỷ niệm 25 năm thành lập Viện Công nghệ Thông tin, 2001, tr. 560-567. [2] Bùi Minh Trí, “Quy hoạch toán học”, Nhà xuất bản Khoa học và kỹ
thuật, Hà nội, 2006.
[3] Lê Hoài Bắc, Lê Hoàng Thái, “Neural Network & Genetic Algorithm in Application to Handwritten Character Recognition”, Tạp chí Tin học và Điều khiển học, Tập 17, số 4, 2001, tr. 57-65.
[4] Nguyễn Thị Thanh Tân, Ngô Quốc Tạo, “Một cấu trúc mạng nơ ron thích hợp cho việc nhận dạng chữ số viết tay”, Kỷ yếu hội thảo FAIR03, NXB KH&KT Hà Nội, 2004, tr. 200-210.
[5] Nguyễn Thị Thanh Tân, Lƣơng Chi Mai, “Phƣơng pháp nhận dạng từ viết tay dựa trên mô hình mạng nơ ron kết hợp với thống kê từ vựng”, Tạp chí Tin học và Điều khiển học, Tập 22, số 2, 2006, tr. 141-154. [6]. Phạm Anh Phƣơng, Ngô Quốc Tạo, Lƣơng Chi Mai, “Ứng dụng SVM
cho bài toán phân lớp nhận dạng”, Kỷ yếu Hội thảo khoa học Quốc gia lần thứ ba về nghiên cứu, phát triển và ứng dụng Công nghệ thông tin và Truyền thông (ICT.rda’06), nhà xuất bản Khoa học và Kỹ thuật, Hà nội, trang 393-400, 20-21/05/2006.
[7]. Phạm Anh Phƣơng, Ngô Quốc Tạo, Lƣơng Chi Mai, “Trích chọn đặc trƣng wavelet Haar kết hợp với SVM cho việc nhận dạng chữ viết tay tiếng Việt”, Tạp chí Công nghệ Thông tin và Truyền thông, ISSN 0866- 7039, kỳ 3, số 20, 10-2008, tr 36-42.
[8]. Phạm Anh Phƣơng, “Áp dụng một số chiến lƣợc SVM đa lớp cho bài toán nhận dạng chữ viết tay hạn chế”, Tạp chí khoa học Đại học Huế, ISSN 1859-1388, số 45, 2008, tr. 109-118.
[9]. Nguyễn Thị Thanh Tân, Lƣơng Chi Mai, “Phƣơng pháp nhận dạng từ viết tay dựa trên mô hình mạng nơ ron kết hợp với thống kê từ vựng”, Tạp chí Tin học và Điều khiển học, Tập 22, số 2, 2006, tr. 141-154.
Tiếng Anh
[11] I. S. Oh, J. S. Lee, S. M. Choi, K. C. Hong, “Class-expert Approach to Unconstrained Handwritten Numeral Recognition”, in Proc.5th Int. Workshop Frontiers in Handwriting Recognition, pp. 95-102, Essex, England, 1996.
[12] L. F. C. Pessoa, P. Maragos, “Neural Networks with Hybrid Morphological/Rank/Linear Nodes: A Unifying Framework with Applications to Handwritten Character Recognition”, Pattern Recognition, vol.33, pp. 945-960, 2000.
[13] T. Kohonen, “Self Organizing Maps”, Springer Series in Information Sciences, vol.30, Berlin, 1995.
[14] Rabiner L.R - "A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition" - Proceedings of IEEE, VOL.77, NO.2, FEB 1989, pp. 257-286.
[15] M. Y. Chen, A. Kundu, J. Zhou, “Off-line Handwritten Word Recognition Using a Hidden Markov Model Type Stochastic Network”, IEEE Trans. Pattern Recognition and Machine Intelligence, vol.16, pp.481-496, 1994.
[16] M. Y. Chen, A. Kundu, S. N. Srihari, “Variable Duration Hidden Markov Model and Morphological Segmentation for Handwritten Word Recognition”, IEEE Trans. Image Processing, vol.4, pp.1675-1688, 1995. [17] A. Kornai, K. M. Mohiuddin, S. D. Connell, “An HMM-Based Legal Amount Field OCR System For Checks”, IEEE Trans, Systems, Man and