Perl使用Tesseract-OCR实现验证码识别教程_perl

一、Tesseract-OCR 是什么

An OCR Engine that was developed at HP Labs between 1985 and 1995… and now at Google
基于Leptonica(http://leptonica.com/)图形处理库开的开源图形识别引擎。
支持Linux、Windows、Mac平台,
支持.NET、C++、Python、Java等开发语言:https://code.google.com/p/tesseract-ocr/wiki/AddOns
项目地址:https://code.google.com/p/tesseract-ocr/

二、使用方法

下载安装:https://tesseract-ocr.googlecode.com/files/tesseract-ocr-setup-3.02.02.exe
注意安装时的Path目录、数学符号、语言选项,按需选择。
执行:”tesseract yourpic.png res”
图片 yourpic.png 里面的内容会被识别后保存在 res.txt
为了更精确的识别可以去到项目地址上下载相应的各种语言的 language tessdata
例如:
简体中文 https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.chi_sim.tar.gz
繁体中文
下载解压后 chi_sim.traineddata 复制到 Tesseract-OCR\tessdata 即可
执行:
“tesseract yourpic.png eng” 使用 默认eng语言包
“tesseract yourpic.png sim -l chi_sim” 使用 chi_sim语言包
“tesseract yourpic.png tra -l chi_tra” 使用 chi_sim语言包
选择最接近真实数据的,方便以后修正

三、进阶使用 Training

为数不多的training tesseract-ocr中文文档
http://yy-programer.blogspot.tw/2012/08/training-tesseract-ocr-301.html
对于高精度需求的需要研究一下了,日常民用级别,默认识别加后期修正即可。

四、应用实例之吸附代理

针对 http://www.proxyfire.net/ 几个代理列表页的代理吸附

话不多说直接上代码,
pf.bat

复制代码 代码如下:

pf.pl http://www.proxyfire.net/index.php?pageid=eliteproxylist       elite.txt
pf.pl http://www.proxyfire.net/index.php?pageid=anonymousproxylist   anony.txt
pf.pl http://www.proxyfire.net/index.php?pageid=transparentproxylist trans.txt
pf.pl http://www.proxyfire.net/index.php?pageid=socks4proxylist      s4.txt
pf.pl http://www.proxyfire.net/index.php?pageid=socks5proxylist      s5.txt
type *.txt > all.tmp
del *.txt /s/q
ren all.tmp all.txt
@pause

pf.pl

复制代码 代码如下:

use strict;
 
our $url    = $ARGV[0];
our $file   = $ARGV[1];
 
my $res = undef;
my @tmp = undef;
my @pxy = undef;
 
    `wget $url -q -O ___html`;
    open FH, "<___html";
    @tmp = ;
    close FH;
    $res = join('',@tmp);
    undef(@tmp);
    `del ___html /s /q`;
 
@tmp = ( $res =~ /<img alt="" src="([^" border="0">]+)><\/td>(\d+)'http://www.proxyfire.net'.$tmp[$i], 'port'=>$tmp[$i+1]};
    $i = $i + 1;
}
 
for (my $i=0; $i < @pxy; $i++) {     if( length(${$pxy[$i]}{ip})>0 )
    {
        `echo off & wget ${$pxy[$i]}{ip} -q -O ___png`;
        `tesseract ___png ___ -l chi_tra`;
 
        my $txt = undef;  
        open FH,"<___.txt";
        $txt = ;
        close FH;
        if ( length($txt)>11 )
        {
            $txt =~ s/\s+//g;
            $txt =~ s/日/8/g;
            $txt =~ s/昍/88/g;
            $txt =~ s/s0/60/g;
            $txt =~ s/s1/61/g;
            $txt =~ s/s2/62/g;
            $txt =~ s/s3/69/g;
            $txt =~ s/s4/64/g;
            $txt =~ s/s5/65/g;
            $txt =~ s/s7/67/g;
            $txt =~ s/s8/68/g;
            $txt =~ s/s9/69/g;
            $txt =~ s/0s/06/g;
            $txt =~ s/1s/16/g;
            $txt =~ s/2s/26/g;
            $txt =~ s/3s/96/g;
            $txt =~ s/4s/46/g;
            $txt =~ s/5s/56/g;
            $txt =~ s/6s/66/g;
            $txt =~ s/7s/76/g;
            $txt =~ s/8s/86/g;
            $txt =~ s/9s/96/g;
            $txt =~ s/ss/66/g;
            $txt =~ s/\.s/\.6/g;
            ${$pxy[$i]}{ip} = $txt;
 
            my $bak1 = $txt;
            my $bak2 = $txt;
            $bak1 =~ s/13/19/g;
            $bak1 =~ s/\.32\./\.92\./g;
            $bak1 =~ s/\.33\./\.99\./g;
 
            $bak2 =~ s/19/13/g;
            $bak2 =~ s/\.243/\.249/g;
            $bak2 =~ s/203\./209\./g;
 
            open FHX,">>$file";
            print FHX ${$pxy[$i]}{ip}.":".${$pxy[$i]}{port}."\n";
            print FHX $bak1.":".${$pxy[$i]}{port}."\n";
            print FHX $bak2.":".${$pxy[$i]}{port}."\n";
            close FHX;
 
        }
        my $txt = undef;
    }
}
`del ___* /s /q`;
undef($url);
undef($file);
undef($res);
undef(@tmp);
undef(@pxy);

时间: 2024-10-21 08:19:17

Perl使用Tesseract-OCR实现验证码识别教程_perl的相关文章

Perl 哈希Hash用法之入门教程_perl

一.什么是Perl Hash 哈希是一种数据结构,和数组类似,可以将值存放到其中,或者从中取回值.但是,和数组不同的是,其索引不是数字,而是名字.也就是说,索引(这里,我们将它叫key)不是数字而是任意的唯一的字符串. key可以是任意的字符串,你可以使用任何的字符串作为key,但它们是唯一的.另一种思考hash 的方法是,把它看作一堆数据(a barrel of data),每一个数据都有一个相应的标签.可以通过标签访问此标签对应的元素.但其中是没有"第一个"元素的概念的.在数组中,

tesseract ocr 识别身份证号

问题描述 tesseract ocr 识别身份证号 怎么用tesseract ocr识别身份证号呀,识别身份证号的字库需要自己训练吗? 求大神指点给个思路啊!!! 解决方案 tesseract-ocr识别字符 解决方案二: 身份证比较标准,不需要怎么训练就可以用.先对图像二值化,去掉底纹.

Python验证码识别处理实例(转)

一.准备工作与代码实例 1.PIL.pytesser.tesseract (1)安装PIL:下载地址:http://www.pythonware.com/products/pil/(CSDN下载) 下载后是一个exe,直接双击安装,它会自动安装到C:\Python27\Lib\site-packages中去, (2)pytesser:下载地址:http://code.google.com/p/pytesser/,(CSDN下载) 下载解压后直接放C:\Python27\Lib\site-pack

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

       这个HttpClientUtil工具类分享在GitHub上已经半年多的时间了,并且得到了不小的关注,有25颗star,被fork了38次.有了大家的鼓励,工具类一直也在完善中.最近比较忙,两个多月前的修改在今天刚修改测试完成,今天再次分享给大家.        验证码识别这项技术并不是本工具类的功能,而是通过一个开源的api来识别验证码的.这里做了一个简单的封装,主要是用来解决登陆时的验证码的问题.在线验证码识别官网:http://lab.ocrking.com/,github地址

java可以做验证码识别字库吗?

问题描述 java可以做验证码识别字库吗? java可以做验证码识别字库吗?别的语言貌似都有自己的识别,java里面只有ocr,有自己的 识别字库吗,谁知道? 解决方案 你可以用jni或者web service把别的语言的库包装了给java用.当然也可以直接用java的ocr库,不过识别国内的验证码国外的库比较水土不服,需要拿来改造,特别是训练集.

python验证码识别的实例详解_python

其实关于验证码识别涉及很多方面的内容,入手难度大,但是入手后,可拓展性又非常广泛,可玩性极强,成就感也很足,对这感兴趣的朋友们下面跟着小编一起来学习学习吧. 依赖 sudo apt-get install python-imaging sudo apt-get install tesseract-ocr pip install pytesseract 利用google ocr来识别验证码 from PIL import Image import pytesseract image = Image

24色位图,字母图片验证码识别,基于MFC对话框的程序,在线求助,高手帮帮忙

问题描述 24色位图,字母图片验证码识别,基于MFC对话框的程序,在线求助,高手帮帮忙 24色位图(如下图)字母图片验证码识别,基于MFC对话框的程序,在线求助,高手帮帮忙

QQ验证码识别源代码(C#/NET1.1)

验证码|源代码 QQ验证码识别源代码(C#/NET1.1) using System; namespace QQ{/// <summary>/// yzm 的摘要说明./// </summary>public class yzm{public yzm(public System.Drawing.Bitmap pic){this.bp = pic;}/// <summary>/// 将一个int值存入到4个字节的字节数组(从高地址开始转换,最高地址的值以无符号整型参与&q

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

本文源自我之前花了2天时间做的一个简单的车牌识别系统.那个项目,时间太紧,样本也有限,达不到对方要求的95%识别率(主要对于车牌来说,D,0,O,I,1等等太相似了.然后,汉字的识别难度也不小),因此未被对方接受.在此放出,同时描述一下思路及算法. 全文分两部分,第一部分讲车牌识别及普通验证码这一类识别的普通方法,第二部分讲对类似QQ验证码,Gmail验证码这一类变态验证码的识别方法和思路. 一.车牌/验证码识别的普通方法 车牌.验证码识别的普通方法为: (1)将图片灰度化与二值化 (2)去噪,