<legend id='g9gfY'><style id='g9gfY'><dir id='g9gfY'><q id='g9gfY'></q></dir></style></legend>

<small id='g9gfY'></small><noframes id='g9gfY'>

<tfoot id='g9gfY'></tfoot>

    <bdo id='g9gfY'></bdo><ul id='g9gfY'></ul>
      <i id='g9gfY'><tr id='g9gfY'><dt id='g9gfY'><q id='g9gfY'><span id='g9gfY'><b id='g9gfY'><form id='g9gfY'><ins id='g9gfY'></ins><ul id='g9gfY'></ul><sub id='g9gfY'></sub></form><legend id='g9gfY'></legend><bdo id='g9gfY'><pre id='g9gfY'><center id='g9gfY'></center></pre></bdo></b><th id='g9gfY'></th></span></q></dt></tr></i><div id='g9gfY'><tfoot id='g9gfY'></tfoot><dl id='g9gfY'><fieldset id='g9gfY'></fieldset></dl></div>

        python通过pillow识别动态验证码的示例代码

        <tfoot id='7z8rL'></tfoot>
          <legend id='7z8rL'><style id='7z8rL'><dir id='7z8rL'><q id='7z8rL'></q></dir></style></legend>

          1. <i id='7z8rL'><tr id='7z8rL'><dt id='7z8rL'><q id='7z8rL'><span id='7z8rL'><b id='7z8rL'><form id='7z8rL'><ins id='7z8rL'></ins><ul id='7z8rL'></ul><sub id='7z8rL'></sub></form><legend id='7z8rL'></legend><bdo id='7z8rL'><pre id='7z8rL'><center id='7z8rL'></center></pre></bdo></b><th id='7z8rL'></th></span></q></dt></tr></i><div id='7z8rL'><tfoot id='7z8rL'></tfoot><dl id='7z8rL'><fieldset id='7z8rL'></fieldset></dl></div>

          2. <small id='7z8rL'></small><noframes id='7z8rL'>

              <tbody id='7z8rL'></tbody>
                <bdo id='7z8rL'></bdo><ul id='7z8rL'></ul>

                1. 当我们在使用Python模拟登录一些网站时,往往会遇到验证码的问题。如果验证码是静态的,比如数字和字母组成的验证码,我们可以直接使用tesseract或者第三方库来识别,但是如果验证码是动态的,比如不断变化的验证码,这就需要使用一些其他的方法来识别。这个时候,我们可以使用Python中的第三方库Pillow来对动态验证码进行识别。

                  Pillow原本是Python标准库中的一个组件:Python Imaging Library(PIL)。但是由于PIL不再开发维护,因此Pillow成为了一个替代库,提供了与PIL库类似的功能,并加入了对Python 3.x版本的支持。

                  下面是使用Pillow识别动态验证码的示例代码攻略:

                  安装Pillow库

                  我们使用pip命令来安装:

                  pip install Pillow
                  

                  打开图片

                  使用Pillow库中的Image模块打开需要识别的验证码图片。可以使用Image.open()函数来实现。

                  from PIL import Image
                  im = Image.open(r'captcha.png')
                  

                  获取每一帧图片

                  对于动态验证码,每一帧都是不同的,我们需要获取每一帧的图片进行处理。可以使用ImageSequence模块来实现。

                  from PIL import ImageSequence
                  for frame in ImageSequence.Iterator(im):
                      frame.show()
                  

                  代码中使用了ImageSequence.Iterator()函数来获取每一帧。frame.show()函数可以暂时显示每一帧的图片,方便我们观察和调试。

                  对每一帧进行识别

                  对于每一帧,我们可以使用第三方库进行识别,这里以pytesseract为例子。安装pytesseract:

                  pip install pytesseract
                  

                  然后,我们可以使用pytesseract提供的image_to_string()函数来识别验证码。需要注意的是,由于每一帧的图片都不同,因此需要利用cv2模块进行图像处理,将图片二值化等操作后再进行识别。

                  这里给出一个使用pytesseract识别第一帧图片的示例代码:

                  import cv2
                  import pytesseract
                  pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
                  
                  for frame in ImageSequence.Iterator(im):
                      img = cv2.cvtColor(np.array(frame), cv2.COLOR_RGB2BGR)
                      gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
                      ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
                      result = pytesseract.image_to_string(thresh, lang='eng', config='--psm 6')
                      print(result)
                      break
                  

                  该代码中,我们使用pytesseract库识别了第一帧图片,并将识别结果打印出来。cv2模块的使用,可以参考这个教程:Python 图像处理 OpenCV 教程。

                  识别正确的验证码

                  对于动态验证码,我们需要识别出正确的验证码才能通过验证。一种常用的方法是对每一帧进行识别,将出现的所有验证码存储到一个list中,然后通过一定的策略来判断正确的验证码。

                  假设我们通过第一帧成功识别出三个验证码:A、B、C。根据观察得知,第二帧和第三帧都包含了B,因此我们可以断言,正确的验证码就是B。

                  下面给出一个代码演示:

                  result_list = []
                  for frame in ImageSequence.Iterator(im):
                      img = cv2.cvtColor(np.array(frame), cv2.COLOR_RGB2BGR)
                      gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
                      ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
                      result = pytesseract.image_to_string(thresh, lang='eng', config='--psm 6')
                      result_list.append(result)
                  
                  # 对result_list中的识别结果进行处理,得到正确的验证码
                  correct_captcha = ""
                  for i in range(len(result_list[0])):
                      if all(j[i] == result_list[0][i] for j in result_list):
                          correct_captcha += result_list[0][i]
                  
                  print("验证码是:", correct_captcha)
                  

                  以上是使用Pillow识别动态验证码的示例攻略,希望对大家有所帮助。

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Python中有三个内置函数eval()、exec()和compile()来执行动态代码。这些函数能够从字符串参数中读取Python代码并在运行时执行该代码。但是,使用这些函数时必须小心,因为它们的不当使用可能会导致安全漏洞。
                  在Python中,下载网络文本数据到本地内存是常见的操作之一。本文将介绍四种常见的下载网络文本数据到本地内存的实现方法,并提供示例说明。
                  来给你详细讲解下Python 二进制字节流数据的读取操作(bytes与bitstring)。
                  Python 3.x 是 Python 2.x 的下一个重大版本,其中有一些值得注意的区别。 Python 3.0中包含了许多不兼容的变化,这意味着在迁移到3.0之前,必须进行代码更改和测试。本文将介绍主要的差异,并给出一些实例来说明不同点。
                  要在终端里显示图片,需要使用一些Python库。其中一种流行的库是Pillow,它有一个子库PIL.Image可以加载和处理图像文件。要在终端中显示图像,可以使用如下的步骤:
                  在Python中,我们可以使用Pillow库来进行图像处理。具体实现两幅图像合成一幅图像的方法如下:
                    <bdo id='5XvgI'></bdo><ul id='5XvgI'></ul>
                    <legend id='5XvgI'><style id='5XvgI'><dir id='5XvgI'><q id='5XvgI'></q></dir></style></legend>
                      • <i id='5XvgI'><tr id='5XvgI'><dt id='5XvgI'><q id='5XvgI'><span id='5XvgI'><b id='5XvgI'><form id='5XvgI'><ins id='5XvgI'></ins><ul id='5XvgI'></ul><sub id='5XvgI'></sub></form><legend id='5XvgI'></legend><bdo id='5XvgI'><pre id='5XvgI'><center id='5XvgI'></center></pre></bdo></b><th id='5XvgI'></th></span></q></dt></tr></i><div id='5XvgI'><tfoot id='5XvgI'></tfoot><dl id='5XvgI'><fieldset id='5XvgI'></fieldset></dl></div>

                          <small id='5XvgI'></small><noframes id='5XvgI'>

                            <tbody id='5XvgI'></tbody>
                          <tfoot id='5XvgI'></tfoot>