加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl 图片验证码 识别分析

发布时间:2020-12-15 23:58:09 所属栏目:大数据 来源:网络整理
导读:转自http://bbs.chinaunix.net/thread-1360950-1-1.html 感觉不错,学习学习。。 需要使用了两个库??1. Image::Magick 用来进行图片处理??2. imgseek 进行图片比较 求出相似度 程序因为使用到 imgseek 所以只能在*nix下运行 程序设计时 分两个部分 1.建里特

转自http://bbs.chinaunix.net/thread-1360950-1-1.html

感觉不错,学习学习。。

需要使用了两个库??1. Image::Magick 用来进行图片处理??2. imgseek 进行图片比较 求出相似度


程序因为使用到 imgseek 所以只能在*nix下运行

程序设计时 分两个部分 1.建里特征图片库??2. 用随即图片与特征图片库进行比较 求出相似度最高的值?
这个程序仅仅是为了供大家研究参考? ? # 为了不惹麻烦 把测试网站删除了??
一. 建立特征图片库?
1. 下载 包含 0到9 共10个数字的图片
??
? ? 我这里是 手工下载了10张第一个数字不同的图片?
2. 对图片进行处理?
? ? 转换成灰度图 -> 2值化(我这里设定的阙值是20300)-> 把第一个数字切割下来
  1. ? ?
  2. use Image::Magick;
  3. my $image = new Image::Magick;

  4. for my $num qw(00 01 02 03 04 05 06 07 08 09){
  5. ? ? ? ? my $file = './image/'.$num.'.bmp';
  6. ? ? ? ? $image->Read($file);
  7. }
  8. $image->Quantize(colorspace=>'gray');? ?? ?? ?? ?? ?? ?#灰度图
  9. $image->Threshold(threshold=>'20300',channel=>'All');??# 2值化??阙值需要自己手工调整
  10. $image->Crop(width=>18,height=>25,x=>0,y=>0);? ?? ? #切割图片
  11. my $out = './image/I.bmp';
  12. $image->Write($out);
  13. $image = undef;
  14. exit;

??3. 提取出仅含有数字的区域 (即去掉四周的空白)
  1. ??
  2. use List::Util qw(max min);
  3. for my $num (0..9){
  4. my $file = './image/I-'.$num.'.bmp';
  5. $image->Read($file);
  6. my ($w,$h)=$image -> Get('width','height');
  7. my (@px_x,@px_y);
  8. for my $x(0..$w){
  9. ? ? ? ? for my $y (0..$h){
  10. ? ? ? ? ? ? ? ? my $px = $image -> GetPixel(x=>$x,y=>$y);
  11. ? ? ? ? ? ? ? ? if($px == 0){
  12. ? ? ? ? ? ? ? ? ? ? ? ? push @px_x,$x;
  13. ? ? ? ? ? ? ? ? ? ? ? ? push @px_y,$y;
  14. ? ? ? ? ? ? ? ? }
  15. ? ? ? ? }
  16. my ($xmax,$xmin,$ymax,$ymin) = (max(@px_x),min(@px_x),max(@px_y),min(@px_y));
  17. my $xw = $xmax-$xmin + 2;
  18. my $yh = $ymax-$ymin + 2;
  19. $xmin -= 1;
  20. $ymin -= 1;
  21. $image->Crop(width=>$xw,height=>$yh,x=>$xmin,y=>$ymin);
  22. #$image->Magnify;
  23. my $out = './flag/II-'.$num.'.bmp';
  24. exit;
复制代码
? ?
??4.存入到 图片库里
  1. use Imager;
  2. use Image::Seek qw(loaddb add_image query_id savedb);
  3. loaddb("imgdata.db");
  4. ? ? ? ? my $img = Imager->new();
  5. ? ? ? ? my $file = './flag/II-'.$num.'.bmp';?
  6. ? ? ? ? $img->open(file => $file);
  7. ? ? ? ? add_image($img,$num);
  8. ? ? ? ? savedb("imgdata.db");
  9. ? ? ? ??
  10. ? ? ? ? $img = undef;
  11. }

二 随即认证码 图片识别
??1.随机图片下载加工
  1. use LWP::Simple;
  2. my $url = '****';??# 为了不惹麻烦 把测试网站删除了
  3. my $file = './cut/tmp.bmp';
  4. getstore($url,$file);
  5. for my $num (0..3){
  6. ? ? ? ? my $image = new Image::Magick;
  7. ? ? ? ? my ($w,$h,) = $image->Get('width',serif; font-size:12px; line-height:1.8em"> ? ? ? ? $w /= 4;
  8. ? ? ? ? my $xxx = $w * $num;
  9. ? ? ? ? $image->Quantize(colorspace=>'gray');
  10. ? ? ? ? $image->Threshold(threshold=>'20300',channel=>'All');
  11. ? ? ? ? $image->Crop(width=>$w,height=>$h,x=>$xxx,y=>0);
  12. ? ? ? ? $image->Write('./cut/t.bmp');
  13. ? ? ? ? $image = undef;
  14. ? ? ? ? my $img = new Image::Magick;
  15. ? ? ? ? $img->Read('./cut/t.bmp');
  16. ? ? ? ? my (@px_x,serif; font-size:12px; line-height:1.8em"> ? ? ? ? for my $x(0..$w){
  17. ? ? ? ? ? ? ? ? for my $y (0..$h){
  18. ? ? ? ? ? ? ? ? ? ? ? ? my $px = $img -> GetPixel(x=>$x,serif; font-size:12px; line-height:1.8em"> ? ? ? ? ? ? ? ? ? ? ? ? if($px == 0){
  19. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? push @px_x,serif; font-size:12px; line-height:1.8em"> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? push @px_y,serif; font-size:12px; line-height:1.8em"> ? ? ? ? ? ? ? ? ? ? ? ? }
  20. ? ? ? ? my ($xmax,serif; font-size:12px; line-height:1.8em"> ? ? ? ? my $xw = $xmax-$xmin + 2;
  21. ? ? ? ? my $yh = $ymax-$ymin + 2;
  22. ? ? ? ? $xmin -= 1;
  23. ? ? ? ? $ymin -= 1;
  24. ? ? ? ? $img->Crop(width=>$xw,serif; font-size:12px; line-height:1.8em"> ? ? ? ? my $out = './cut/'.$num.'.bmp';
  25. ? ? ? ? $img->Write($out);
  26. ? ?2. 识别
    1. ? ??
    2. use Image::Seek qw(loaddb add_image query_id savedb remove_id);
    3. my $img = Imager->new();
    4. my $file = './cut/'.$num.'.bmp';?
    5. $img->open(file => $file);
    6. add_image($img,10);
    7. savedb("imgdata.db");
    8. my @results = query_id(10); # What looks like this photo?
    9. remove_id(10); # Just remove id from database.

    10. ? ? ? ? print $results[1]->[0];
    11. }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读