java color.fromargb_使用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

来对这些图片做初步去噪处理(除我们需要的内容外的东西都认为是噪点),我以

6507f62d12f4fb314b16a4a0750463be.gif       这种类型的验证码为例,先创建一个应用

窗体或都可以,因为这里只是对图片做一个初步的处理,我们先使用

得到这个数组后,我们再使用循环遍历来处理,我们得到ma之后 再对它来做处理 首先我们如果放大的话可以看到这个图片

边上的都是白色的,而中间组成文字的是黑色, 这是我们需要的, 而其它的杂色 就有好几种 为了偷下懒呢,我就先只去这三种主要的好了,这里之所以标出了RGB值

是因为我们要用这些值来比较 颜色 再做替换的,这个我是用一个小工具来做的

10a04cf203daafdf346a241a4893313d.png

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

代码如下,这里是写的一个单独的方法

fcecaa27ea5212ceb9bf034c36bfbf34.gif1 private staticBitmap cor(Bitmap ma)2 {3 Bitmap bi = newBitmap(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 returnbi;31 }

fcecaa27ea5212ceb9bf034c36bfbf34.gif

fcecaa27ea5212ceb9bf034c36bfbf34.gifString [] files = Directory.GetFiles(@"E:\img\yb","*.gif");for (int i = 0; i < files.Length; i++)

{

Bitmap bi= Image.FromFile(files[i]) asBitmap;

cor(bi).Save(@"E:\img\OK\" + i + ".tiff", ImageFormat.Tiff);

}

MessageBox.Show("OK");//通过这个去掉用图片处理的方法

fcecaa27ea5212ceb9bf034c36bfbf34.gif

之后我们把新的图片保存在一个文件夹里,处理完好我们第一步的工作 就做好了

那么我们开始第二步,

(先确保已经搞定了java的运行环境)打开jTessBoxEditor-0.7这个工具jTessBoxEditor.jar这个文件!

然后选择我画起来那里

9df1455d78ac5d2d35a7b1df924ed452.png

ef9f22dd056e19ae38641804d9585667.png然后出现这个界面打开刚刚生成的图的文件夹,把图片全选打开,然后再保存到一个文件夹里去,

(可以是同一个),然后就会生成一个包含了所有图片的tiff文件

6d3696208913408e23928d104737ade3.png

我这里是做了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

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

4e3511785814e5d1b4174639dbd127f9.png

当上面的都执行完后 如果没有报错 那么在?把该目录下的unicharset, inttemp ,normproto,

pfftable  这四个文件加上 训练名前缀(就是你刚刚写的YY的那个)

?命令执行 combine_tessdata 训练名.

生成的训练名.traineddata就可以用来进行识别了

fcecaa27ea5212ceb9bf034c36bfbf34.gifOpenFileDialog fi = newOpenFileDialog();if (fi.ShowDialog()==DialogResult.OK)

{

Bitmap bi=cor((Bitmap) Image.FromFile(fi.FileName));

TesseractProcessor p= newTesseractProcessor();

p.SetPageSegMode(ePageSegMode.PSM_SINGLE_LINE);

p.Init(@"E:\img\OK\","n",(int)eOcrEngineMode.OEM_DEFAULT);

String s=p.Recognize(bi);

MessageBox.Show(s);

}

fcecaa27ea5212ceb9bf034c36bfbf34.gif

上面是做识别块的代码Tesseractpocessor这是前面说要用到的那个程序集的在使用使要先导入,..

欢迎 大家能共同 探讨 交流 QQ 315695792

原文:http://www.cnblogs.com/itstac/p/3768824.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值