Tiểu luận Ứng dụng mạng Neural trong nhận dạng ký tự quang học - Lương Vũ Trúc
I.Giới Thiệu
Mạng neural nhân tạo (Artificial Neural Networks : ANN) ra đời xuất phát từ ý tưởng mô phỏng hoạt động của bộ não con người.
Mạng noron nhân tạo là sự tái tạo bằng kỹ thuật những chức năng của hệ thần kinh con người với vô số các neural được liên kết truyền thông với nhau qua mạng.Giống như con người , ANN được học bởi kinh nghiệm, lưu những kinh nghiệm đó và sử dụng trong những tình huống phù hợp.
Mạng neural trong một vài năm trở lại đây đã được nhiều người quan tâm và đã áp dụng thành công trong nhiều lĩnh vực khác nhau, như tài chính, y tế, địa chất và vật lý. Thật vậy, bất cứ ở đâu có vấn đề về dự báo, phân loại và điều khiển, mạng neural đều có thể ứng dụng được. Ví dụ như khả năng nhận dạng mặt người trong các hệ thống quản lý thông tin liên quan đến con người (quản lý nhân sự ở các công sở, doanh nghiệp; quản lý học sinh, sinh viên trong các trường trung học, đại học và cao đẳng; ); các ngành khoa học hình sự, tội phạm; khoa học tướng số, tử vi,
Kết hợp chặt chẽ với logic mờ, mạng neural nhân tạo đã tạo nên cuộc cách mạng thực sự trong việc thông minh hóa và vạn năng hóa các bộ điều khiển kỹ thuật cao cho cả hiện nay và trong tương lai. Ví dụ như ứng dụng tự động điều khiển hệ thống lái tàu, hệ thống dự báo sự cố,
Mạng neural dựa trên việc mô phỏng cấp thấp hệ thống neural sinh học. Trong tương lai với sự phát triển mô phỏng neural sinh học, chúng ta có thể có loại máy tính thông minh thật sự.
Trong phạm vi đề cập những gì liên quan đến kiến thức cơ sở để làm đồ án, chúng em chỉ xin trình bày những vấn đề có liên quan, những kiến thức được sử dụng phục vụ cho việc hoàn thành đồ án.
òng mà không tìm thấy ký tự pixel đen nào thì ghi nhận y-1 là giới hạn dưới của dòng (bottom_line).Dừng duyệt.Tăng số dòng lên (lines++). +Nếu chưa tìm thấy bottom_line, tiếp tục duyệt đến dòng tiếp theo (tăng y, reset x=0). c.Bắt đầu từ giới hạn dưới y (bottom_line) vừa tìm thấy sau cùng,lặp lại các bước a,b để xác định các giới hạn của các dòng tiếp theo , cho đến khi duyệt hết chiều cao của ảnh thì dừng, quá trình xác định dòng ký tự hoàn tất. Ảnh đầu vào Quá trình tách dòng Giới hạn trên Giới hạn dưới 1.2.Tách từng kí tự Thuật toán : Xét lần lượt từng dòng 1.-Bắt đầu xét từ giá trị giới hạn trên y của dòng (top_line) và giá trị x đầu tiên (x=0) 2.Xác định giới hạn trên của ký tự : Quét hết chiều rộng của ảnh, trên cùng giá trị y. + Nếu phát hiện pixel đen thì đánh dấu y là giá trị đỉnh của ký tự (top_character).Dừng quét. +Nếu quét hết chiều rộng, mà vẫn không tìm thấy pixel đen nào thì tăng y và reset lại x, tiếp tục thực hiện lại bước 2. 3. Xác định giới hạn dưới của ký tự :Bắt đầu duyệt từ giới hạn trên (đỉnh ) vừa tìm thấy của ký tự (0,top_character) + Tương tự như xác định giới hạn trên , ta duyệt hết chiều rộng của ảnh trên cùng một giá trị y. +Nếu duyệt hết dòng mà không tìm thấy ký tự pixel đen nào thì ghi nhận y-1 là giới hạn dưới của ký tự (bottom_character).Dừng duyệt. +Nếu chưa tìm thấy bottom_character, tiếp tục duyệt đến dòng tiếp theo (tăng y, reset x=0). 4.Xác định giới hạn trái của ký tự (xác định giá trị của x ) -Bắt đầu từ giới hạn trên (đỉnh của ký tự - top_character), giá trị x đầu tiên (x=0) . -Quét đến giới hạn dưới của dòng (bottom_character), giữ nguyên x (quét theo chiều thẳng đứng ) +Nếu gặp pixel đen đầu tiên, ghi nhận x là giới hạn trái của kí tự (left-character).Dừng quét. +Nếu quét đến cuối giới hạn dưới, vẫn không tìm thấy pixel đen nào, thì reset lại y = giới hạn trên vừa tìm thấy, tăng x lên.(x++),và tiếp tục thực hiện lại bước 4. 5.Xác định giới hạn phải của ký tự (xác định giá trị x ) -Bắt đầu từ giới hạn trên -đỉnh của ký tự (top_character), giới hạn trái của ký tự (left_character,top_character) .Quét theo chiều thẳng đứng đến giới hạn dưới của dòng. +Nếu khi quét hết chiều đứng ,mà vẫn không gặp được pixel đen nào thì ghi nhận x-1 là giới hạn phải của ký tự (right_character).Dừng quét. +Nếu gặp pixel đen thì tăng x (x++) và reset lại y =top_character của ký tự đang xét ,để xét đường thẳng đứng tiếp theo. 6. Lặp lại bước 1 đến 5 để xác định giới hạn của ký tự tiếp theo trên cùng dòng.Với y=top_line của dòng đang xét và giá trị x đầu tiên = right_character của ký tự vừa tìm thấy. Sau khi tách ký tự 1.3.Xác Định Giới Hạn Chính Xác Cho Từng Ký Tự Trong một số trường hợp, việc tách ký tự chưa thực sự chính xác (giống như ví dụ trên ).Ta cần xác định lại một lần nữa giới hạn chính xác cho từng ký tự. Thuật toán : Xét từng ký tự : 1.Xác định đỉnh ký tự -Bắt đầu từ đỉnh của ký tự tạm thời,và giới hạn trái của ký tự vừa xác định ở trên( left_character,top_character).Quét đến giới hạn phải của ký tự, giữ nguyên y. +Nếu tìm thấy pixel đen thì chọn lại y là giới hạn đỉnh của ký tự (top_character=y).Dừng quét. +Nếu không , xét điểm tiếp theo. +Nếu không tìm thấy pixel đen nào thì tăng y (y++) , reset lại x .(x= left_character).Thực hiện lại bước 1. 2.Xác định giới hạn dưới của ký tự. - Bắt đầu từ giới hạn dưới hiện thời của ký tự (được xác định ở trên –phần 1.2 ), và giới hạn trái của ký tự (left_character, bottom_character).Quét x đến giới hạn phải của ký tự, trên cùng giá trị y . + Nếu tìm thấy pixel đen ,đánh dấu y là giới hạn dưới của ký tự ( bottom_character= y).Ngừng quét. +Nếu không tìm thấy pixel đen nào, thì reset lại x (= left character ), giảm y (y--).Thực hiện lại bước 2. Xác định giới hạn Giới hạn trên Giới hạn dưới 1.4.Ánh Xạ Ký Tự Ảnh Vào Ma Trận Giá Trị Sau khi tách, ký tự ảnh sẽ được ánh xạ vào ma trận 2 chiều, có kích thước 15 x 10. Vì các ký tự ảnh dù đã chuẩn hóa, chọn lọc nhưng sau khi tách đều có kích thước khá lớn so với ma trận ( khoảng 58x 74), nên các ký tự ảnh này đều phải qua 1 bước chuyển đổi tỉ lệ trước khi chuyển giá trị vào ma trận nhị phân 15 x10. Lưu ý : Việc chuyển đổi tỉ lệ này là một trong những nguyên nhân gây ra sai số dẫn đến nhận dạng ký tự bị sai. Thuật toán : ánh xạ ký tự ảnh vào ma trận pixel ảnh. a.Xét chiều rộng -Ánh xạ điểm đầu và điểm cuối của ký tự ảnh tương ứng với giá trị đầu và cuối của ma trận . -Khởi tạo với 10 phần tử tương ứng. -Ánh xạ tọa độ điểm đầu (0,y) và điểm cuối (width,y) của ảnh kí tự tương ứng với giá trị đầu (0,y) và giá trị cuối (10,y) của ma trận. -Chia nhỏ chiều rộng thành 10 mốc giá trị, ánh xạ vào chiều rộng của ma trận pixel. Ví dụ : xMT[ 0]=0; xMT[5]=width/2. xMT[10]=width. xMT[2]=xMT[5]/2. ..... b.Đối với chiều cao: Khởi tạo với 15 phần tử tương ứng. Ánh xạ điểm đầu (x,0) và điểm cuối (x,height) của ảnh kí tự tương ứng với giá trị đầu (x,0) và giá trị cuối (x,15) của ma trận. Chia nhỏ chiều cao thành 15 mốc giá trị, ánh xạ tương ứng vào chiều cao của ma trận pixel. Vd: yMT[ 0]=0; yMT[5]=height /3. xMT[10]=height x 2/3. xMT[15]=height. ... -Lấy các giá trị pixel trong file ảnh tuyến tính hóa vào trong ma trận pixel bằng cách kết hợp tọa độ chiều cao và chiều rộng. Vd:MT[i,j]=img[xMT[i],yMT[j] ] Hình : Ánh xạ lưới ký tự. c.Chuyển ma trận lưới pixel thành ma trận giá trị -Bắt đầu từ tọa độ (0,0) của ma trận pixel.Giữ y , duyệt qua x: Nếu pixel đen thì ghi nhận giá trị 1 vào ma trận giá trị có tọa độ tương ứng. Nếu pixel trắng thì ghi nhận giá trị 0 vào ma trận giá trị có tọa độ tương ứng. Nếu x= chiều rộng thì reset lại x=0 , tăng y (y++). Từ ma trận ảnh này ta ánh xạ thành mảng 1 chiều 150 cột 1 dòng, và chuyển thành 150 noron đầu vào. 2.Huấn Luyện Mạng Thuật toán : 1.Xây dựng cấu trúc mạng với mô hình 3 lớp . 2.Khởi tạo các giá trị ngẫu nhiên cho trọng số trong khoảng [-độ lệch,độ lệch ] 3.Nạp file ảnh đầu vào và file huấn luyện (file text đầu ra mong muốn ). 4.Phân tích ảnh và ánh xạ thành 150 noron đầu vào. 5.Đọc các kí tự đầu ra mong muốn, chuyển thành giá trị nhị phân Unicode và lưu trữ lại. 6.Với mỗi kí tự ảnh : +Tính giá trị đầu ra trong mạng FeedForward. +So sánh với ký tự tương ứng ở đầu ra mong muốn và tính toán lỗi. +Lan truyền ngược lỗi và điều chỉnh lại giá trị của trọng số . 7.Chuyển đến xét ký tự ảnh tiếp theo thực hiện lại bước 6 , cho đến khi duyệt hết các ký tự ảnh. 8.Tính giá trị lỗi trung bình cho tất cả các ký tự ảnh. 9. Lặp lại bước 6 đến bước 8 cho đến khi chạy đủ số vòng dạy +Nếu lỗi trung bình đạt thấp hơn giá trị ngưỡng của lỗi thì dừng . +Nếu không thì tiếp tục. BẮT ĐẦU Xây dựng mạng Khởi tạo trọng số Nạp file huấn luyện Phân tích ảnh Phát hiện kí tự tiếp theo Các kí tự sẵn sàng ? Các kí tự sẵn sàng ? Đọc đầu ra mong muốn Tính đầu ra của mạng Tính lỗi Các kí tự sẵn sàng ? Lỗi <Ngưỡng ? Số lần lặp =max epochs ? Tính trung bình lỗi Vector đầu vào tiếp theo KẾT THÚC Đ S 3.Nhận Dạng Ký Tự Quang Học Thuật toán : -Nạp file ảnh đầu vào -Phân tích ảnh thành từng ký tự ảnh. -Đưa ma trận giá trị cho đầu vào mạng feed-forward , tính toán giá trị đầu ra dựa trên các trọng số đã được lưu sẵn khi tiến hành huấn luyện mạng. Đ S Đ S BẮT ĐẦU Tính toán đầu ra Dòng đầu tiên Ánh xạ kí tự tới vector Phân tích dòng ảnh Chuyển từ Unicode sang kí tự Hết kí tự trên dòng ? Hết Các dòng ? Dòng tiếp theo Kí tự tiếp theo KẾT THÚC -Chuyển mã nhị phân Unicode thành ký tự tương ứng. Chương 3 :Giao Diện Chính Chương Trình Chú Thích 1.Load Networks : load các trọng số đã được huấn luyện lên để phục vụ cho việc nhận dạng kí tự. 2.Save Networks : save network đã được huấn luyện lại sử dụng cho những lần đọc dữ liệu sau. 3.Load Training Set : load tập dữ liệu mẫu muốn huấn luyện lên.Tập dữ liệu mẫu này gồm 2 file cùng tên khác định dạng (*.ts) và (*.nn). 4.Close : Đóng chương trình. 5.Load Image : đưa ảnh đầu vào vào để phân tích. 6.Detect Character : Duyệt từng kí tự một. 7.Duyệt qua tất cả các kí tự. 8.Trainning : trainning mạng,dùng khi muốn load trainning set vào để dạy cho mạng. 9.Số vòng dạy : tùy vào độ phức tạp của font chữ, và sai số có thể điều chỉnh số vòng dạy phù hợp. 10.Khung hiện ảnh đưa vào. 11. Ma trận 20 x30 thể hiện ảnh pixel các kí tự sau khi ánh xạ. 12.Khung hiện nội dung chữ sau khi nhận dạng. Hướng dẫn : Để nhận dạng kí tự bạn có thể load mạng đã được huấn luyện sẵn lên (load network) , rồi chọn ảnh muốn nhận dạng (load image ) và tiến hành nhận dạng ảnh (detect character hoặc detect all). Hoặc load tập dữ liệu mẫu vào , tiến hành trainning , rồi mới tiến hành load ảnh muốn nhận dạng kí tự. Tổng Kết Sai Số Trong Nhận Dạng Ký Tự Việc nhận dạng ký tự đôi khi bị sai hoặc thiếu chính xác , là do nhiều vấn đề liên quan như : sự phức tạp của dữ liệu đầu vào, các giá trị chọn lựa như độ lệch, lỗi ngưỡng, số neuron mỗi lớp,. chưa được chọn lựa chính xác. Sai số trong nhận dạng kí tự lớn hay nhỏ là phụ thuộc vào nhiều yếu tố : độ chuẩn của ảnh đưa vào, size font chữ , độ phức tạp của font chữ. Việc chọn mô hình mạng phù hợp, giá trị ngưỡng lỗi, độ lệch , tốc độ học.. đều ảnh hưởng đến tính chính xác trong nhận dạng kí tự Những hạn chế + Chương trình chỉ ở mức nhận dạng chữ không dấu , tính chính xác vẫn chưa hoàn toàn tuyệt đối. +Với những kiểu chữ sát nhau, việc phân tích giới hạn ký tự chưa chính xác, dẫn đến đọc ký tự sai. Vd : Do kiến thức còn hạn hẹp, thời gian làm báo cáo cũng không nhiều, nên phần báo cáo của chúng em chắc chắn còn rất nhiều sai sót .Mong thầy thông cảm và bỏ qua cho chúng em.Chúng em xin cảm ơn Nhóm thực hiện : nhóm 12.Gồm các thành viên : Lâm Tú Bình -07520427 Lương Vũ Trúc -07520376 Huỳnh Thị Phương Oanh -07520263 Nguyễn Chí Thanh -07520312 TÀI LIỆU THAM KHẢO [1.] Các bài giảng về neural networks trên web. [2.] [3.] Tạp chí khoa học và công nghệ,Đại học Đà Nẵng – Số 4(27).2008 [4.] An Introduction to Neural Networks.pdf [5.] http:/ /codeproject.com [6.]Và một số nguồn trên
File đính kèm:
- tieu_luan_ung_dung_mang_neural_trong_nhan_dang_ky_tu_quang_h.docx