CHƯƠNG 4: MÔ PHỎNG ĐÁNH GIÁ KẾT QUẢ
4.1.1. Xây dựng chương trình
4.1.1.1. Xây dựng chương trình tiền xử lý, phân tách, chuẩn hóa ảnh
Chương trình được xây dựng tuần tự theo các bước: đọc ảnh, chuyển ảnh sang màu xám, làm mờ, lọc ảnh sau khi làm mờ, nhị phân hóa, lọc ảnh sau khi nhị phân hóa, phân tách ký tự, chuẩn hóa ảnh, trung tâm hóa.
Chuyển đổi từ ảnh màu sang ảnh
xám
Làm mờ bằng thuật toán Gaussian Blur
Lọc sau khi làm mờ bằng hàm opening
Chuyển đổi sang ảnh nhị phân bằng
thuật toán Otsu
Lọc sau khi nhị phân hóa bằng hàm
closing
Tìm viền bằng hàm findContours
Loại bỏ các thành phần không mong muốn và cắt thành ảnh
nhỏ theo các viền tìm được Chuẩn hóa ảnh về
kích thước 20x20 Tìm trọng tâm và đặt
ảnh vào trung tâm ảnh bao 28x28
Hình 4-1: Quy trình xử lý và chuẩn hóa ảnh
Chương trình được viết bằng ngôn ngữ C++ sử dụng thư viện mã nguồn mở Opencv 2.4.10.
Đọc ảnh và chuyển ảnh sang màu xám.
60 Ảnh gốc được chụp từ camera điện thoại Galaxy Note 5 sẽ được đọc vào chương trình. Chuyển ảnh sang màu xám giúp giảm số kênh của ảnh từ ba kênh xuống một kênh.
Làm mờ ảnh bằng phương thức Gaussian
Bước này giúp ảnh trở nên mượt hơn, sự chênh lệch màu sắc giữa hai bên một cạnh sẽ giảm đi. Tôi sử dụng hạt nhân kích thước 3x3 mục đích làm mờ vừa phải.
Lọc ảnh bằng hàm opening sau khi làm mờ
Bước này nhằm loại bỏ các thành phần nhiễu bên ngoài đối tượng.
Nhị phân ảnh
Nhị phân ảnh giúp làm nổi bật đối tượng trong ảnh. Ảnh trở thành ảnh đen trắng.
61
Lọc sau khi nhị phân hóa
Việc lọc này làm đầy lỗ trống bên trên đối tượng, làm cho các đường nét chữ đầy đặn hơn.
Phân tách ký tự
Việc tiếp theo trong quá trình xử lý ảnh là phân tách từ ngữ thành các ký tự riêng rẽ. Chúng ta sẽ tìm đường viền của các chữ cái, sau đó cắt ảnh theo các đường viền này tạo ra các ảnh con chỉ chứa một chữ cái. Việc xử lý trước đó không thể tránh khỏi sai xót khi vẫn còn xót lại các đối tượng không mong muốn. Do đó qua thực nghiệm, tôi đặt ra các ngưỡng về diện tích, chiều dài, chiều rộng của khung viền để loại bỏ chúng.
Chuẩn hóa và trung tâm hóa ảnh
Lưu ảnh
62 Ảnh cuối cùng được lưu lại phục vụ cho việc làm mẫu dạy hoặc kiểm tra mạng nơ-ron.
4.1.1.2. Xây dựng chương trình nhận dạng
Các ảnh chưa một ký tự sau khi thu được sẽ được chuyển sang dạng excel .csv phục vụ việc đọc nhiều ảnh cùng một lúc và việc đánh nhãn cho đầu vào khi dạy mạng nơ-ron.
Chương trình nhận dạng được xây dựng bằng ngôn ngữ python, đây là một ngôn ngữ mạnh trong xây dựng mạng nơ-ron.
Hàm khởi tạo mạng
Khởi tạo số lượng lớp, số lượng nơ-ron tại mỗi lớp, các mảng trọng số và bias cho mỗi nơ-ron.
Hàm tính đầu ra
Hàm tính đầu ra sử dụng các mảng trọng số và bias hiện tại, tính toán đầu ra của mạng cho mỗi đầu vào.
Hàm dạy
63 Hàm dạy chính là hàm thể hiện phương pháp stochastic gradient descent.
Mỗi một epoch, mạng sẽ được đánh giá một lần để kiểm chứng mức độ học của mạng bằng sử dụng dữ liệu kiểm tra.
Hàm cập nhật trọng số và bias
Sau mỗi lần thay đổi gradient của hàm chi phí, chúng ta lặp lại việc thay đổi trọng số và bias để tìm điểm cực tiểu của hàm chi phí.
Hàm tính gradient của hàm chi phí
Sử dụng thuật toán lan truyền ngược là cách nhanh chóng để tính toán gradient của hàm chi phí trên mỗi mẫu đầu vào của một lô đầu vào.
64
Hàm đánh giá kết quả
Kết quả thu được là một vector có 26 phần tử, hàm đánh giá kết quả sẽ kiểm tra vị trí nào trong vector này có giá trị là 1 để phản ánh chữ cái nhận diện được.
Qua đó kết quả sẽ được hiển thị lên màn hình cho biết số lượng chữ cái được nhận diện đúng.
Hàm sigmoid
Hàm sigmoid sử dụng để tính toán đầu ra của mỗi nơ-ron trong mạng.