本项目基于MATLAB完成数字验证码识别的GUI设计,图像处理,验证码生成、识别等功能。采用BP神经网络来实现对验证码图像的识别。验证码的识别,大概分为图片预处理、分割字符、识别字符三个过程,其中分割字符最为困难。本文采用基于遗传算法和最大熵优化的图像分割技术、大津法(OTSU)、自定义阈值三种技术进行字符分割,并作进一步分析。利用英国萨里大学提供的印刷体数字数据集,共10160张图片,90%的数据用于训练BP神经网络,剩余10%的数据用于测试,最终识别准确率达到93.47%,利用训练所得BP模型完成识别字符,最终验证码图像识别效果较佳。
-
项目内img目录下为0-9十类数字图片各1016张,code_source为验证码生成所用0-9十类数字图片各10张,code_img为生成的验证码图片,md_img存放README.md所用的图片。项目内"*.m"皆为MATLAB源代码文件,"*.mat"为已处理好的数据文件。
-
程序内所有路径为必填项,若没有路径单击对于按钮将弹出警告框;
-
程序内BPNN的参数都有默认取值,若不填写则按默认取值,如图,鼠标悬停输入框内,出现提示信息。
同样的,验证码个数及灰度值都有默认取值。但是要注意,训练样本占比为必填项,没有默认取值。
-
若项目路径下已有数据集文件,包括训练集、测试集数据,如“X_train.mat”时,不需要重新创建数据集再分割,单击载入已有数据按钮,设定参数即可继续。
-
程序做了一定的异常处理,错误操作均会弹出提示信息(输入数据并没有作校验~~)。
-
由于图片数据大,创建分割训练集、测试集耗时很长~~~~
-
打开MATLAB,运行“appgui.m”文件,即出现程序的主界面。
-
第一模块“BPNN模型构建”中,在创建数据集中输入数据路径,注意填入绝对路径,且最后必须有'\',单击确定,弹出窗口,实时显示当前处理的图片。当创建数据集完成后,弹出提示框提示创建成功。将在项目路径下生成文件“inputs.mat”、“outputs.mat”。
-
第一模块“BPNN模型构建”中,在分割数据集中输入训练样本占比(小数形式),单击确定,等待分割完成。将在项目路径下生成文件“X_train.mat”、“y_train.mat”、“X_test.mat”、“y_test.mat”。
-
第一模块“BPNN模型构建”中,在参数设定及网络训练中输入各个参数的值,单击训练,神经网络训练完成后,将在项目路径下生成文件“bp.mat”。
-
第一模块“BPNN模型构建”中,单击测试,不可编辑的文本框内将产生测试结果。
-
若对测试结果不满意,可返回步骤4,重新设定参数,重新训练网络。
-
第二模块“生成验证码”中,输入字符数据路径,单击生成数据集,稍等片刻,将在项目路径下生成文件“codeInputs.mat”、“codeOutputs.mat”。
-
第二模块“生成验证码”中,输入验证码存储路径,输入验证码个数,单击生成验证码,等待弹出提示框。即可在存储路径下生成指定个数的验证码图片。
-
第二模块“识别验证码”中,单击选择验证码按钮,选择一张验证码图片。单击识别按钮即可完成验证码识别。
-
当验证码识别效果不佳时,可采用其他二值化方法,在二值化区域右侧的弹出式菜单可以选择二值化方法,若改用自定义level,默认取值0.9。再次点击识别即可重新识别验证码。
-
若默认灰度level二值化效果同样不佳,此时可以修改灰度level取值。重新点击识别即可。
由于验证码种类繁多,目前的验证码识别应用往往只能识别一类验证码,不具有普遍性。本文所完成的验证码识别仅仅针对非粘连的数字验证码,应用领域受限。毫无疑问,粘连验证码的字符分割与识别将更为困难,本项目尚未涉及该部分内容,这也是目前存在的不足之处。