python opencv 验证码识别,opencv tesseract
本文主要介绍了中文版宇宙魔方实现验证码识别的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
目录
一、需要识别的内容二、直接调用超正方体来完成识别(识别率很差)三、训练数据样本,提升识别率四、生成样本库字体五、通过中文版清除图片的多余杂质(Java实现)
一、需要识别的内容
需要识别的验证码内容如下验证码下载下载地址。
二、直接调用tesseract来完成识别(识别率很差)
识别的图片内容为:
在窗户系统钟打开煤矿管理局命令窗口,执行识别命令如下:
tesseract.exe01.png输出
识别结果为:519}该识别准确率远远达不到预期
三、训练数据样本,提升识别率
1、下载10份样本(样本数量越多,识别率越高),然后通过jTessBoxEditor来进行样本数据矫正(该步骤耗时较长)。
2、打开jTessBoxEditor,将所有的样本数据生成一个总的标签图像文件格式。文件(tif就是所有图片的集合)。操作如下:
1)jTessBoxEditor-工具-合并争执
2)全选所有的样本文件,之后生成的标签图像文件格式。命名为jtbnum.font.exp0.tif
3)进行数据识别调整,如下图:
四、生成样本库字体
将所有的样本识别内容都调整正确后(调整的参数保存在jtbnum.font.exp0.box文件钟),我们需要将我们生成的样本文件封装成我们的 jtbnum.traineddata 字体库,生成方式如下:
1)创建font_properties文件,内容为font 0 0 0 0 0
2)在同级目录创建run.bat 文件内容如下
雷姆执行改批处理前先要目录下创建字体属性文件
训练用回声运行宇宙魔方.
tesseract.exe jtb编号。字体。exp0。TIF jtb编号。字体。exp0无批次箱。火车
回声计算字符集.
unicharset _ extractor。exe jtb编号。字体。exp0。包厢
MF training-F font _ properties-U unicharset-O jtb num。unicharset jtb编号。字体。实验0。tr
回声聚类.
cntraining.exe jtb编号。字体。exp0。tr
回显重命名文件.
del jtbnum.normproto
重命名normproto jtbnum.normproto
del jtbnum.inttemp
重命名inttemp jtbnum.inttemp
del jtbnum.pffmtable
重命名pffmtable jtbnum.pffmtable
del jtbnum.shapetable
重命名shapetable jtbnum.shapetable
回声创建Tessdata.
combine_tessdata.exe jtbnum .
中止
3)双击执行run.bat 文件,系统执行完成后,将会生成jtbnum.traineddata 文件。
4)将jtbnum.traineddata 拷贝到超正方体安装目录下的tessdata文件夹下。
5)测试识别率:
识别的图片内容为:
tesseract.exe01.png输出。txt -l jtbnum
识别结果为:51915识别结果已经很准确率,但是验证码图片中的杂质没有清除,导致会识别出多余内容来。
五、通过Opencv清除图片的多余杂质(Java实现)
如果(!hasLoad){
系统。load(opencv path /build/Java/x64/opencv _ Java 440。dll’);
hasLoad=true
}
byte[]bytes=base 64 utils。decodefromstring(base64);
string path=保存路径“/”系统。当前时间毫秒() .png ;
尝试{
输出流输出流=新文件输出流(新文件(路径));
输出流.写(字节);
outputStream.flush().
输出流。close();
} catch(异常e) {
e。printstacktrace();
}
mat image 0=img编解码器。im read(路径);
Mat image1=new Mat();
//灰度处理
Imgproc.cvtColor(image0,image1,Imgproc .COLOR _ bgr 2灰色);
Imgproc。自适应阈值(图像1,图像1,255,Imgproc .自适应阈值均值C,Imgproc .THRESH_BINARY,11,2);
Core.bitwise_not(image1,image1);
mat kernel=Imgproc。getstructuringelement(Imgproc .RECT墨菲,新大小(2,2),新点(-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输出. txt -l jtbnum
识别结果是:5191,识别已经很精确.
关于opencv tesseract验证码识别的例子,本文到此结束。关于opencv tesseract验证码识别的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门的IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。