次世代验证码识别系统

需要

AntiVC.dll文件 

http://antiyzm.sinaapp.com/archives/category/detail

unit Delphi7;

interface

uses
  Windows, Classes, Graphics, Controls, Forms,
  ExtCtrls, StdCtrls, jpeg;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Image1: TImage;
    Edit3: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  CdsIndex:integer;
  path: array[0..256] of Char;

function LoadCdsFromFile(CdsFile:string;Password:string):integer;stdcall;external ‘AntiVC.dll‘name ‘LoadCdsFromFile‘;
function LoadCdsFromBuffer(FileBuffer:Pointer;FileBufLen:integer;Password:string):integer;stdcall;external ‘AntiVC.dll‘ name ‘LoadCdsFromBuffer‘;
function GetVcodeFromFile(CdsFileIndex:integer;FilePath:string;Vcode:string):boolean;stdcall;external ‘AntiVC.dll‘ name ‘GetVcodeFromFile‘;
function GetVcodeFromBuffer(CdsFileIndex:integer;ImgBuffer:Pointer;ImgBufLen:integer;Vcode:string):boolean;stdcall;external ‘AntiVC.dll‘ name ‘GetVcodeFromBuffer‘;
function URLDownloadToFile(pCaller:integer;szURL:string;szFileName:string;dwReserved:Integer;lpfnCB:Integer):Integer;stdcall;external ‘urlmon.dll‘ name ‘URLDownloadToFileA‘;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  GetCurrentDirectory(SizeOf(path), path);
  Self.Edit1.Text := path + ‘\网易论坛.cds‘;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  mStream: TMemoryStream;
begin
  //以下演示LoadCdsFromFile函数
  CdsIndex := LoadCdsFromFile(Edit1.Text,‘thisisdemo‘); //填入密码  加载对应的识别库文件
  //以下演示LoadCdsFromBuffer函数
//  mStream := TMemoryStream.Create;
//  mStream.LoadFromFile(Edit1.Text);
//  CdsIndex := LoadCdsFromBuffer(mStream.Memory,mStream.Size,‘thisisdemo‘);
  if(CdsIndex <> -1) then
  begin
    Button2.Enabled := True;
    Button3.Enabled := True;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  tf:string;
begin
  tf := path + ‘\temp.JPG‘;
  URLDownloadToFile(0,Edit2.Text,tf,0,0);
  //Image1.Picture.LoadFromFile(tf);
  Image1.Visible := true;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  result: string;
  tf:string;
  mStream: TMemoryStream;
begin
  tf := path + ‘\temp.JPG‘;
  result := StringOfChar(‘ ‘,256); //预置字符串,以开辟一个空间接收返回的验证码
  //以下为GetVcodeFromFile函数演示
  //GetVcodeFromURL与此类似,只是把tf换成验证码地址
//  if(GetVcodeFromFile(CdsIndex,tf,result)) then
//  begin
//    Edit3.Text := result;
//  end
  //以下为GetVcodeFromBuffer函数演示
  mStream := TMemoryStream.Create;
  mStream.LoadFromFile(tf); {把文件读入内存流,借此演示内存调用方式}
  if(GetVcodeFromBuffer(CdsIndex,mStream.Memory,mStream.Size,result)) then
  begin
    Edit3.Text := result;
  end
end;

end.
object Form1: TForm1
  Left = 449
  Top = 286
  Caption = ‘AntiVC.dll‘#30340‘Delphi‘#35843#29992#20363#31243
  ClientHeight = 239
  ClientWidth = 316
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = ‘MS Sans Serif‘
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 16
    Top = 8
    Width = 185
    Height = 13
    AutoSize = False
    Caption = #35831#35774#32622#35201#36733#20837#30340‘cds‘#25991#20214#36335#24452
  end
  object Label2: TLabel
    Left = 16
    Top = 72
    Width = 185
    Height = 13
    AutoSize = False
    Caption = #35831#35774#32622#39564#35777#30721#22270#20687#19979#36733#22320#22336
  end
  object Image1: TImage
    Left = 16
    Top = 128
    Width = 165
    Height = 65
  end
  object Edit1: TEdit
    Left = 16
    Top = 40
    Width = 289
    Height = 21
    ImeName = #20013#25991‘(‘#31616#20307‘) - ‘#25628#29399#25340#38899#36755#20837#27861
    TabOrder = 0
  end
  object Edit2: TEdit
    Left = 16
    Top = 96
    Width = 289
    Height = 21
    ImeName = #20013#25991‘(‘#31616#20307‘) - ‘#25628#29399#25340#38899#36755#20837#27861
    TabOrder = 1
    Text = ‘http://bbs.ent.163.com/bbs/checkcode.jsp?1201359681906‘
  end
  object Button1: TButton
    Left = 211
    Top = 138
    Width = 97
    Height = 24
    Caption = #36733#20837‘CDS‘#25991#20214
    TabOrder = 2
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 208
    Top = 168
    Width = 97
    Height = 24
    Caption = #19979#36733#39564#35777#30721
    Enabled = False
    TabOrder = 3
    OnClick = Button2Click
  end
  object Button3: TButton
    Left = 208
    Top = 208
    Width = 97
    Height = 24
    Caption = #35782#21035#39564#35777#30721
    Enabled = False
    TabOrder = 4
    OnClick = Button3Click
  end
  object Edit3: TEdit
    Left = 16
    Top = 211
    Width = 165
    Height = 21
    ImeName = #20013#25991‘(‘#31616#20307‘) - ‘#25628#29399#25340#38899#36755#20837#27861
    TabOrder = 5
  end
end
用法说明:

使用时,请先载入识别库,然后才可以识别验证码。识别库只需成功载入一次,不要多次重复载入同一个识别库。可

以同时载入多个不同的识别库,载入类函数将返回一个整数,这个整数标示了不同的识别库,在调用识别类函数时,

指定识别库索引,即可使用指定的识别库。

------------以下两个函数用于载入识别库--------
Private Declare Function LoadCdsFromFile Lib "AntiVC.dll" (ByVal FilePath As String,ByVal Password As 

String) As Long
函数功能说明:从文件中载入识别库文件,返回识别库索引,以便后面的函数调用。返回-1代表载入出错。
函数参数说明:
FilePath  :文本型,识别库文件所在全路径。
Password  :文本型,识别库调用密码

Private Declare Function LoadCdsFromBuffer Lib "AntiVC.dll" (ByVal FileBuffer As Long,ByVal FileBufLen As 

Long,ByVal Password As String) As Long
函数功能说明:从内存中载入识别库文件,返回识别库索引,以便后面的函数调用。返回-1代表载入出错。
函数参数说明:
FileBuffer :整数型,一个记录了识别库文件的二进制数据的字节数组,或一块同样功能的内存区域。这里请提供数组

第一个成员的地址,或内存区域的地址。
FileBufLen :整数型,上述字节数组的数组成员数,或内存区域大小。
Password  :文本型,识别库调用密码

--------以上两个函数选择其一即可---------------

--------以下五个函数用于识别验证码-------------
Private Declare Function GetVcodeFromFile Lib "AntiVC.dll" (ByVal CdsFileIndex As Long,ByVal FilePath As 

String,ByVal Vcode As String) As Boolean
函数功能说明:使用识别库索引对应的识别库,识别一个图像文件,成功返回True,否则返回False。
函数参数说明:
CdsFileIndex :整数型,识别库索引,用于确定这个图像文件对应哪个识别库。
FilePath :文本型,图像文件所在全路径。
Vcode  :文本型,返回的验证码字符串,使用该参数前需要将一个足够长的空白字符串赋值给它。

Private Declare Function GetVcodeFromBuffer Lib "AntiVC.dll" (ByVal CdsFileIndex As Long,ByVal ImgBuffer 

As Long,ByVal ImgBufLen As Long,ByVal Vcode As String) As Boolean
函数功能说明:使用CdsFileIndex对应的识别库,识别一个记录了图像文件的二进制数据的字节数组,或一块同样功

能的内存区域,成功返回True,否则返回False。
函数参数说明:
CdsFileIndex :整数型,识别库索引,用于确定这个图像文件对应哪个识别库。
ImgBuffer :整数型,一个记录了图像文件的二进制数据的字节数组,或一块同样功能的内存区域。这里请提供数组

第一个成员的地址,或内存区域的地址。
ImgBufLen :整数型,上述字节数组的数组成员数,或内存区域大小。
Vcode :文本型,返回的验证码字符串,使用该参数前需要将一个足够长的空白字符串赋值给它。

Private Declare Function GetVcodeFromHWND Lib "AntiVC.dll" (ByVal CdsFileIndex As Long,ByVal HWND As 

Long,ByVal lpRect As Long, ByVal Vcode As String,ByVal DebugMode As Long) As Boolean
函数功能说明:使用CdsFileIndex对应的识别库,从某个窗口或控件中截取全部或部分区域截图,并自动识别后返回

。这个函数支持从隐藏的窗口或控件中截图,但不支持最小化的窗口或控件。
函数参数说明:
CdsFileIndex :整数型,识别库索引,用于确定这个图像文件对应哪个识别库。
HWND ,整数型,要截图的窗口句柄。
lpRect :整数型,要截图的区域,提供0代表截取窗口全部区域,否则请提供一个RECT结构类型的地址,该结构说明

了要截图的区域。
Vcode :文本型,返回的验证码字符串,使用该参数前需要将一个足够长的空白字符串赋值给它。
DebugMode :整数型,调试路径。正常调用请提供0,如果要把截图数据保存到磁盘文件,这里请提供一个字符串变

量的地址,这个字符串就是保存的路径。

Private Declare Function GetVcodeFromIECache Lib "AntiVC.dll" (ByVal CdsFileIndex As Long,ByVal ImgURL 

As String,ByVal Vcode As String) As Boolean
函数功能说明:使用CdsFileIndex对应的识别库,从IE缓存中搜索ImgURL所指向的图像文件,成功返回True,否则返

回False。该函数不会从网络上下载图像文件,而是在IE缓存中搜索,如果没有事先浏览过ImgURL所在的网页,这个

函数执行不会成功。使用时,请先用代码或浏览器浏览验证码所在网页,确保IE缓存保存了验证码图像文件。
函数参数说明:
CdsFileIndex :整数型,识别库索引,用于确定这个图像文件对应哪个识别库。
ImgURL :图像文件所在网址。这里请直接输入验证码图像的URL地址,函数将用这个地址确定相应的图像文件路径。
Vcode :文本型,返回的验证码字符串,使用该参数前需要将一个足够长的空白字符串赋值给它。

Private Declare Function GetVcodeFromHBitmap Lib "AntiVC.dll" (ByVal CdsFileIndex As Long,ByVal HBitmap 

As Long,ByVal Vcode As String) As Boolean
函数功能说明:使用CdsFileIndex对应的识别库,识别一个HBitmap所指向的位图数据,成功返回True,否则返回

False。这里HBitmap是位图句柄,请直接传递位图句柄给它。
函数参数说明:
CdsFileIndex :整数型,识别库索引,用于确定这个图像文件对应哪个识别库。
HBitmap :验证码图像的位图句柄。必须是位图句柄!
Vcode :文本型,返回的验证码字符串,使用该参数前需要将一个足够长的空白字符串赋值给它。

-----------以上五个函数请根据情况选择其一即可------------------

PS:由于可能导致某些不良杀毒软件误报,GetVcodeFromURL这个函数在这个版本中已经删除!

-----------以下一个函数用于释放识别库-----------
Private Declare Function FreeAllCdsFile Lib "AntiVC.dll" ()
函数功能说明:释放全部载入的识别库,回收占用的内存。
参数:无
返回值:无

-----------以下一个函数用于设定超时时间------------------
Private Declare Function SetTimeOut Lib "AntiVC.dll" (ByVal CdsFileIndex As Long,ByVal TimeOut As Long) 

As Boolean
函数功能说明:设定识别超时时间,超时直接返回,不再继续识别。设定成功返回真,否则返回假。
函数参数说明:
CdsFileIndex :整数型,识别库索引,用于确定这个图像文件对应哪个识别库。
TimeOut :整数型,超时时间,单位为毫秒。

-----------以下一个函数用于设定识别库选项------------------
Private Declare Function SetCdsOption Lib "AntiVC.dll" (ByVal CdsFileIndex As Long,ByVal OptionIndex As 

Long,ByVal OptionValue As Long) As Boolean
函数功能说明:设定识别库选项。设定成功返回真,否则返回假。
函数参数说明:
CdsFileIndex :整数型,识别库索引,用于确定这个图像文件对应哪个识别库。
OptionIndex :整数型,选项索引,取值范围1~9。
OptionValue :整数型,选项数值。

参数详解:
    OptionIndex    OptionValue
1.    最小相似度    取值范围:0~100
2.    识别模式    取值范围:0~3
3.    分割方式    取值范围:0~2
4.    识别加速    取值范围:0,非零,分别代表逻辑值假和真
5.    字符个数    取值范围:大于0
6.    分割份数    取值范围:大于0
7.    去除杂点    取值范围:0,非零,分别代表逻辑值假和真
8.    去除白边    取值范围:0,非零,分别代表逻辑值假和真
9.    去除毛刺    取值范围:0,非零,分别代表逻辑值假和真

-----------以下一个函数用于计算数学表达式------------------
Private Declare Function Calculator Lib "AntiVC.dll" (ByVal Expression As String,ByVal CalcResult As String) 

As Boolean
函数功能说明:计算数学表达式。失败返回空文本,成功返回计算结果文本。功能非常简单,只是用来计算那些需要

填写计算结果的验证码。计算完成返回真,否则返回假。
函数参数说明:
Expression :文本型,数学表达式,只能计算简单的+-×/,不能有括号,且算术符号只能有一个。
CalcResult :文本型,计算结果,使用需要将一个足够长的空白字符串赋值给它。

-----------以下一个函数用于设置文本参数为unicode格式------------------
Private Declare Function UseUnicodeString Lib "AntiVC.dll" (ByVal UnicodeString As Boolean)
函数功能说明:设置传入dll的各个文本类型参数使用unicode格式,一次设置长期有效。无返回值。
函数参数说明:
UnicodeString :逻辑型,为真文本类型参数使用unicode格式,否则使用ansi格式。
时间: 2024-10-15 14:30:08

次世代验证码识别系统的相关文章

完美验证码识别系统,验证码插件使用帮助文档

该验证码插件为<完美验证码识别系统V3.2.1>的python封装,提供给UiBot实现需验证码识别的场景的解决方案. 载入识别库 LoadDat(datPath, password) 函数说明:        从文件中载入识别库文件,成功返回True,否则返回False. 参数: 参数名 类型 说明 datPath 文本型 识别库文件所在全路径 password 文本型 识别库调用密码 返回值: 返回结果 类型 说明 True boolean型 载入识别库成功 False boolean型

基于TensorFlow的车牌号识别系统

简介 过去几周我一直在涉足深度学习领域,尤其是卷积神经网络模型.最近,谷歌围绕街景多位数字识别技术发布了一篇不错的paper.该文章描述了一个用于提取街景门牌号的单个端到端神经网络系统.然后,作者阐述了基于同样的网络结构如何来突破谷歌验证码识别系统的准确率. 为了亲身体验神经网络的实现,我决定尝试设计一个可以解决类似问题的系统:车牌号自动识别系统.设计这样一个系统的原因有3点: 我应该能够参照谷歌那篇paper搭建一个同样的或者类似的网络架构:谷歌提供的那个网络架构在验证码识别上相当不错,那么讲

关于工行验证码识别的一些问题

1.关于亦思验证码识别系统 是用于识别的系统性软件,其用途广泛,适用于各类验证码识别,本地图片识别,车牌号码识别,汉字文字识别等领域,拥有识别库体积小,识别速度快,准确率高,操作简便,调用方便,高效率制作等特点.自发布以来,就受到很多用户好评,被国内各大知名软件网站相继收录. ps:好像官方倒闭黄了吧...但是工具还是好的本文主要验证码识别还是用它的.关于识别库的生成不做过多阐述,工行做好处理后库做到200次以上会有很好的效果的. 2.主要实现编码 本文用的语言是c#. 导入ycode.dll基

[blog]验证码识别--资料收集

证码识别--资料收集 一.验证码基础知识 验证码设计的目的就是区分“人”和“机器”,所以它在被设计的时候,主要的目的就是防止被采用就是自动识别出来.所以作为破解者来说,一开始就是处于劣势地位的.当然这使得验证码的破解变成了一项结合图像识别.模式识别的猜谜解题活动. 验证码的识别很难达到100%.因为在现实生活中,人也可能是识别错误的,所以当错误发生的时候,验证码识别系统会再提供一个新的验证码.如果单次识别有50%的识别成功率(也就是50%的失败率),那么连续三次的总体成功率就可以达到0.875(

验证码识别竞赛解决方案(97%)

前言:这个库是为验证码识别竞赛而开发的一个基于pytorch实现的端到端的验证码识别系统.前后开发大概有2个月,其中大部分时间都在调参,后期参考kaggle大神经验,加入了一些trick,但是由于第一个榜截止了,所以没有得到测试集结果,只有验证集的参考结果.该库比较简单,适合入门竞赛,不过调参难度比较大,需要尝试合适的超参数,如果超参数不合适,可能会导致无法收敛,具体问题具体分析. 1. 竞赛背景 基于https://github.com/dee1024/pytorch-captcha-reco

集美大学教务处验证码识别(二)

[原创,转载请标明作者:森狗] 本文对第二种验证码,即管理员登入后台地址的验证码进行识别. 1.采集一些验证码,0~9都要有 2.观察验证码,用画图工具即可. 观察可发现,噪点即阴影,此处的阴影就是颜色比主体验证码略淡,以此为突破口. 3.去除噪点 color.getGreen() 获取绿色的值int,绿色值(0~255 从深到浅),大于200的就是浅色的噪点 public static int isWhite(int colorInt) { Color color = new Color(co

基于python语言的tensorflow的‘端到端’的字符型验证码识别源码整理(github源码分享)

基于python语言的tensorflow的‘端到端’的字符型验证码识别 1   Abstract 验证码(CAPTCHA)的诞生本身是为了自动区分 自然人 和 机器人 的一套公开方法, 但是近几年的人工智能技术的发展,传统的字符验证已经形同虚设. 所以,大家一方面研究和学习此代码时,另外一方面也要警惕自己的互联网系统的web安全问题. Keywords: 人工智能,Python,字符验证码,CAPTCHA,识别,tensorflow,CNN,深度学习 2   Introduction 全自动区

验证码识别 ——知乎网友2

推荐Programming Computer Vision with Python, 这位作者用python重写很多基本的Computer Vision算法,书的final draft在首页,代码也在Github上边.类似于验证码识别的问题呢,大家可以直接refer Chapter 8 - Classifying Image Content, 里边不仅有对3种classification approaches的详细解释,而且还有比如手势识别,OCR识别等经典问题,更更重要的是,Github上直接

字符型图片验证码识别完整过程及Python实现

1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻.本文介绍了一套字符验证码识别的完整流程,对于验证码安全和OCR识别技术都有一定的借鉴意义. 2   关键词 关键词:安全,字符图片,验证码识别,OCR,Python,SVM,PIL 3   免责声明 本文研究所用素材来自于某旧Web框架的网站 完全对外公开 的公共图片资源. 本文只做了该网站对外公开的公共图片资源进行了爬取, 并未越权