opencv+tesseract实现验证码识别的示例

 更新时间:2022年06月28日 10:48:27   作者:peng_wei_kang  
本文主要介绍了opencv+tesseract实现验证码识别的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、需要识别的内容

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

二、直接调用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.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       识别结果已经很准确率,但是验证码图片中的杂质没有清除,导致会识别出多余内容来。

五、通过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实现验证码识别的示例的文章就介绍到这了,更多相关opencv tesseract 验证码识别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python通过urllib2爬网页上种子下载示例

    python通过urllib2爬网页上种子下载示例

    这篇文章主要介绍了通过urllib2、re模块抓种子下载的示例,需要的朋友可以参考下
    2014-02-02
  • Python绘图系统之自定义一个坐标设置控件

    Python绘图系统之自定义一个坐标设置控件

    这篇文章主要为大家详细介绍了Python如何编写一个绘图系统,可以实现自定义一个坐标设置控件,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-08-08
  • python 实现求解字符串集的最长公共前缀方法

    python 实现求解字符串集的最长公共前缀方法

    今天小编就为大家分享一篇python 实现求解字符串集的最长公共前缀方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python+seaborn实现联合分布图的绘制

    Python+seaborn实现联合分布图的绘制

    联合分布(Joint Distribution)图是一种查看两个或两个以上变量之间两两相互关系的可视化图,在数据分析操作中经常需要用到。本文将通过seaborn实现绘制联合分布图,需要的可以参考一下
    2023-02-02
  • python logging模块的使用详解

    python logging模块的使用详解

    这篇文章主要介绍了python logging模块的使用,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-10-10
  • 详解Python中用于计算指数的exp()方法

    详解Python中用于计算指数的exp()方法

    这篇文章主要介绍了详解Python中用于计算指数的exp()方法,是Python入门中必会的基本方法,需要的朋友可以参考下
    2015-05-05
  • Python找出列表中出现次数最多的元素三种方式

    Python找出列表中出现次数最多的元素三种方式

    本文通过三种方式给大家介绍Python找出列表中出现次数最多的元素,每种方式通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下
    2020-02-02
  • Pycharm操作Git及GitHub的步骤详解

    Pycharm操作Git及GitHub的步骤详解

    这篇文章主要介绍了Pycharm操作Git及GitHub的步骤详解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Python中创建数值列表的4种方法总结

    Python中创建数值列表的4种方法总结

    在Python中列表(List)是一种有序、可变的数据类型,被广泛用于存储和处理多个元素,这篇文章主要给大家介绍了关于Python中创建数值列表的4种方法,需要的朋友可以参考下
    2024-05-05
  • 利用python代码管理Word文档属性信息

    利用python代码管理Word文档属性信息

    在Word文档管理中,文档属性包含与文档有关的关键信息,如标题、作者、创建日期等,是进行文档管理的重要工具,本文将展示如何利用Python代码来灵活操控Word文档的属性信息,从而满足个性化与批量化文档处理的需求,需要的朋友可以参考下
    2024-05-05

最新评论