Thơng qua q trình thực nghiệm với 5 bộ dữ liệu Dataset-1, Dataset-2, Dataset-3, Dataset-4, Dataset-5 bằng các phương pháp và mơ hình CNN với tham số khác nhau học viên đã đạt được các kết quả hiệu suất cụ thể với việc sử dụng mơ hình CNN kết hợp với các bước tiền xử lý để nhận dạng tự động captcha. Kết quả tốt nhất với từng bộ dữ liệu như sau:
1. Dataset-1
a. Tập huấn luyện: 9500 mẫu
b. Tập kiểm tra: 500 mẫu (Tính hiệu suất)
Bộ dữ liệu Dataset-1 là bộ dữ liệu đơn giản nhất trong 5 bộ với mơ hình CNN đơn giản và các bước tiền xử lý cục bộ tách từng ký tự. Chương trình thực nghiệm của học viên với bộ dữ liệu Dataset-1 có độ đo<theo cơng thức (3.1) đạt 100%.
2. Dataset-2
a. Tập huấn luyện: 5297 mẫu b. Tập kiểm tra: 740 mẫu
Bộ dữ liệu Dataset-2 với lượng nhiễu dày và có 2 loại nhiễu khác nhau nên q trình tiền xử lý nhiễu vẫn chưa hoàn toàn khử sạch nhiễu gây ra một số hiện tượng các số như số 6 khơng khử sạch nhiễu có thể bị nhận dạng nhầm thành 8 hoặc 5bij nhận nhầm thành 6.
Tuy nhiên mơ hình CNN kết hợp với thao tác tiền xử lý khử nhiễu đã hoạt động khá tốt cho kết quả độ đọ <theo cơng thức (3.1) với kết quả trung bình các lần
Luận văn thạc sĩ Phân loại và nhận dạng tự động các ký tự trong ảnh captcha
3. Dataset-3
a. Tập huấn luyện: 99225 mẫu b. Tập kiểm tra: 2201 mẫu
Bộ dữ liệu Dataset-3 với nền sạch nhưng bị làm nhiễu bằng một gạch ngang đậm ngẫu nhiên thường kéo dài qua cả chuỗi kí tự trong captcha làm liền mạch các kí tự gây khó khăn rất nhiều nếu sử dụng phương pháp tách chữ như bộ Dataset-1 và Dataset-2.Do đó để nhận dạng tự động bộ dữ liệu này thì tiếp cận theo phương pháp nhận dạng toàn bộ ký tự trong ảnh sẽ đem lại hiệu quả khá đáng kể so với phương pháp tách từng ký tự thông qua thực nghiệm. Kết quả độ đọ< theo cơng thức (3.1) với kết quả trung bình các lần đo là 86%.
4. Dataset-4
a. Tập huấn luyện: 9800 mẫu b. Tập kiểm tra: 200 mẫu
Bộ dữ liệu Dataset-4 là bản nâng cấp độ khó của bộ kí tự Dataset-3 với kí tự được làm đậm và dính với nhau nhiều hơn, bên cạnh đó các kí tự được làm méo và đường gạch ngang ngẫu nhiên cũng bị làm méo làm cho lượng thông tin nhiễu bên trong ảnh captcha tăng lên nhiều. Với lưỡng dữ liệu trong tập huấn luyện chỉ bằng 1/10 lượng dữ liệu trong tập huấn luyện của Dataset-3 quá trình thưc nghiệm cho độ đo < theo cơng thức (3.1) với kết quả trung bình các lần đo là 39%, thấp hơn khá nhiều so với bộ dữ liệu Dataset-3.
5. Dataset-5
a. Tập huấn luyện: 13300 mẫu b. Tập kiểm tra: 700 mẫu
Bộ dữ liệu Dataset-5 là ảnh màu đặc biệt các kí tự trong ảnh lại có độ đậm nhạt khác nhau nên bước tiền xử lý đầu tiên của thực nghiệm đưa ảnh về ảnh xám và chuyển sang ảnh nhị phân mất mát rất nhiều thơng tin thậm chí có hình ảnh bị mất thơng tin hồn tồn do ngưỡng chuyển ảnh nhị phân khơng phù hợp. Bên cạnh đó các nhiễu cũng rất phức tạp làm cho mơ hình hoạt động khơng tốt với bộ dữ liệu Dataset-5. Mặc dù bổ sung khá nhiều bước tiền xử lý giúp cho ảnh captcha về dạng dễ nhận dạng hơn nhưng kết quả cuối cùng cũng chưa tốt với độ đọ< theo công thức (3.1) với kết quả trung bình các lần đo chỉ là 1,8%.
3.3.3 Mơ tả q trình thực nghiệm
Q trình thực nghiệm trên một số mơ hình và phương pháp nhằm chọn ra phương pháp nhận dạng tối ưu nhất đối với từng bộ dữ liệu và tập trung xây dựng và cải thiện theo phương án đó. Do đó trong phần này sẽ mơ tả cụ thể các bước nhận dạng tối ưu với từng bộ dữ liệu.
1. Các bước thực nghiệm trên bộ dữ liệu Dataset-1
Do bộ dữ liệu captcha Dataset-1 khá đơn giản với ít nhiễu nên cách tiếp cận hợp lý nhất là thực hiện tách từng kí tự trong hình ảnh sau đó nhận dạng từng kí tự một và trả ra kết quả captcha. Quá trình thực hiện theo các bước như sau:
Đầu tiên sau khi đọc xong hình ảnh cần chuyển ảnh sang ảnh nhị phân đen trắng bằng phương pháp OTSU và giãn nở ảnh để dễ dàng nhận dạng được các vùng liên thơng như hình 3.8:
Hình 3.8: Giãn nở ký tự trong captcha để dễ phát hiện vùng liên thơng
Tiếp đó tìm các thành phần liên thông chứa các điểm điểm ảnh cùng màu trong hình 3.9 và tách ra thành các ảnh riêng biệt để lưu lại làm dữ liệu huấn luyện.
Hình 3.9: Phát hiện thành phần liên thơng
Lúc này sẽ có một số trường hợp xảy ra do một số captcha bị làm nhiễu bằng cách có 2 kí tự xếp dính vào nhau ví dụ như mẫu captcha hình 3.10.
Luận văn thạc sĩ Phân loại và nhận dạng tự động các ký tự trong ảnh captcha
Hình 3.10: Một mẫu captcha có 2 ký tự dính liền nhau
Khi xử lý cắt vùng liên thơng sẽ có kết quả nhận ln cả vùng có 2 ký tự như hình 3.11 :
Hình 3.11: Vùng nhận dạng liên tục nhận 2 ký tự vào 1 ảnh cắt, chưa tốt
Để xử lý vấn đề này có thể khắc phục được bằng cách sau, do khi 2 kí tự bị liền nhau thì khi nhận khung,chiều dài chắc chắn sẽ tăng lớn hơn chiều cao khung cắt khi đó ta chỉ cần đặt mức điều kiện nếu chiều dài lớn hơn "1.25× chiều cao" thì thưc hiện chia đơi khung thành 2 khung mới để tách kí tự. Khi đó ta sẽ có được kết quả nhận đủ 4 khung ký tự trong ảnh như hình 3.12 .
Hình 3.12: Kết quả sau khi dùng thủ thuật cắt đôi vùng nhận các ký tự liền nhau
Sau khi đã tách được từng ký tự ra khỏi ảnh, các dữ liệu đó sẽ được đưa vào mơ hình CNN đươc xây dựng bằng thư viện Tensorflow và chạy nền dưới Keras để huấn luyện và kiểm tra. Kết quả thu được rất tốt với hiệu suất nhận dạng đúng toàn bộ các captcha ngẫu nhiên trong tập kiểm tra .
2. Các bước thực nghiệm trên bộ dữ liệu Dataset-2
Do bộ dữ liệu Dataset-2 có cấu trúc gồm 2 loại dữ liệu khác nhau như hình 3.13. Nên bước đầu tiên, cần tìm cách để phân loại được 2 loại dữ liệu này để có phương án tiền xử lý hợp lý với mỗi loại.
Trong bước này, bằng cách dựa trên biểu đồ hình ảnh. Hình ảnh làm nhiễu bằng điểm chấm chứa rất nhiều điểm màu đen thuần túy (giá trị 0) trong đó, vì vậy cần tìm giá trị ngưỡng cho số điểm ảnh đen sẽ có hiệu quả phân loại. Ta sẽ phân loại được ảnh nhiễu chấm là loại 1, ảnh nhiễu gạch là loại 2.
Hình 3.13: 2 kiểu dữ liệu trong bộ dữ liệu Dataset-2
Sau khi phân loại được dữ liệu cần thực hiện tách từng kí tự trong captcha ra để nhận dạng bằng mơ hình CNN.
Đầu tiên sau khi phân loại dữ liệu trong bộ dữ liệu Dataset-2 cần phải khử nhiễu đối với từng loại captcha. Các bộ lọc khác nhau hoạt động tốt hơn trên các loại ảnh khác nhau. Sau khi thử nghiệm các bộ lọc khác nhau với 2 loại dữ liệu captcha phương án hợp lý nhất là sử dụng bộ lọc trung vị cho dữ liệu loại 1 và bộ lọc Gaussian cho dữ liệu loại 2. Cả 2 bộ lọc này sẽ làm mịn ảnh để thực hiện bước tiền xử lý tiếp theo. Kết quả thu được như hình 3.14:
Hình 3.14: Kết quả lọc ảnh với 2 loại dữ liệu 1 và 2
Tiếp theo thực hiện tách nhiễu khỏi nền bằng ngưỡng nhi phân OTSU. Qua quá trình thử nghiệm cho thấy hiệu quả với ngưỡng cho dữ liệu loại l là 170 và cho loại 2 là155. sau khi tách ngưỡng ta có kết quả như hình 3.15.
Hình 3.15: Kết quả tách ngưỡng nhị phân với 2 loại dữ liệu 1 và 2
Kết quả sau khi tách ngưỡng nhị phân trên hình 3.15 với dữ liệu loại 2 rất tốt tuy nhiên với dữ liệu loại 1 vẫn cịn một số nhiễu nhỏ khơng khử được hoàn tồn nên để xử lý phần nhiễu này có thể dùng cách đêm số thành phần liên thông để lọc bỏ. Trong thực nghiệm với 8 liên kết là hợp lý để tìm và loại bỏ các nhiễu.
Luận văn thạc sĩ Phân loại và nhận dạng tự động các ký tự trong ảnh captcha
Hình 3.16: Kết quả lọc thành phần kết nối với 2 loại dữ liệu 1 và 2
Đây là thời điểm thích hợp để tách từng ký tự ra khỏi ảnh. Qua kiểm tra tập dữ liệu có thể thấy thấy bên trái của các chữ số trong ảnh đa số bắt đầu từ điểm ảnh thứ 30, vì vậy cạnh trái được cắt dọc ở điểm ảnh thứ 30. Ranh giới bên phải là điểm ảnh trắng ngoài cùng bên phải trong nền. Để đảm bảo không cắt nhầm biên phải tại những điểm nhiễu nếu cịn sót thì chiều dài vùng cắt phải thỏa mãn điều kiện độ dài khung cắt phải nhở hơn 125 điểm ảnh. Ranh giới trên và dưới sẽ được tìm theo cách tương tự.
Kết quả thực hiện tách ký tự khỏi nền như sau.
Hình 3.17: Kết quả tách ký tự với 2 loại dữ liệu 1 và 2
Kết quả trên hình 3.17 có thể chia thành 6 phần có độ dài bằng nhau tương tự như cách chia ở hình 3.12 ở bộ dữ liệu Dataset-1 để có được các chữ số riêng biệt. Nhưng qua thực nghiệm cho thấy thay vì chia cho sáu ngay lập tức như hình 3.18(a) , đầu tiên chia hình ảnh thành một nửa lấy phần nguyên chiều dài khung cắt và sau đó tiếp tục chia 3 lấy giá trị nguyên cho kết quả cắt tốt hơn ít bị lệch sang ký tự khác như hình 3.18(b).
Tuy nhiên sau khi tách như trên kết quả tách thu được khá tốt nhưng vẫn tồn tại một số trường hợp bị cắt lẹm vào ký tự khác. Để giải quyết vấn đề này có thể xử lý như sau : ví dụ cụ thể với một mẫu tách chưa tốt như hình 3.19 dưới đây.
Vấn đề được xử lý theo ý tưởng dịch chuyển lại các phần chữ số bị cắt lẹm sang trái. Để làm điều đó, trước tiên cần xác định các quy tắc cho việc dịch chuyển những phần bị cắt lệch bằng các điều kiện sau đây.
1. Xem xét nếu có nhiều hơn một thành phần được liên thơng trên mỗi ảnh kí tự cắt ra. Điều này có thể đúng do cắt lệch làm dịch chuyển hoặc có thể có khoảng cách giữa các phần chữ số đơn. Vì vậy, chỉ bằng điều này chưa thể kết luận là có
Hình 3.18: Minh họa quy trình tách từng ký tự
Hình 3.19: Một mẫu tách chưa tốt
phần ký tự bị cắt lệch.
2. Phần bị cắt lệch cần phải ln ln dính vào cạnh bên trái của hình ảnh chữ số sau cắt.
3. Phần dịch chuyển phải có kích thước khơng vượt q 35 % của hình ảnh. Nếu các điều kiện thỏa mãn thì thao tác dịch chuyển phần bị cắt lệch sang trái được áp dụng. Sau khi xử lý với hình 3.19 ta có được kết quả như hình 3.20.
Hình 3.20: Kết quả xử lý ảnh bị cắt lệch
Với các ảnh từng ký tự riêng biết được tách tốt và dễ nhận dạng bài toán trở lại thành nhận dạng ký tự giống như với bộ dữ liệu Dataset-1. Bây giờ chỉ cần một mơ hình CNN với 2 lớp tích chập đơn giản là có thể có được kết quả nhận dạng rất tốt với từng ký tự. Bộ tham số mơ hình CNN phù hợp nhất với bộ dữ liệu này trong Mục 3.2 được xây dụng bằng thư viện PyTourch trong thực nghiệm để huấn luyện và kiểm tra cho ra kết quả khá tốt trong bảng 3.2.
3. Các bước thực nghiệm trên bộ dữ liệu Dataset-3, Dataset-4
Luận văn thạc sĩ Phân loại và nhận dạng tự động các ký tự trong ảnh captcha
tự nhau nhưng thay đổi định dạng kí tự captcha, độ dính ký tự và tăng độ khó so với 2 bộ dữ liệu Dataset-1 và Dataset-2. Quá trình thực nghiệm với bộ dữ liệu Dataset-3 và Dataset-4 như sau:
Hình 3.21: Mẫu dữ liệu minh họa Dataset-3 và Dataset-4
Với 2 mẫu dữ liệu này bước đầu tiên có thể nhận thấy phần chứa ký tự captcha yếu nằm ở một nửa bên trái của ảnh, do đó có thể thực hiện cắt ảnh để cắt bớt phần gạch thừa ra giúp giảm bớt khá nhiều nhiễu khi nhận dạng toàn bộ bằng CNN. Sau khi cắt ảnh bước tiền xử lý tốt nhất phù hợp với 2 loại captcha này là thực hiện phép co nội dung ảnh để giảm bớt nhiễu của ảnh càng nhiều càng tốt và giữ lại những nội dung chính thể hiện ký tự captcha. Các kỹ thuật tiền xử lý khác nhằm loại bỏ nét gạch nhưng có thể ảnh hưởng tới cấu trúc ký tự làm cho hiệu suất nhận dạng giảm xuống đáng kể nên không được sử dụng với 2 bộ dữ liệu này.
Kết quả sau khi tiền xử lý hình 3.21 sẽ được kết quả là hình 3.22.
Hình 3.22: Kết quả tiền xử lý mẫu dữ liệu Dataset-3 và Dataset-4
Sau khi tiền xử lý ta đã có được một ảnh captcha đã được loại bỏ khá nhiều chi tiết thừa để đưa vào mơ hình huấn luyện và kiểm tra với kết quả thực nghiệm trong bảng 3.3.
4. Các bước thực nghiệm trên bộ dữ liệu Dataset-5
Bộ dữ liệu Datase-5 là một bộ dữ liệu với lượng nhiễu lớn được tổng hợp và bổ sung từ các bộ captcha trước đó. Nên để có thể nhận dạng tự động được bộ dữ liệu này phải thực hiện các bước tiền xử lý kỹ nhằm loại bỏ nhiễu trong captcha nhưng không làm mất quá nhiều chi tiết cuả ký tự. Quy trình thực nghiệm với bộ dữ liệu được mô tả với 2 mẫu captcha trong bộ dữ liệu ở hình 3.23.
Hình 3.23: 2 mẫu captcha minh họa quy trình thực nghiệm
Đầu tiên cần chuyển ảnh màu sang ảnh xám như hình 3.24 do mẫu captcha này là ảnh màu nếu để nguyên ảnh màu thì đặc trưng sẽ thêm 3 chiều nữa sẽ nhân 3 độ khó khi nhận dạng bằng CNN.
Hình 3.24: Captcha được chuyển sang ảnh xám
Sau khi có ảnh xám, áp dụng bộ lọc Gauss để làm mờ nội dung trên captcha để những nhiễu trên đó được làm mờ và giảm mức xám. Hỗ trợ cho quá trình lọc ngưỡng xám ở bước sau. Sau khi áp dụng bộ lọc Gauss có được kết quả như hình 3.25 với 2 captcha mẫu.
Hình 3.25: Captcha được chuyển sang ảnh xám
Khi captcha đã được làm mờ bằng bộ lọc Gauss theo lý thuyết ở mục 2.1. Để hỗ trợ q trình lọc thành phần liên thơng ở bước này cần tạo thêm 2 ảnh phụ với một ảnh tạo từ bộ lọc trung vị một ảnh được tạo bởi bộ lọc ngưỡng xám theo phương pháp OTSU. Sau đó tìm thành phần liên thông tương tự phương thức lọc thành phần liên thơng với bộ dữ liệu Dataset-2 ở hình 3.16 để tìm ra thấy các thành phần liên thơng đủ khả năng là ký tự captcha cần giữ lại và loại bỏ những thành phần nhiễu không đủ số liên kết. Với bộ dữ liệu này sử dụng ngưỡng 20 liên kết để lọc các nhiễu. Sau khi tìm và loại bỏ những thành phần nhiễu, ảnh sẽ giữ lại được các thành phần chứa ký tự captcha như hình 3.26
Hình 3.26: Captcha sau bước xử lý cuối cùng