验证码识别据说可以用C#图像识别类库Tessnet2来实现,Tessnet2源于目前Google维护的开源项目Tesseract2。本文将对此传说进行验证,含验证结果与验证方法。

1. 验证结果

———————- 20150131更新————————————

通过对Tesseract的进一步学习与验证,其实Tessnet2识别”verification”这张图片完全没有问题,之前在验证时不行是因为我在写代码时把“ocr.SetVariable”的识别范围限制为数字与大写字母。总的来说,Tesseract对色彩分明未变形的图片识别效果还是比较好的。

———————- 20150131更新————————————

2.  验证方法

2.1 首先需要下载tessnet2库文件,分为32bit与64bit。根据电脑的操作系统来选:32位操作系统选tessnet2_32.dll,64位操作系统选tessnet2_64.dll)。

2.2 下载相关语言包tessdata,目前我只找到了英文的,可用于识别数字与字母;

2.3 新建控制台项目–>解决方案资源管理器–>选择“引用”后点右键–>在“添加引用”对话框中选择“浏览”–>找到文件tessnet2的解压文件夹选择相应的dll文件。

2.4 解决方案资源管理器–>选择“引用”后点右键–>在“添加引用”对话框中选择“.NET“–>找到System.Drawing并添加。

2.5 验证代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace TessnetTest
{
class Program
{
static void Main(string[] args)
{
//D:\CSharp\TessnetTest\ReCaptcha.jpg是待识别图片在电脑中的路径
Bitmap map = new Bitmap(@"D:\CSharp\TessnetTest\ReCaptcha.jpg");

tessnet2.Tesseract ocr = new tessnet2.Tesseract();//声明一个OCR类
string txt = "";
List<tessnet2.Word> result = new List<tessnet2.Word>();

try
{//当前识别变量设置:数字与大写字母,这种写法会导致无法识别小写字母,加上小写字母即可
ocr.SetVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
//应用当前语言包。注,Tessnet2是支持多国语的。语言包下载链接:http://code.google.com/p/tesseract-ocr/downloads/list
//D:\CSharp\TessnetTesttessdata是语言包在电脑中的路径
ocr.Init(@"D:\CSharp\TessnetTest\tessdata", "eng", false);

result = ocr.DoOCR(map, Rectangle.Empty);
foreach (tessnet2.Word word in result)
{
txt += word.Text;
}
Console.WriteLine(txt);
Console.ReadLine();
}
catch (Exception ex)
{

}
}
}
}

 
http://livezingy.com/tessnet2-identifying-code/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
 
namespace TessnetTest
{
    class Program
    {
        static void Main(string[] args)
        {
            //D:\CSharp\TessnetTest\ReCaptcha.jpg是待识别图片在电脑中的路径
            Bitmap map = new Bitmap(@"D:\CSharp\TessnetTest\ReCaptcha.jpg");
 
            tessnet2.Tesseract ocr = new tessnet2.Tesseract();//声明一个OCR类  
            string txt = "";
            List<tessnet2.Word> result = new List<tessnet2.Word>();
 
            try
            {//当前识别变量设置:数字与大写字母,这种写法会导致无法识别小写字母,加上小写字母即可
                ocr.SetVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
                //应用当前语言包。注,Tessnet2是支持多国语的。语言包下载链接:http://code.google.com/p/tesseract-ocr/downloads/list
                //D:\CSharp\TessnetTesttessdata是语言包在电脑中的路径
                ocr.Init(@"D:\CSharp\TessnetTest\tessdata", "eng", false);
 
                result = ocr.DoOCR(map, Rectangle.Empty);
                foreach (tessnet2.Word word in result)
                {
                    txt += word.Text;
                }
                Console.WriteLine(txt);
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                
            }
        }
    }
}

      3.展望

从某网站的验证码来看,字体基本无倾斜,间距也较大,如果可以把这些图片进行黑白化,识别的正确率是否会高一些呢?

另外,我找到的dll文件不知是什么版本,是否有最新版本出现,最新版本是否更强大呢?但是我不能从code.Google下载最新版本。说到这里,我不得不再打一个小广告,从我的推广链接http://www.share-nydus.com/s/rnutgcbp 注册nydus VPN的帐号,我可以得到免费的3天试用时间,先谢过。不过坚持每天签到也送积分,可以兑换免费时间,在免费时间里Google的各种服务可以随便用。

最新文章

  1. func_get_arg、func_get_args、func_num_args实现PHP伪重载
  2. MVC使用x.PagedList分页
  3. iOS技术博客(文摘)链接地址
  4. Server.UrlEncode()方法 空格转换成了+而非%20
  5. Golang、Php、Python、Java基于Thrift0.9.1实现跨语言调用
  6. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q115-Q117)
  7. Netty开发UDP协议
  8. 鸟哥的linux私房菜学习记录之档案权限与目录配置
  9. 剑指OFFER之把数组排成最小的数(九度OJ1504)
  10. Yii PHP 框架分析(二)
  11. kworker
  12. mysql启动
  13. 将undefault和null的数据转换成bool类型的数据 使用!!
  14. springMVC源码分析--HandlerMethodReturnValueHandler返回值解析器(一)
  15. PhotoPickerNewDemo【PhotoPicker0.9.12的个性化修改以及使用(内部glide版本号是4.1.1)】
  16. Java之for循环嵌套练习
  17. mybatis学习系列--逆向工程简单使用及mybatis原理
  18. 递归n!
  19. ScheduledExecutorService的使用
  20. 网易云音乐综合爬虫python库NetCloud v1版本发布

热门文章

  1. js 基础对象一
  2. Windows编译安装mod_wsgi,配合使用Django+Apahce
  3. Xshell无法连接虚拟机中的Ubuntu
  4. Android Studio 简单介绍和使用问题小结
  5. 不停止MySQL服务增加从库的两种方式【转载】
  6. C#调用C++动态库时类型转换
  7. java sni support result in svn fail
  8. 转 android学习—— context 和 getApplicationContext()
  9. 阶乘相关&lt;同余与模算术&gt;
  10. 管理Fragments(转)