24小时接单的黑客_代码共享:运用Python和Tesseract来辨认图形验证码

作者: admin 分类: 新闻动态 发布时间: 2022-07-01 15:30

 各位在企业中做Web缝隙扫描或许浸透测验的朋友,或许会常常遇到需求对图形验证码进行程序辨认的需求。许多时分验证码分明很简略(关于非互联网企业,或许企业界网中的运用来说特别如此),但由于没有趁手的辨认库,也只能苦哈哈地进行人肉辨认,或许无法地抛弃使命。在这里,我共享一下自己运用Python和开源的tesseract OCR引擎做验证码辨认的经历,并供给相关的源代码和示例供咱们学习。

一、关于图形验证码辨认与tesseractOCR虽然大都图型验证码只要戋戋几个数字或字母,但你或许听说了,在进行机器辨认的过程中,你要搜集样本,对图片去噪、二值化、提取字符、核算特征,乃至还要祭出神经网络去练习数据进行机器学习……还没开干,退堂鼓早打响三遍了。其实我底子不想去研究那么多深邃的理论,只想要寥寥数行Python代码就搞定它,然后把首要精力投入到更重要的浸透测验中去。在这种情况下,tesseract就能帮上大忙了。Tesseract的OCR引擎最早是HP实验室开发的,曾经是 OCR业界最精确的三款辨认引擎之一。2005年该引擎交给了Google,作为开源项目发布在Google Project上了。Tesseract供给独立程序和API两种方式供用户运用。纯白色布景、字符规整无搅扰像素的验证码图片能够直接调用tesseract程序来进行辨认。如要更便利灵敏地在自己的程序中进行辨认,则能够运用tesseract的API。二、Tesseract的编译和装置Tesseract的项目主页(https://github.com/tesseract-ocr/tesseract)上wiki中有具体的编译装置过程,咱们能够参阅,本文中咱们将以3.05.01版别为根底。我的体系环境是RHEL 7.4,64位版别。首先用yum装置各种依靠的图形库,然后用源码装置Leptonica(官方主页http://www.leptonica.com/download.html,版别需求1.74以上),编译装置很简略,解压后,以默许参数顺次履行configure,make,make install指令即可。装置完之后需履行:exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig否则鄙人一步tesseract的configure脚本会报找不到Leptonica。将tesseract的源码解压后进入到源码主目录下顺次履行:./autogen.sh./configure--with-extra-libraries=/usr/local/libmakemake install即可成功装置。依据项目wiki,Data Files节的攻略下载相应的数据文件,由于咱们只辨认英文和数字验证码,所以下载3.04/3.05版别的英语文件eng.traineddata即可,下载后放到/usr/local/share/tessdata目录下。至此,tesseract就装置结束了。三、为Python封装tesseract APItesseract供给的是C++ API(接口界面是TessBaseAPI类),最中心的函数便是TessBaseAPI::TesseractRect这个函数。为了能在Python中便利地运用,我将其封装为Python模块了,具体代码放在github上:https://github.com/penoxcn/Decaptcha。该模块名为decaptcha,源文件包含以下四个文件:setup.py、decaptcha.i、decaptcha.h和depcaptcha.cpp。 将以上文件放在同一个暂时目录下,然后履行以下指令进行编译和装置:python setup.py install装置时需求调用swig指令,所以体系需求先装置swig。假如tesseract不是装置在默许的途径下,请参照setup.py代码自行修正相关的头文件和库文件的途径即可。装置完之后进入Python交互环境试着import一下看是否正常:from decaptcha import Decaptcha假如报错找不到libtesseract,那或许是tesseract的库目录(/usr/local/lib)没有在Python的库搜索目录中。这时分能够将tesseract的库目录添加到体系的/etc/ld.so.conf文件中(加了之后需求履行ldconfig指令以收效);或许每次import decaptcha模块之前,都先履行以下Python代码:import syssys.path.append("/usr/local/lib")四、装置Python PIL库PIL的全称是Python Imaging Library,是一个强壮而易用的图画库。在其主页(http://pythonware.com/products/pil/)下载最新版(截止现在是1.1.7)源代码进行装置。装置之前保证体系已装置了png/jpeg/tiff等图画库。解压缩之后,在主目录下履行python setup.py install即可。运用很简略,下面的代码片段从恣意格局图片文件创立一个Image目标,进行格局转化,取得其巨细和像素数组,只需几行代码:from PIL import Imageimg = Image.open('test.png') # Your image here!  img = img.convert("RGBA") pixdata = img.load() width,height = img.sizeprint 'imgsize: 百分之dx 百分之d' 百分之 (width, height)print'pixel[2,4]:', pixdata[2, 4] #eg,(0xD3,0xD3,0xD3,0xFF)五、实战验证码辨认至此,进行图形验证码辨认的依靠环境都已准备好,咱们能够开干了。辨认的流程简略来说如下:1. 用Image加载图画,转为RGBA格局,然后获取像素数据;2. 将RGBA格局的像素数据转化为0和1的字节串(其实便是二值化处理);3. 调用decaptcha模块进行图画辨认,取得验证码字符串实践的代码也十分简略,请看我项目Decaptcha目录下的decaptcha_test.py文件,要害代码也就十几行。影响代码长短或复杂性的,便是二值化这一步了。其实许多图形验证码比较简略,仔细剖析一下,不难得出二值化的条件。下面以我工作中遇到过的一些验证码为例:有5组,均来自于我公司的不同事务网站。辨认代码请参看我项目目录下decaptcha_demo.py文件,一切的示例验证码放在images目录下。咱们能够用图片编辑器翻开相关的验证码文件调查和剖析像素的规则。第一组aa系列,字符色彩偏白,布景偏黑,所以可试着以像素RGB均值(或总和)大于某个数值为条件进行转化:r+g+b>=480则为1,否则为0。

24小时接单的黑客_代码共享:运用Python和Tesseract来辨认图形验证码

[1] [2]  黑客接单网

更多阅读