爱易网
IT新闻
IT新闻
爱易资讯
网站搭建
云虚拟主机教程
云服务器教程
Apache教程
IIS教程
Nginx教程
网站策划
站长文章
推广教程
淘宝客教程
网页设计
HTML教程
XHTML教程
CSS教程
HTML5教程
CSS3教程
JavaSript基础
JQuery教程
Node.js教程
前端技术
Ajax教程
Js特效
Xml教程
平面设计
页面UI设计
photoshop教程
程序开发
AI人工智能
Asp教程
Php教程
Asp.Net教程
Net Core教程
C#教程
Java教程
Jsp教程
开发技术
微信小程序教程
Uniapp开发教程
微信公众号开发
Andriod教程
IOS教程
DOS教程
Python教程
Docker教程
Windows Container教程
数据库
MSSQL教程
MySQL教程
Redis教程
Access教程
Oracle教程
数据库教程
操作系统
Linux教程
Windows教程
MAC教程
Cisco教程
交换机教程
防火墙教程
搜索
爱易网页
ASP.NET教程
QQ验证码识别源代码(C#/NET1.1)_Asp.NET开发实例
QQ验证码识别源代码(C#/NET1.1)_Asp.NET开发实例
日期:2009-04-28 浏览次数:20633 次
notsamenum++;
}
}
if(notsamenum<4)
{
char cj=(char)datachar[ii];
return cj.ToString();
}
}
return jieguo;
}
/// <summary>
/// 检查特征库中是否已经存在相关记录
/// </summary>
bool ischardatain()
{
bool jieguo=false;
for(int ii=0;ii<datanum;ii++)
{
//统计一共有多少行的像素有差异,如果在4行以内就认为是存在该记录
//这种方法比较原始,但比较适合多线程时的运行,因为程序只进行简单的逻辑比较
//如果能够收集更多的特征库,识别率可以达到80%以上
//(此时可能需要将特征库的容量提高到15W个或以上)
//当然也可以改进品配算法(如使用关键点品配),以用较少的特征库达到较高的识别率,但
//那样有比较大的机会造成识别错误并且多线程时占用较多CPU时间。
int notsamenum=0;
if(System.Math.Abs(dataxy[ii,0]-xlpic)>1 || System.Math.Abs(dataxy[ii,1]-ylpic)>1)
{
continue;
}
for(int jj=0;jj<20;jj++)
{
if(datap[ii,jj]!=datapic[jj])
{
notsamenum++;
}
}
if(notsamenum<4)
{
string asdasd=((char)datachar[ii]).ToString();
return true;
}
}
return jieguo;
}
/// <summary>
/// 添加到特征库中,并暂时将对应的字符置为空格以待人工识别
/// </summary>
void adddatawithnullchar()
{
if(this.ischardatain())
{
return;
}
for(int ii=0;ii<20;ii++)
{
datap[datanum,ii]=this.datapic[ii];
}
//暂时将对应的字符置为空格以待人工识别
datachar[datanum]=32;
dataxy[datanum,0]=this.xlpic;
dataxy[datanum,1]=this.ylpic;
datanum++;
}
/// <summary>
/// 检查验证码图片是否能分成4个部分,如果可以就检查4个字符在特征库中是否已经存在,如果不存在,
/// 就添加到特征库中,并暂时将对应的字符置为空格以待人工识别
/// </summary>
public void writetodata()
{
bool[,] picpixel=new bool[49,20];
for(int ii=0;ii<49;ii++)
{
for(int jj=0;jj<20;jj++)
{
if(bp.GetPixel(ii,jj).GetBrightness()<0.999)
{
picpixel[ii,jj]=true;
}
}
}
int[] index=new int[8];
int indexnum=0;
bool black=false;
for(int ii=0;ii<49;ii++)
{
bool haveblack=false;
for(int jj=0;jj<20;jj++)
{
if(picpixel[ii,jj])
{
haveblack=true;
break;
}
}
if(haveblack && black==false)
{
index[indexnum]=ii;
indexnum++;
black=true;
}
if(!haveblack && black)
{
index[indexnum]=ii;
indexnum++;
black=false;
}
}
if(indexnum<7)
{
return;
}
if(indexnum==7)
{
index[7]=49;
}
//****
for(int ii=0;ii<4;ii++)
{
int x1=index[ii*2];
int x2=index[ii*2+1];
int y1=0,y2=19;
bool mb=false;
for(int jj=0;jj<20;jj++)
{
for(int kk=x1;kk<x2;kk++)
{
if(picpixel[kk,jj])
{
mb=true;
break;
}
}
if(mb)
{
y1=jj;
break;
}
}
mb=false;
for(int jj=19;jj>=0;jj--)
{
for(int kk=x1;kk<x2;kk++)
{
if(picpixel[kk,jj])
{
mb=true;
break;
}
}
if(mb)
{
y2=jj;
break;
}
}
//**以上是获取有效区域的范围
for(int jj=0;jj<20;jj++)
{
this.datapic[jj]=0;
this.datapic[jj]=0;
}
this.xlpic=(byte)(x2-x1);
//如果字符宽度超过16个像素就不予处理
if(xlpic>16)
{
continue;
}
this.ylpic=(byte)(y2-y1+1);
int ys=-1;
ushort[] addin=new ushort[]{1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768};
for(int jj=y1;jj<=y2;jj++)
{
ys++;
int xs=-1;
for(int kk=x1;kk<x2;kk++)
{
xs++;
if(picpixel[kk,jj])
{
this.datapic[ys]=(ushort)(this.datapic[ys]+addin[xs]);
}
}
}
this.adddatawithnullchar();
}
//****
}
/// <summary>
/// 识别图片
/// </summary>
/// <returns>返回识别结果(如果返回的字符串长度小于4就说明识别失败)</returns>
public string ocrpic()
{
string jieguo="";
bool[,] picpixel=new bool[49,20];
for(int ii=0;ii<49;ii++)
{
for(int jj=0;jj<20;jj++)
{
if(bp.GetPixel(ii,jj).GetBrightness()<0.999)
{
picpixel[ii,jj]=true;
}
}
}
int[] index=new int[8];
int indexnum=0;
bool black=false;
for(int ii=0;ii<49;ii++)
{
bool haveblack=false;
for(int jj=0;jj<
上一篇:[环境搭建] VS-Visual Studio-IIS Express 支持局域网访问 远程调试
下一篇:dotnet学习笔记三 - 程序域程序集_Asp.NET开发实例
免责声明:
本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
相关资料
更多>
急救~救~救~救~解决思路
学习Asp.Net经常会用到的函数集
asp.net应用程序级别跟踪
关于TreeView解决办法
100分请问一个有关问题
.net你如何判断字符串是否全是数字
格式化DataGrid的例子
如何在 formview 的 插入 记录的同时 向另外一个表也插入记录
关于Sql注入有关问题?
推荐阅读
更多>
GridView中怎么让新增的记录显示在最前面
构建视频网站,业内哪家的视频公布系统比较成熟?(散分)
ASP.NET入门教程:效劳器控件
treeview节点展开有关问题(紧急)
们进,帮帮初学者ing.
年末了,抽奖有关问题,请各位请问~速结贴
窗口关不掉解决方案
Repeater嵌套二级显示不正常(附图说明),该怎么解决
ASP.NET技巧:URL编码处理
在VS2005里运行正常,但是发布后却无法正常运行
gidview中checkbox的数据绑定出了有关问题,求教~
ASP.NET 2.0 绑定高级技巧
.NET Petshop详解(四):petshop三层结构之PresentationTier
哪位高手知道RadUpload怎么使用
ASP.NET的实时天气及24小时天气预报
求货币正则表达式?该如何处理
关于文件输出的有关问题
怎的使用MailMessage发送邮件
sql数据库连接有关问题
Label展示动态值的字体的颜色