投票软件比较有技术含量的部分就在验证码识别。为防止投票作弊,很多投票网站都会加随机验证码,输入验证码后才能投票。但是加了验证码是否就能万无一失呢,也不尽然。虽然不是所有验证码都能识别(如QQ的变形汉字验证码是不太可能用软件识别的,个人觉得),但还是有很多验证码可以用软件来识别的。

下面以天涯博客里的评论验证码为例,说明验证码识别的基本思路和方法:

                  (网页截图)

第一步、获取验证码图片
C#可以用HttpWebRequest类GET验证码的网址,得到返回的数据流,再将数据流值赋给Bitmap变量。在Winform里放一个PictureBox控件,将它的Image属性指定为Bitmap变量,就可以显示出验证码图片了。
也可以使用Bitmap的Save方法将图片保存成Bmp文件。
    Stream resStream = response.GetResponseStream();//得到验证码数据流
    Bitmap sourcebm = new Bitmap(resStream);//初始化Bitmap图片在Photoshop中将验证码图片放大1600%,如下:

第二步、将验证码图片去色(将彩色转换为灰度)
去色是为了进一步做成黑白双色图片。
    Color c = sourcebm.GetPixel(x, y);
    int luma = (int)(c.R * 0.3 + c.G * 0.59 + c.B * 0.11);//转换灰度的算法
    sourcebm.SetPixel(x, y, Color.FromArgb(luma, luma, luma));

第三步、去杂色,转换为黑白图片
从灰度图片中可以看出,数字的颜色比较深,而杂色都是比较浅,所以可以设定一个临界颜色值,颜色高于或等于这个值的设置为白色,低于这个值的设置为黑色。
    Color c = sourcebm.GetPixel(x, y);
    if (c.R >= critical_value)
        sourcebm.SetPixel(x, y, Color.FromArgb(255, 255, 255));
    else
        sourcebm.SetPixel(x, y, Color.FromArgb(0, 0, 0));

第四步、动态得到每个数字的边界

for (int x = 0; x < sourcebm.Width; x++)
{
    myColumn = true;
    for (int y = 0; y < sourcebm.Height; y++)
    {
        Color c = sourcebm.GetPixel(x, y);
        if (c.R == 0 && charStart == false)//第一次出现黑点
        {
            widthStartX[charNum] = x;
            charStart = true;
            break;
        }
        if (c.R == 0 && charStart == true)//后续出现黑点
        {
            myColumn = false;
            break;
        }
    }
    if (myColumn == true && charStart == true && widthStartX[charNum] < x)//如果当列没有黑点并且前面出现过黑点还没结束
    {
        widthEndX[charNum] = x - 1;
        charStart = false;
        charNum++;
    }
    if (charStart == true && myColumn == false && x == (bmp.Width - 1))//如果开始出现黑点了,并且最后一列也有黑点
    {
        widthEndX[charNum] = x;
        charStart = false;

charNum++;
    }
}

五、得到每个字符的特征码
在每个字符的边界内,检测每个象素,如果象素为白色则为“0”,如果象素为黑色则为“1”,将“0”“1”连起来就是该数字或字符的特征码。
    Color c = sourcebm.GetPixel(x, y);
    if (c.R == 0)
        str = str + "1";
    else
        str = str + "0";

六、完成验证码图片的识别
将获取的特征码和对应的数字或字符保存起来,下次再将新获取的特征码跟保存的特征码对比,如果相同则提取对应的数字或字符,完成验证码的识别。

可为需要网络投票的项目进行代为投票,也可为其制作定制的投票软件。免费试投100票,满意后再联系QQ:2267367735

转载于:https://www.cnblogs.com/hsxiaoma/archive/2011/12/08/2281053.html

网络投票轻松实现自动化 - 验证码识别的基本思路及方法相关推荐

  1. 图形数字的识别算法: 车牌识别及验证码识别的一般思路

    图形数字的识别算法: 车牌识别及验证码识别的一般思路 本文源自我之前花了2 天时间做的一个简单的车牌识别系统.那个项目,时间太紧,样本也有限,达不到对方要求的95% 识别率(主要对于车牌来说,D,0 ...

  2. 车牌识别及验证码识别的一般思路

    本文源自我之前花了2天时间做的一个简单的车牌识别系统.那个项目,时间太紧,样本也有限,达不到对方要求的95%识别率(主要对于车牌来说,D,0,O,I,1等等太相似了.然后,汉字的识别难度也不小),因此 ...

  3. 轻松把玩HttpClient之封装HttpClient工具类(七),新增验证码识别功能

    这个HttpClientUtil工具类分享在GitHub上已经半年多的时间了,并且得到了不小的关注,有25颗star,被fork了38次.有了大家的鼓励,工具类一直也在完善中.最近比较忙,两个多月前的 ...

  4. 验证码识别技术(1) - 边缘检测

    概述 验证码有时候也叫图形码,是一种阻止软件进行某些自动化行为的技术.被广泛的用于各种系统的帐号注册.登录验证等环节.在一定程度上验证码可以阻止软件自动进行帐号密码猜解.注册等行为. 但迫于一些原因, ...

  5. Python验证码识别:利用pytesser识别简单图形

    一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域-- 简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形.以及利用计算机进行 ...

  6. python 验证码识别 开源_Python 代码实现验证码识别

    Python 代码实现验证码识别 测试开发社区  1周前 源 /  j_hao104 一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域-- ...

  7. python图形验证码识别_Python验证码识别:利用pytesser识别简单图形验证码

    一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域-- 简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形.以及利用计算机进行 ...

  8. web自动化之验证码识别解决方案

    验证码识别解决方案 对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码,验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂一点就是滑动 ...

  9. 网络爬虫中的验证码识别

    网络爬虫遇到的验证码 在写网络,爬虫时,遇到很多网站存在验证码的情形,有其是比较烦的是,爬取数据的每一页都有验证码,如果只有登陆时,存在验证码,这个很好解决,只需将验证码获取后手动输入就行. 但对于每 ...

最新文章

  1. 斯隆奖获得者李婧翌:AI+X并非总是有效,生物数据量小、噪音大,可解释性是关键...
  2. gevent.hub.LoopExit: ('This operation would block forever
  3. 使用DotNetCharting控件生成报表统计图总结
  4. System.Transactions事务超时设置
  5. IT项目管理总结:第十章 项目沟通管理
  6. linux数据库服务器的配置与管理,实验七_Linux_MySQL数据库服务器配置与管理
  7. mybatis-plus分页查询_SpringBoot + MyBatisPlus 快速入门
  8. CCNA考试试验总结
  9. MySQL Encryption and Compression Functions(加密)
  10. 读书笔记_打开量化投资的黑箱06
  11. 基于matlab实现的BP神经网络预测美国死亡人数
  12. 计算机网研究课题,中学生计算机类课题研究范例
  13. win7耳机插前面没声音_win7电脑音箱没声音如何解决 win7电脑音箱没声音解决方式【图解】...
  14. Web应用服务器——Tomcat的介绍、下载安装、环境配置与使用
  15. pycharm提示 进程已结束,退出代码 -1073740791 (0xC0000409)
  16. python控制多个屏幕_使用Python控制屏幕
  17. DataX 异构数据源离线同步
  18. 餐饮行业最新的经营模式——私域运营案例
  19. 聪明的数据结构和笨拙的逻辑代码
  20. wlan源码中Country Code 与 regDomain的对应关系表

热门文章

  1. Halcon知识: XLD的概念
  2. 赌徒都应该明白的道理:通过简单计算告诉你为什么久赌必输
  3. 混沌动力学行为研究-分叉图
  4. 条件格式英语成绩大于计算机,决胜计算机二级Ms office(三)
  5. sqlsourcesafe mysql_mysql权限问题,看不到其它的库!
  6. html5日期不联动下拉框,下拉框联动问题 赋值时候失效
  7. iOSAPP配置多环境
  8. angular 指令渲染_Angularjs渲染的 using 指令的星级评分系统示例
  9. 2021年12届蓝桥杯C++B组省赛
  10. delete[] 出错