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

1 篇文章 0 订阅
1 篇文章 0 订阅

投票软件比较有技术含量的部分就在验证码识别。为防止投票作弊,很多投票网站都会加随机验证码,输入验证码后才能投票。但是加了验证码是否就能万无一失呢,也不尽然。虽然不是所有验证码都能识别(如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

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信投票——助您打开微信成功之门 注意:此插件完全依靠【禾今】微信助理并绑定微信公众开发接口,安装此插件前,请先安装【禾今】微信助理 功能介绍: 1、可设置开启和关闭限制投票用户IP区域,可限制省份限制,如“江苏”,也可限制城市限制,如“常州”! 2、可设置开启和关闭投票验证码功能,投票前需要手动拖动图片完成验证!屏蔽机器刷票! 3、设置每个微信用户每天可投票数,还能开启每个微信用户每天给同一个作品只能投一票的限制! 4、每个活动独立可开启和关闭 报名期和投票期重叠的时间段每个作品最高票数限制,比如报名时间是 1-10号 投票时间是 5-30号,那么5-10号期间每个作品的最高票数只能是设置的这么多,这样可以防止前后报名作品的票数差距太大! 5、一键导出报名作品excel文件,可设置导出数量,想导多少导多少! 6、每个作品的投票记录可以清晰查看,并可一键导出每个作品的投票记录excel文件! 7、两套投票主题风格可供选择 8、强制关注公众才能投票和报名 9、可设置投票者每投一票奖励积分 10、可结合微信刮刮卡插件,用投票奖励的积分去刮卡 11、在线报名,报名时间和投票时间自定义,可设置投票期间也可报名 12、活动可灵活的设置报名是否需要审核,白天开启免审,晚上开启审核 13、三个活动说明自定义项,可随意放置任何代码:图片、文字、链接、音乐、视频等! 14、后台支持手动添加作品,也可以修改所有作品的票数等信息! 15、独立的第三方统计代码放置位,让你了解投票给你带来的流量、ip等信息! 16、可自定义报名作品上传的最多图片数! 17、后台通过作品ID一键搜索功能,快捷的找到要修改的作品! 18、后台可屏蔽作品,不出现在列表中,无法投票
Libsvm是一个用于支持向量机(SVM)的软件库,它提供了一些用于多分类的方法,包括一对一方法投票法。 一对一方法:将多分类问题转化为多个二分类问题,每次只将两个类别之间进行分类。例如,对于有n个类别的多分类问题,我们可以将其转化为n*(n-1)/2个二分类问题。在训练时,我们需要训练n*(n-1)/2个二分类器,每个二分类器只关注两个类别之间的区分,最终将所有的二分类器的结果进行汇总,使用投票法等方式进行决策。 投票法:将多个分类器的结果进行综合,得到最终的分类结果。例如,在SVM中,我们可以使用投票法来实现多分类。首先,我们需要训练多个二分类器,每个二分类器仅关注两个类别之间的区分。然后,对于一个新的测试样本,我们将其传递给每个二分类器进行分类,得到每个二分类器的预测结果。最后,我们可以使用投票法等方式来综合所有的预测结果,得到最终的分类结果。 以下是使用Libsvm实现多分类的示例代码: ```python import svmutil # 加载训练数据和标签 y, x = svmutil.svm_read_problem('train.txt') # 设置参数 param = svmutil.svm_parameter('-s 0 -t 2 -c 1 -g 0.5') # 训练模型 model = svmutil.svm_train(y, x, param) # 加载测试数据和标签 y_test, x_test = svmutil.svm_read_problem('test.txt') # 预测测试数据的标签 p_label, p_acc, p_val = svmutil.svm_predict(y_test, x_test, model) ``` 在上面的代码中,我们使用svmutil模块的svm_train和svm_predict函数来训练和预测多分类问题。参数-s表示使用SVM的类型,-t表示SVM的核函数类型,-c表示SVM的正则化参数,-g表示核函数的参数。我们还可以使用其他的参数来进一步控制模型的训练和预测过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值