使用Tesseract-OCR 做验证码识别浅析
使用工具jTessBoxEditor-0.7(这个是在java平台下开发的,所以 它只支持java平台 ,在使用前应该先配置好java环境) tesseract
程序集(因为该程序集是在.net 2.0平台下 开发的,所以 只能支持到2.0 在使用时请注意(也可以自己去网上找别人用更高的版本编译好的)) tesseract-ocr-setup-3.01-1 使用开发语言.net 辅助工具 Visual Studio 至少能支持.net 2.0即可
首先,我们要找到自己需要做验证识别的验证码图片(因为只有图片才需要做些操作识别!!!!)或是别的需要识别的图片, 因为在要它能识别之前 我们需要做一个用于识别时用的资料库(后面叫训练集),所以 我们要收集大量的图片(尺寸大小 尽量一致,有共同的特征才方便处理) 然后找出,图片 中除了要用的内容之外 的一些共同特征 因为后面我们要把它干掉!
准备好图片之后 , 我们 打开vs 来对这些图片做初步去噪处理(除我们需要的内容外的东西都认为是噪点),我以
这种类型的验证码为例,先创建一个应用 窗体或都可以,因为这里只是对图片做一个初步的处理,我们先使用
得到这个数组后,我们再使用循环遍历来处理,我们得到ma之后 再对它来做处理 首先我们如果放大的话可以看到这个图片 边上的都是白色的,而中间组成文字的是黑色, 这是我们需要的, 而其它的杂色 就有好几种 为了偷下懒呢,我就先只去这三种主要的好了,这里之所以标出了RGB值 是因为我们要用这些值来比较 颜色 再做替换的,这个我是用一个小工具来做的
另外我们一般是对一个新的图来作操作而 不是改原图 所以 我们做以下操作 因为上面三个去不尽所以 我又多找了几个,并把边上的也干成白色了 代码如下,这里是写的一个单独的方法
private static Bitmap cor(Bitmap ma)
{
Bitmap bi = new Bitmap(ma.Width,ma.Height);
for (int i = ; i < ma.Width; i++)
{
for (int j = ; j < ma.Height; j++)
{
if (i==||j==||i==ma.Width-||j==ma.Height-)
{
bi.SetPixel(i,j,Color.White);
continue;
}
Color cl = ma.GetPixel(i,j);
if (cl.Equals(Color.FromArgb(, , )) ||
cl.Equals(Color.FromArgb(, , )) ||
cl.Equals(Color.FromArgb(, , )) ||
cl.Equals(Color.FromArgb(, , ))||
cl.Equals(Color.FromArgb(, , ))||
cl.Equals(Color.FromArgb(, , )))
{
bi.SetPixel(i, j, Color.White);
}
else
{
bi.SetPixel(i,j,cl);
}
} }
return bi;
}
String [] files = Directory.GetFiles(@"E:\img\yb","*.gif");
for (int i = ; i < files.Length; i++)
{
Bitmap bi = Image.FromFile(files[i]) as Bitmap;
cor(bi).Save(@"E:\img\OK\" + i + ".tiff", ImageFormat.Tiff);
}
MessageBox.Show("OK");
//通过这个去掉用图片处理的方法
之后我们把新的图片保存在一个文件夹里,处理完好我们第一步的工作 就做好了
那么我们开始第二步, (先确保已经搞定了java的运行环境)打开jTessBoxEditor-0.7这个工具jTessBoxEditor.jar这个文件! 然后选择我画起来那里
然后出现这个界面打开刚刚生成的图的文件夹,把图片全选打开,然后再保存到一个文件夹里去, (可以是同一个),然后就会生成一个包含了所有图片的tiff文件
我这里是做了100个样品图来做 训练集的,然后我们再打这个文件导入到该软件中做校验(都要检验完哦!!!,如果没校验后面会出错的.出现找不到tr文件 的错 的时候你就回来看看),当我们做到这里的时候 就完成一半了接下来需要先安装好tesseract-ocr-setup-3.01-1然后 打开命令行也就是cmd

OpenFileDialog fi = new OpenFileDialog();
if (fi.ShowDialog()==DialogResult.OK)
{
Bitmap bi = cor((Bitmap) Image.FromFile(fi.FileName));
TesseractProcessor p = new TesseractProcessor();
p.SetPageSegMode(ePageSegMode.PSM_SINGLE_LINE);
p.Init(@"E:\img\OK\","n",(int)eOcrEngineMode.OEM_DEFAULT);
String s= p.Recognize(bi);
MessageBox.Show(s);
}
上面是做识别块的代码Tesseractpocessor这是前面说要用到的那个程序集的在使用使要先导入,..
欢迎 大家能共同 探讨 交流 QQ 315695792
使用Tesseract-OCR 做验证码识别浅析的更多相关文章
- ubuntu 安装(install) pwntcha[一个做"验证码识别"的开源程序]
一.安装 1. sudo apt-get install libsdl1.2-dev libsdl1.2debian sudo apt-get install libsdl1.2-dev(比较大,10 ...
- Mac python Tesseract 验证码识别
Tesseract 简介 Tesseract(/'tesərækt/) 这个词的意思是"超立方体",指的是几何学里的四维标准方体,又称"正八胞体".不过这里要讲 ...
- 利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别
--------------------------------------------------低调的分割线-------------------------------------------- ...
- Pyhthon爬虫其之验证码识别
背景 现在的登录系统几乎都是带验证手段的,至于验证的手段也是五花八门,当然用的最多的还是验证码.不过纯粹验证码识已经是很落后的东西了,现在比较多见的是滑动验证,滑动拼图验证(这个还能往里面加广告).点 ...
- python3.7验证码识别MuggleOCR,为什么总是报错
先来看看MuggleOCR简介(白嫖)这是一个为麻瓜设计的本地OCR模块只需要简单几步操作即可拥有两大通用识别模块,让你在工作中畅通无阻. 这套模型是基于 https://github.com/ker ...
- 零OCR基础6行代码实现C#验证码识别
这两天因为工作需要,要到某个网站采集信息,一是要模拟登陆,二是要破解验证码,本想用第三方付费打码,但是想想网上免费的代码也挺多的,于是乎准备从网上撸点代码下来,谁知道,撸了好多个都不行,本人以前也没接 ...
- ocr智能图文识别 tess4j 图文,验证码识别 分享及所遇到的问题
自己对tess4j的使用总结 1,tess4j 封装了 tesseract-ocr 的操作 可以用很简洁的几行代码就实现原本tesseract-ocr 复杂的实现逻辑 如果你也想了解tesseract ...
- ocr智能图文识别 tess4j 图文,验证码识别
最近写爬虫采集数据,遇到网站登录需要验证码校验,想了想有两种解决办法 1,利用htmlunit,将验证码输入到swing中,并弹出一个输入框,手动输入验证码,这种实现方式,如果网站需要登录一次可以使用 ...
- 开源图片文字识别引擎——Tesseract OCR
Tessseract为一款开源.免费的OCR引擎,能够支持中文十分难得.虽然其识别效果不是很理想,但是对于要求不高的中小型项目来说,已经足够用了. 文字识别可应用于许多领域,如阅读.翻译.文献资料的检 ...
随机推荐
- 乘法口诀表(C语言实现)
输出乘法口诀表,关键在于利用好循环语句,而且是二层循环.
- JS代码实现复制功能
本人没什么基础看了好久百度,不知道为什么在百度上问一个js实现copy功能会多出那么多代码出来,感觉废话一堆效果还没能达到需要复制 的效果. 然而在我看来,js复制代码 无非就那么几句罢了.原生cop ...
- WinForm控件之【Button】
基本介绍 普通按钮大部分情况下用作页面对某系列操作后的提交确认,应用较为广泛,在winfrom控件当中使用设置都相对的简单. 常设置属性.事件 Image:控件上显示的图片: Enabled :指示 ...
- .net持续集成cake篇之使用vs或者vscode来辅助开发cake脚本
使用Visual Studio来开发工具 前面我们都是通过手写或者复制的方法来编写Cake文件,Cake使用的是C#语言,如果仅使用简单的文本编辑器来编写显然效率是非常低下的,本节我们讲解如何使用ca ...
- 个人永久性免费-Excel催化剂功能第92波-地理地址与经纬度互转功能
GPS设备和手机LBS的兴起,在地理信息存储过程中,在程序.应用级别是需要用经纬度去定位,而在数据分析的级别,特别是省市区镇街的分析,用到的是人可识别的文本类型存储,从设备中采集下来的数据和人工维护的 ...
- Android调用系统分享功能总结
Android分享-调用系统自带的分享功能 实现分享功能的几个办法 1.调用系统的分享功能 2.通过第三方SDK,如ShareSDK,友盟等 3.自行使用各自平台的SDK,比如QQ,微信,微博各自的S ...
- Android拨打电话权限总结
android在6.0和6.0以上拨打电话的权限声明 /** * 打电话 * * @param phoneNumber */ protected void startCallPhone(String ...
- Java_转换流和缓冲流
今日内容介绍 转换流 缓冲流 1 转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamR ...
- java相关的一些资源
http://www.cnblogs.com/best/p/5876559.html#_label1
- 【iOS】更换证书遇到的问题
今天给一个项目换证书的时候遇到了这个问题: Code Sign error: Provisioning profile does not match bundle identifier: The pr ...