opencv+tesseract完成验证码识别(识别率99.99%)
一、需要识别的内容
需要识别的验证码内容如下 验证码下载下载地址。
二、直接调用tesseract来完成识别(识别率很差)
识别的图片内容为:
在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.normprotodel jtbnum.inttemp
rename inttemp jtbnum.inttempdel jtbnum.pffmtable
rename pffmtable jtbnum.pffmtabledel jtbnum.shapetable
rename shapetable jtbnum.shapetableecho 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 识别结果已经很准确率,但是验证码图片中的杂质没有清除,导致会识别出多余内容来。
五、通过Opencv清除图片的多余杂质(Java实现)
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 识别已经很精确
后期会附上各软件版本信息以及详细代码
opencv+tesseract完成验证码识别(识别率99.99%)相关推荐
- c++ 调用opencv+tesseract做图片文字识别
2020年12月28日22:08:08 环境:windows10 vscode cmake vcpkg vcpkg install opencv vcpkg install tesseract 参考手 ...
- Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38%
Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38% 仅用 Python 和命令行就可以实现人脸识别的库开源了.该库使用 dlib 顶尖的深度学习人脸识别技术构建 ...
- Python OpenCV 图片滑块验证码 滑块图片验证码 快速自动识别方案 代码简单 模板匹配识别 识别成功率达90%+
前言 通过上一篇的文章大家已经对图片滑块验证码已经有了初步的了解,图片滑块验证码的核心关键在于图片识别接下来接入讲解.因为初版滑块图片识别虽然能识别验证码,通过一些策略调整也相对提高了一些图片识别率, ...
- 离线识别率高达99%的Python人脸识别系统,开源~
来源:https://zhuanlan.zhihu.com/p/46931078 大家好,我是辰哥 以往的人脸识别主要是包括人脸图像采集.人脸识别预处理.身份确认.身份查找等技术和系统.现在人脸识别已 ...
- python人脸识别系统早已开源,离线识别率高达99%以上!
以往的人脸识别主要是包括人脸图像采集.人脸识别预处理.身份确认.身份查找等技术和系统.现在人脸识别已经慢慢延伸到了ADAS中的驾驶员检测.行人跟踪.甚至到了动态物体的跟踪. 由此可以看出,人脸识别系统 ...
- Python的开源人脸识别库:离线识别率高达99.38%【源码】
以往的人脸识别主要是包括人脸图像采集.人脸识别预处理.身份确认.身份查找等技术和系统.现在人脸识别已经慢慢延伸到了ADAS中的驾驶员检测.行人跟踪.甚至到了动态物体的跟踪.由此可以看出,人脸识别系统已 ...
- 基于Python的开源人脸识别库:离线识别率高达99.38%
基于Python的开源人脸识别库:离线识别率高达99.38% 2019年04月18日 18:13:18 AI终结者 阅读数 1233 项目地址:https://github.com/ageitgey/ ...
- python实现对简单的运算型验证码的识别【不使用OpenCV】
最近在写我们学校的教务系统的手机版,在前端用户执行绑定操作后,服务器将执行登录,但在登录过程中,教务系统中有个运算型的验证码,大致是这个样子的: 下面我们开始实现这个验证码的识别. 1.图片读取 从网 ...
- 常用验证码的识别方法
此文已由作者杨杰授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 全自动区分计算机和人类的图灵测试(Completely Automated Public Turing tes ...
最新文章
- Docker数据卷管理
- ab压力测试工具linux,【Linux】ApacheBench(ab)压力测试工具
- C# 3.0入门系列(二)
- ABAP Text表的实现原理
- java实现metro风格_Metro风格的Java组合框(JMetro)–重新介绍
- C#中几种数据库的大数据批量插入
- vue中多行文本标签_vue控制多行文字展开收起的实现示例
- Java代理模式学习
- 关于scanf 函数,你很少了解的“秘密”
- python 检查代码规范_Python代码规范检测
- Android Studio实现一个新闻APP
- Fragment-传递参数
- Python采集深圳美莱(仅思路)
- AIX添加ASM的裸盘
- ASP.NET中IsPostBack详解
- MP2669GR-锂电池充电管理芯片
- 阿里巴巴(Alibaba)笔试编程题
- 在windows系统中安装显卡驱动
- oracle中minus什么意思,Oracle Minus关键字
- IOCP的一些思考(粘包,断包的处理)
热门文章
- 华科大考研计算机系834大纲之数据结构(六)
- php控件不显示,响应式织梦后台模板辅助插件不显示插件模块不显示解决办法
- 浅识Flutter 基本组件之TextField组件 输入框decoration属性
- 微信JSAPI支付实现
- You do not have sufficient permissions to access the inventory ‘/u01/app/oraInventory‘.
- 和韩雪冬学到的网页设计点滴
- 极简使用︱Glove-python词向量训练与使用
- ola.hallengren的SQL Server维护脚本
- 机器学习常见算法思想的面试宝典
- 经济危机下我国玩具业现状与前景