基于Opencv如何实现验证码识别,要点有哪些
Admin 2022-08-06 群英技术资讯 1566 次浏览
这篇文章主要介绍“基于Opencv如何实现验证码识别,要点有哪些”,有一些人在基于Opencv如何实现验证码识别,要点有哪些的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有帮助,有这个方面学习需要的朋友就继续往下看吧。需要识别的验证码内容如下 验证码下载下载地址。

识别的图片内容为:
在window系统钟打开cmd命令窗口,执行识别命令如下:
tesseract.exe 01.png output.txt -l eng
识别结果为:519} 该识别准确率远远达不到预期
1、下载10份样本(样本数量越多,识别率越高),然后通过jTessBoxEditor来进行样本数据矫正(该步骤耗时较长)。

2、打开 jTessBoxEditor,将所有的样本数据生成一个总的tif文件(tif就是所有图片的集合)。操作如下:
1)jTessBoxEditor->Tools->Merge TIFF

2 )全选所有的样本文件,之后生成的tif命名为 jtbnum.font.exp0.tif


3)进行数据识别调整,如下图:


将所有的样本识别内容都调整正确后(调整的参数保存在jtbnum.font.exp0.box文件钟),我们需要将我们生成的样本文件封装成我们的 jtbnum.traineddata 字体库,生成方式如下:
1)创建 font_properties 文件,内容为 font 0 0 0 0 0
2)在同级目录创建 run.bat 文件 内容如下
rem 执行改批处理前先要目录下创建font_properties文件 echo Run Tesseract for Training.. tesseract.exe jtbnum.font.exp0.tif jtbnum.font.exp0 nobatch box.train echo Compute the Character Set.. unicharset_extractor.exe jtbnum.font.exp0.box mftraining -F font_properties -U unicharset -O jtbnum.unicharset jtbnum.font.exp0.tr echo Clustering.. cntraining.exe jtbnum.font.exp0.tr echo Rename Files.. del jtbnum.normproto rename normproto jtbnum.normproto del jtbnum.inttemp rename inttemp jtbnum.inttemp del jtbnum.pffmtable rename pffmtable jtbnum.pffmtable del jtbnum.shapetable rename shapetable jtbnum.shapetable echo Create Tessdata.. combine_tessdata.exe jtbnum. pause
3)双击执行 run.bat 文件,系统执行完成后,将会生成 jtbnum.traineddata 文件。
4)将 jtbnum.traineddata 拷贝到tesseract安装目录下的tessdata文件夹下。
5)测试识别率:
识别的图片内容为:
tesseract.exe 01.png output.txt -l jtbnum
识别结果为:51915 识别结果已经很准确率,但是验证码图片中的杂质没有清除,导致会识别出多余内容来。
if(!hasLoad){
System.load(opencvPath+"/build/java/x64/opencv_java440.dll");
hasLoad = true;
}
byte [] bytes = Base64Utils.decodeFromString(base64);
String path = savePath+"/"+System.currentTimeMillis()+".png";
try {
OutputStream outputStream = new FileOutputStream(new File(path));
outputStream.write(bytes);
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
Mat image0 = Imgcodecs.imread(path);
Mat image1 = new Mat();
//灰度处理
Imgproc.cvtColor(image0, image1, Imgproc.COLOR_BGR2GRAY);
Imgproc.adaptiveThreshold(image1,image1,255,Imgproc.ADAPTIVE_THRESH_MEAN_C,Imgproc.THRESH_BINARY,11, 2);
Core.bitwise_not(image1,image1);
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(2, 2), new Point(-1, -1));
Mat temp = new Mat();
Imgproc.erode(image1, temp, kernel);
Imgproc.dilate(temp, temp, kernel);
String newPath = path.substring(0,path.lastIndexOf(".")) +"_1.png";
Imgcodecs.imwrite(newPath,temp);
图片处理结果如下(杂质已经清除):

5)测试识别率:
识别的图片内容为:
tesseract.exe 01.png output.txt -l jtbnum
识别结果为:5191 识别已经很精确
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
如何用python实现自动翻译工具?很多朋友应该都有遇到过,在查找资料的时候,一些资料都是有大量英文的,那么这对于英文不是很好地朋友来说,阅读就比较困难,因此自动翻译攻击就显得很重要,对这这篇文章就给大家来分析Python 实现自动化翻译和替换的脚本,感兴趣的朋友就接着看吧。
这篇文章主要介绍了解决安装pytorch因网速问题失败的情况,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
这篇文章主要介绍了教你怎么用Python实现多路径迷宫,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
这篇文章主要介绍了python如何使用contextvars模块源码分析,contextvars是Python3.7后的官方库,功能就是可以为多线程以及asyncio生态添加上下文功能,即使程序在多个协程并发运行的情况下,也能调用到程序的上下文变量, 从而使我们的逻辑解耦
这篇文章主要介绍了Python标准库time使用方式详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008