mac使用python识别图形验证码功能

  

  

最近在研究验证码相关的操作,所以准备记录下安装以及使用的过程。虽然之前对验证码的破解有所了解的,但是之前都是简单使用之后就不用了,没有记录一个详细的过程,所以后面再用起来也要重新从网上查找资料比较麻烦,所以这里准备对研究过程的关键点做一个记录。

  

首先这篇文章,主要是研究图形验证码,后期会不定时拓展内容。

  

在网上查了很多版本的图形验证码识别,目前看到最多的两个模块是pytesseract和tesserocr,但是因为我这里安装tesserocr的时候各种出的错,所以最终我锁定了使用pytesseract。

  

那么接下来,就记录下安装以及使用过程。这里的系统环境是mac os 10.14 .

  

  

<代码>酿造安装tesserocr

  

因为pytesseract依赖于tesserocr所以首先需要先安装tesserocr这个软件。接下来就是安装python相关的包

  

安装python所需要的包

        pip3安装pytesseract   pip3安装枕头      

安装pytesseract是ocr识别图片上的字,因为验证码的识别难度高低不同,所以在这个过程中需要对图片做一定的处理,这就需要使用处理图片的模块枕头。

  

  

        进口pytesseract   从公益诉讼导入图像   进口操作系统   def binarizing (img,阈值):   ”““传入图像对象进行灰度,二值处理”“   pixdata=https://www.yisu.com/zixun/img.load ()   w h=img.size   #遍历所有像素,大于阈值的为黑色   y的范围(h):   x的范围(w):   如果pixdata (x, y) <阈值:   pixdata (x, y)=0   其他:   pixdata (x, y)=255   返回img   _temp=os.path.dirname (__file__)   file_path=os.path.join (_temp code2.jpg)   打印(file_path file_path)   形象=Image.open (file_path)   形象=image.convert (L)   阈值=157   表=[]   #接下来是二值化处理   #遍历所有像素,大于阈值的为黑色,阈值是阀值   形象=binarizing(图像,阈值)   结果=pytesseract.image_to_string(图片)   打印(结果)      

示例中的图片

  

 mac使用python识别图形验证码功能

  

需要用到的图像知识:

  

对于彩色图像,不管其图像格式是PNG,还是BMP,或者JPG,在公益诉讼中,使模用图像块的open()函数打开后,返回的图像对象的模式都是“RGB”。而对于灰度图像,不管其图像格式是PNG,还是BMP,或者JPG,打开后,其模式为“L”也就是我们说的灰度化的一个操作。除此之外,还有其他的模式,不过我们在处理验证码的时候是将其转为灰度模式,所以就不强调其他的模式了。

  

模式“L”

  

模式“L”为灰色图像,它的每个像素用8个点表示,0表示黑,255表示白,其他数字表示不同的灰度。在公益诉讼中,从模式转“RGB”换为“L”模式是按照下面的公式转换的:

  

<代码> L=R * 299/1000 + G * 587/1000 + B * 114/1000

  

通过灰度化之后的图片变为

  

 mac使用python识别图形验证码功能

  

灰度化我们还要对其进行二值化操作

  

  

二值化故名思议,就是整个图像所有像素只有两个值可以选择,一个是黑(灰度为0),一个是白(灰度为255)。二值化的好处就是将图片上的有用信息和无用信息区分开来,比如二值化之后的验证码图片,验证码像素为黑色,背景和干扰点为白色,这样后面对验证码像素处理的时候就会很方便。对于简单的图形验证码,到这里基本上就够了,但是如果有干扰线,还要进行除干扰线的操作。

  

对应的代码为

        def binarizing (img,阈值):   ”““传入图像对象进行灰度,二值处理”“   pixdata=https://www.yisu.com/zixun/img.load ()   w h=img.size   #遍历所有像素,大于阈值的为黑色   y的范围(h):   x的范围(w):   如果pixdata (x, y) <阈值:   pixdata (x, y)=0 #小于阀值设为0,0是黑色   其他:   pixdata (x, y)=255 0 #大于阀值设为255255是白色   返回img      

此时的图片效果为

  

 mac使用python识别图形验证码功能

  

可以看到图片变得锐化了很多,这个时候再去识别就比较好识别了。

mac使用python识别图形验证码功能