一、需要识别的内容

需要识别的验证码内容如下  验证码下载下载地址。

二、直接调用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%)相关推荐

  1. c++ 调用opencv+tesseract做图片文字识别

    2020年12月28日22:08:08 环境:windows10 vscode cmake vcpkg vcpkg install opencv vcpkg install tesseract 参考手 ...

  2. Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38%

    Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38% 仅用 Python 和命令行就可以实现人脸识别的库开源了.该库使用 dlib 顶尖的深度学习人脸识别技术构建 ...

  3. Python OpenCV 图片滑块验证码 滑块图片验证码 快速自动识别方案 代码简单 模板匹配识别 识别成功率达90%+

    前言 通过上一篇的文章大家已经对图片滑块验证码已经有了初步的了解,图片滑块验证码的核心关键在于图片识别接下来接入讲解.因为初版滑块图片识别虽然能识别验证码,通过一些策略调整也相对提高了一些图片识别率, ...

  4. 离线识别率高达99%的Python人脸识别系统,开源~

    来源:https://zhuanlan.zhihu.com/p/46931078 大家好,我是辰哥 以往的人脸识别主要是包括人脸图像采集.人脸识别预处理.身份确认.身份查找等技术和系统.现在人脸识别已 ...

  5. python人脸识别系统早已开源,离线识别率高达99%以上!

    以往的人脸识别主要是包括人脸图像采集.人脸识别预处理.身份确认.身份查找等技术和系统.现在人脸识别已经慢慢延伸到了ADAS中的驾驶员检测.行人跟踪.甚至到了动态物体的跟踪. 由此可以看出,人脸识别系统 ...

  6. Python的开源人脸识别库:离线识别率高达99.38%【源码】

    以往的人脸识别主要是包括人脸图像采集.人脸识别预处理.身份确认.身份查找等技术和系统.现在人脸识别已经慢慢延伸到了ADAS中的驾驶员检测.行人跟踪.甚至到了动态物体的跟踪.由此可以看出,人脸识别系统已 ...

  7. 基于Python的开源人脸识别库:离线识别率高达99.38%

    基于Python的开源人脸识别库:离线识别率高达99.38% 2019年04月18日 18:13:18 AI终结者 阅读数 1233 项目地址:https://github.com/ageitgey/ ...

  8. python实现对简单的运算型验证码的识别【不使用OpenCV】

    最近在写我们学校的教务系统的手机版,在前端用户执行绑定操作后,服务器将执行登录,但在登录过程中,教务系统中有个运算型的验证码,大致是这个样子的: 下面我们开始实现这个验证码的识别. 1.图片读取 从网 ...

  9. 常用验证码的识别方法

    此文已由作者杨杰授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 全自动区分计算机和人类的图灵测试(Completely Automated Public Turing tes ...

最新文章

  1. Docker数据卷管理
  2. ab压力测试工具linux,【Linux】ApacheBench(ab)压力测试工具
  3. C# 3.0入门系列(二)
  4. ABAP Text表的实现原理
  5. java实现metro风格_Metro风格的Java组合框(JMetro)–重新介绍
  6. C#中几种数据库的大数据批量插入
  7. vue中多行文本标签_vue控制多行文字展开收起的实现示例
  8. Java代理模式学习
  9. 关于scanf 函数,你很少了解的“秘密”
  10. python 检查代码规范_Python代码规范检测
  11. Android Studio实现一个新闻APP
  12. Fragment-传递参数
  13. Python采集深圳美莱(仅思路)
  14. AIX添加ASM的裸盘
  15. ASP.NET中IsPostBack详解
  16. MP2669GR-锂电池充电管理芯片
  17. 阿里巴巴(Alibaba)笔试编程题
  18. 在windows系统中安装显卡驱动
  19. oracle中minus什么意思,Oracle Minus关键字
  20. IOCP的一些思考(粘包,断包的处理)

热门文章

  1. 华科大考研计算机系834大纲之数据结构(六)
  2. php控件不显示,响应式织梦后台模板辅助插件不显示插件模块不显示解决办法
  3. 浅识Flutter 基本组件之TextField组件 输入框decoration属性
  4. 微信JSAPI支付实现
  5. You do not have sufficient permissions to access the inventory ‘/u01/app/oraInventory‘.
  6. 和韩雪冬学到的网页设计点滴
  7. 极简使用︱Glove-python词向量训练与使用
  8. ola.hallengren的SQL Server维护脚本
  9. 机器学习常见算法思想的面试宝典
  10. 经济危机下我国玩具业现状与前景