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

目录
  • 一、需要识别的内容
  • 二、直接调用tesseract来完成识别(识别率很差)
  • 三、训练数据样本,提升识别率
  • 四、生成样本库字体
  • 五、通过Opencv清除图片的多余杂质(Java实现)

一、需要识别的内容

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

二、直接调用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 验证码识别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python opencv pytesseract 验证码识别的实现

    一.环境配置 需要 pillow 和 pytesseract 这两个库,pip install 安装就好了. install pillow -i http://pypi.douban.com/simple --trusted-host pypi.douban.com pip install pytesseract -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 安装好Tesseract-OCR.exe pytesse

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

    目录 一.需要识别的内容 二.直接调用tesseract来完成识别(识别率很差) 三.训练数据样本,提升识别率 四.生成样本库字体 五.通过Opencv清除图片的多余杂质(Java实现) 一.需要识别的内容 需要识别的验证码内容如下  验证码下载下载地址. 二.直接调用tesseract来完成识别(识别率很差) 识别的图片内容为: 在window系统钟打开cmd命令窗口,执行识别命令如下: tesseract.exe 01.png output.txt -l eng 识别结果为:519}   

  • Python实现基于PIL和tesseract的验证码识别功能示例

    本文实例讲述了Python实现基于PIL和tesseract的验证码识别功能.分享给大家供大家参考,具体如下: 之前搞这个搞了一段时间,后面遇到了点小麻烦,导致识别率太低了,最多也就百分之20的样子.心灰意冷,弃了一段时间.上次在论坛看到一篇大牛的关于PIL对图片各种处理各种算法的博突然又想起了这个,又随便搞了下,大大提高了识别率啊.先给代码: 原图: im = Image.open("C:\Users\Administrator\Desktop\python\\3.png") #调色

  • python验证码识别的示例代码

    写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种: 图像类 滑动类 点击类 语音类 今天先来看看图像类,这类验证码大多是数字.字母的组合,国内也有使用汉字的.在这个基础上增加噪点.干扰线.变形.重叠.不同字体颜色等方法来增加识别难度. 相应的,验证码识别大体可以分为下面几个步骤: 灰度处理 增加对比度(可选) 二值化 降噪 倾斜校正分割字符 建立训练库 识别 由于是实验性质的,文中用到的验证码均为程序生成而不是批量下载真实的网站验证码,这样做的好处就是可以有大量的知道明确结果的数据

  • Python3实现的简单验证码识别功能示例

    本文实例讲述了Python3实现的简单验证码识别功能.分享给大家供大家参考,具体如下: 这次的需求是自动登录某机构网站, 其验证码很具特色, 很适合做验证码识别入门demo, 先贴主要代码, 其中图片对比使用了编辑距离算法, 脚本使用了pillow库 from PIL import Image import requests import re splitter = re.compile(r'\d{30}') # 分割二值化后的图片 # distance('11110000', '0000000

  • python+opencv实现的简单人脸识别代码示例

    # 源码如下: #!/usr/bin/env python #coding=utf-8 import os from PIL import Image, ImageDraw import cv def detect_object(image): '''检测图片,获取人脸在图片中的坐标''' grayscale = cv.CreateImage((image.width, image.height), 8, 1) cv.CvtColor(image, grayscale, cv.CV_BGR2GR

  • Python识别验证码的实现示例

    废话不多说,直接开干! 首先安装库 pip install pytesseract pip install PILLOW 然后按照tesseract程序下载安装 tessercat下载地址:https://digi.bib.uni-mannheim.de/tesseract/ //请依据自己的操作系统下载exe文件安装 用户变量,系统变量都添加:PATH C:\Program Files (x86)\Tesseract-OCR; //这是tesseract的安装目录 系统变量添加:TESSDAT

  • Opencv 图片的OCR识别的实战示例

    一.图片变换 0.导入模块 导入相关函数,遇到报错的话,直接pip install 函数名. import numpy as np import argparse import cv2 参数初始化 ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required = True, help = "Path to the image to be scanned") arg

  • python图片验证码识别最新模块muggle_ocr的示例代码

    一.官方文档 https://pypi.org/project/muggle-ocr/ 二模块安装 pip install muggle-ocr # 因模块过新,阿里/清华等第三方源可能尚未更新镜像,因此手动指定使用境外源,为了提高依赖的安装速度,可预先自行安装依赖:tensorflow/numpy/opencv-python/pillow/pyyaml 三.使用代码 # 导入包 import muggle_ocr # 初始化:model_type 包含了 ModelType.OCR/Model

  • Python 使用Opencv实现目标检测与识别的示例代码

    在上章节讲述到图像特征检测与匹配 ,本章节是讲述目标检测与识别.后者是在前者的基础上进一步完善. 在本章中,我们使用HOG算法,HOG和SIFT.SURF同属一种类型的描述符.功能代码如下: import cv2 def is_inside(o, i): ox, oy, ow, oh = o ix, iy, iw, ih = i # 如果符合条件,返回True,否则返回False return ox > ix and oy > iy and ox + ow < ix + iw and o

随机推荐