使用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值
是因为我们要用这些值来比较 颜色 再做替换的,这个我是用一个小工具来做的

另外我们一般是对一个新的图来作操作而 不是改原图 所以 我们做以下操作 因为上面三个去不尽所以 我又多找了几个,并把边上的也干成白色了
代码如下,这里是写的一个单独的方法


 1    private static Bitmap cor(Bitmap ma)
2 {
3 Bitmap bi = new Bitmap(ma.Width,ma.Height);
4 for (int i = 0; i < ma.Width; i++)
5 {
6 for (int j = 0; j < ma.Height; j++)
7 {
8 if (i==0||j==0||i==ma.Width-1||j==ma.Height-1)
9 {
10 bi.SetPixel(i,j,Color.White);
11 continue;
12 }
13 Color cl = ma.GetPixel(i,j);
14 if (cl.Equals(Color.FromArgb(204, 204, 51)) ||
15 cl.Equals(Color.FromArgb(153, 204, 51)) ||
16 cl.Equals(Color.FromArgb(204, 255, 102)) ||
17 cl.Equals(Color.FromArgb(204, 204, 204))||
18 cl.Equals(Color.FromArgb(204, 255, 51))||
19 cl.Equals(Color.FromArgb(102, 102, 51)))
20 {
21 bi.SetPixel(i, j, Color.White);
22 }
23 else
24 {
25 bi.SetPixel(i,j,cl);
26 }
27 }
28
29 }
30 return bi;
31 }


   String [] files = Directory.GetFiles(@"E:\img\yb","*.gif");
for (int i = 0; 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

–tesseract.exe XX(刚刚合并的tif文件名)  YY(新生成文件名)batch.nochop
makebox  // 下面的XX YY无论大写小的,都是和这里的一样,这里是YY那么下面也是YY要注意我做的时候用的YES

–xxYY 这两个文件名要保持一致 此两处前后有空格注意这两文件要同名并在同一文件夹下

?然后打开jTessBoxEditor软件 打开刚刚编辑好的tif文件,开始校正刚刚识别的box文件校正完后,保存再回到命令行执行

–tesseract.exe xx.tif yy nobatch box.train  如无报错继续执行

–unicharset_extractor.exe yy.box

–然后在同目录下新建一个名字为font_properties的文件(文本文件不保留后缀) 然后在里面输入

–n 0 0 0 0 0

–命令行执行cntraining.exe yy.tr

–mftraining.exe -F font_properties -U unicharset YY.tr

为了时间我就只上一个图,因为我这不知道什么情况 上图特慢

当上面的都执行完后 如果没有报错 那么在?把该目录下的unicharset, inttemp ,normproto,
pfftable  这四个文件加上 训练名前缀(就是你刚刚写的YY的那个)

?命令执行 combine_tessdata 训练名.      
生成的训练名.traineddata就可以用来进行识别了


            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 做验证码识别浅析,布布扣,bubuko.com

时间: 2024-12-20 01:06:12

使用Tesseract-OCR 做验证码识别浅析的相关文章

ubuntu 安装(install) pwntcha[一个做&quot;验证码识别&quot;的开源程序]

一.安装 1. sudo apt-get install libsdl1.2-dev libsdl1.2debian sudo apt-get install libsdl1.2-dev(比较大,10M左右) sudo apt-get install libsdl-image1.2-dev sudo apt-get install libsdl-mixer1.2-dev sudo apt-get install libsdl-ttf2.0-dev sudo apt-get install lib

基于Tesseract OCR的文字识别Android应用开发资料整理

前言 一.Tesseract OCR引擎 Tesseract OCR是HP公司于1985~1995年间开发的商业级OCR(Optical Character Reader, 光学字符阅读器)引擎,并于2005年开放源代码.以下是它sourceforge上的网址: http://sourceforge.net/projects/tesseract-ocr/?source=directory 现在已转移到谷歌的代码服务下: https://code.google.com/p/tesseract-oc

利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别

利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别 分类: 开放项目2012-07-23 17:28 6712人阅读 评论(0) 收藏 举报 tiffimagecompression引擎pascalcharacter --------------------------------------------------低调的分割线--------------------------------------------------- Linux下有两个重要的编程准则

[blog]验证码识别--资料收集

证码识别--资料收集 一.验证码基础知识 验证码设计的目的就是区分“人”和“机器”,所以它在被设计的时候,主要的目的就是防止被采用就是自动识别出来.所以作为破解者来说,一开始就是处于劣势地位的.当然这使得验证码的破解变成了一项结合图像识别.模式识别的猜谜解题活动. 验证码的识别很难达到100%.因为在现实生活中,人也可能是识别错误的,所以当错误发生的时候,验证码识别系统会再提供一个新的验证码.如果单次识别有50%的识别成功率(也就是50%的失败率),那么连续三次的总体成功率就可以达到0.875(

C#.NET验证码智能识别学习笔记---01C#.NET验证码识别介绍

技术qq交流群:JavaDream:251572072 教程下载,在线交流:it.yunsit.cn 1.大家知道用asp.net做网站的话,验证码是存在于服务器端的session中的,服务器是知道 验证码的值真正是多少的.服务器可以识别人输入的到底对不对,因为服务器知道真正的 答案,因为验证码程序一般很难识别,所以服务器就可以一定程度上确认对方是人在操作 2.验证码就是为了区别到底是人在操作,还是机器在操作 ----------------------------------------- 3

深度学习下的验证码识别教程

转:https://bbs.125.la/thread-14031313-1-1.html 随着大数据时代,人工智能时代的到来,深度学习的应用越来越广,场景识别.目标检测.人脸识别.图像识别等等广泛应用.在人工智能方面.深度学习框架主要运用于python,c++等资源.而易语言使用深度学习框架的资料,源码缺十分稀少.于是我决定给大家录制一套易语言深度学习的教程. 本套教程基于我自己开发的CC框架,下面这些图片案例,就是深度学习做的效果,非常棒: <ignore_js_op> 人脸识别.场景分割

Python3简单验证码识别

这次的需求是自动登录某机构网站, 其验证码很具特色, 很适合做验证码识别入门demo, 先贴主要代码, 其中图片对比使用了编辑距离算法, 脚本使用了pillow库 from PIL import Image import requests import re splitter = re.compile(r'\d{30}') # 分割二值化后的图片 # distance('11110000', '00000000') # 比较两个字符串有多少位不同, 返回不同的位数 def distance(st

利用jTessBoxEditor工具进行Tesseract3.02.02样本训练,提高验证码识别率,tesseract训练样本

http://www.bkjia.com/Pythonjc/1131343.html 利用jTessBoxEditor工具进行Tesseract3.02.02样本训练,提高验证码识别率,tesseract训练样本 1.背景 前文已经简要介绍tesseract ocr引擎的安装及基本使用,其中提到使用-l eng参数来限定语言库,可以提高识别准确率及识别效率. 本文将针对某个网站的验证码进行样本训练,形成自己的语言库,来提高验证码识别率. 2.准备工具 tesseract样本训练有一个官方流程说明

【验证码】使用Tesseract实现简单的验证码识别

1.Tesseract介绍: Tesseract的OCR引擎最先由HP实验室于 1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一.然而,HP不久便决定放弃OCR业务,Tesseract也从此尘封. 数年以后,HP意识到,与其将Tesseract束之高阁,不如贡献给开源软件业,让其重焕新生--2005年,Tesseract由美国内华达州信息技 术研究所获得,并求诸于Google对Tesseract进行改进.消除Bug.优化工作. 2.下载 Tesseract: http