python 利用 tesseract 识别图片验证码

一、配置环境

1、下载:

a.文件包:tesserocr-2.4.0-cp37-cp37m-win_amd64
链接:https://pan.baidu.com/s/17jeqbiOojLGjqMTg99CPCw
提取码:88fa

b.文件包:tesseract-ocr-w64-setup-v5.0.0.20190623
链接:https://pan.baidu.com/s/117O4nhljitpSbEwXc8bQ-g
提取码:01jv

2、配置环境:
a包放在Python下:
python 利用 tesseract 识别图片验证码_第1张图片
b包解压到某个路径内,但是,路径要记住:
安装的话,可以去百度下,这里安装不做过多说明;
配置b包变量:
1.添加路径进入
python 利用 tesseract 识别图片验证码_第2张图片

2.找到 tesseract 的 tessdata文件,复制粘贴到Python的文件内
python 利用 tesseract 识别图片验证码_第3张图片

3.打开Python内的tessdata文件,然后复制这个文件夹的路径:

配置变量:
a.新建变量名:TESSDATA_PREFIX
b.把tessdata文件的路径放入即可
python 利用 tesseract 识别图片验证码_第4张图片
4. 打开终端:
进入Python文件下,输入命令:pip install tesserocr-2.4.0-cp37-cp37m-win_amd64.whl

大概配置就是这些,若出现其他问题,百度吧…
下面是我写好后的代码…还有待改进!!!

截取的图片
python 利用 tesseract 识别图片验证码_第5张图片

python 利用 tesseract 识别图片验证码_第6张图片

from PIL import Image  # 用于打开图片和对图片处理
from selenium import webdriver  # 用于打开网站
import time  # 代码运行停顿
import os  # 用于操作文件
import tesserocr  # 用于识别图片上的验证码


class VerificationCode:

    def __init__(self):

        # 指定默认打开网站的浏览器
        self.driver = webdriver.Chrome()
        # 变量定位方法
        self.find_element = self.driver.find_element_by_xpath

    def get_pictures(self):

        # 指定需要删除的文件路径
        path = 'C:/Users/Administrator/Desktop/png/0001.png'
        '''# 删除之前截取的图片'''
        for root, dirs, files in os.walk(path):
            for name in files:
                '''# 填写规则(指定删除信息的格式)'''
                if name.endswith("0001.png"):
                    os.remove(os.path.join(root, name))
                    print("Delete File: " + os.path.join(root, name))
        ''' # 打开登陆页面'''
        self.driver.get('填入你需要打开的http请求')
        '''# 全屏截图'''
        self.driver.save_screenshot('pictures.png')
        page_snap_obj = Image.open('pictures.png')
        ''' # 定位验证码元素位置'''
        img = self.find_element('//*[@id="app"]/div/div[2]/form/div[3]/div[2]/div/span/div[1]/img')
        time.sleep(1)
        location = img.location
        '''# 获取验证码的大小参数'''
        size = img.size
        left = location['x']
        top = location['y']
        right = left + size['width']
        bottom = top + size['height']
        '''# 按照验证码的长宽,切割验证码'''
        image_obj = page_snap_obj.crop((left, top, right, bottom))
        '''# 保存截取的图片到指定的位置'''
        image_obj.save(r'C:/Users/Administrator/Desktop/png/0001.png')
        '''# 处理完验证码后关闭浏览器'''
        self.driver.close()
        '''返回处理后的验证码'''
        return image_obj

    def processing_image(self):
        self.get_pictures()
        ''' # 获取指定路径下图片验证码'''
        image = Image.open("C:/Users/Administrator/Desktop/png/0001.png")
        ''' # 转灰度'''
        image = image.convert("L")
        '''# 该阈值不适合所有验证码,具体阈值请根据验证码情况设置'''
        the_sho = 112
        '''table是设定的一个表,下面的for循环可以理解为一个规则,小于阈值的,就设定为0,大于阈值的,就设定为1'''
        table = []
        '''# 遍历所有像素,大于阈值的为黑色'''
        for i in range(256):
            if i < the_sho:
                table.append(0)
            else:
                table.append(1)
        '''# 对灰度图进行二值化处理,按照table的规则(也就是上面的for循环)'''
        image = image.point(table, "1")
        '''# 对去噪后的图片进行识别'''
        res = tesserocr.image_to_text(image)
        '''#  打印验证码'''
        print(res)


if __name__ == '__main__':
    a = VerificationCode()
    a.processing_image()


解析出验证码:
在这里插入图片描述

你可能感兴趣的:(python,自动化)