记录一次Windows系统下的Python验证码识别

一、环境配置

用到了 pillow 、pytesseract 、cv2这三个库

pip install pillow
pip install pytesseract
pip install cv2

Tesseract-OCR(optical character recognition,光学字符识别)开源库,可将包含文本的图像识别为计算机文字(计算机黑白点阵)。

下载地址
GitHub - tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository)

Tesseract-OCR 安装成功后,需要修改pytesseract 库的配置:

在python安装目录下找到\Lib\site-packages\pytesseractpy\tesseract.py,编辑tesseract.py文件,搜索 tesseract_cmd,将它的值修改为Tesseract-OCR 的安装路径并保存。

二、验证码识别Demo

    # 总体思路: 做色彩漂移将内容在色彩层面平滑滤波过滤噪点 将处理好的图片交给图像识别函数进行识别

    # 线性滤波算法: 均值滤波 中值滤波 高斯滤波
    # 用掩模扫描图像中的每一个像素,用邻域内像素的加权平均灰度值去替代模板中心像素点的值

    # 利用均值漂移算法特性中和色彩分布相近的颜色,侵蚀面积较小的颜色区域
    # sp 用来定义漂移物理空间半径大小
    # sr 用来定义漂移色彩空间半径大小
    dst = cv.pyrMeanShiftFiltering(image, sp=10, sr=150)
    cv.imshow('reduce-the-noise', dst)
    dst = cv.pyrMeanShiftFiltering(dst, sp=10, sr=150)
    cv.imshow('reduce1', dst)
    # 色彩空间转换将图片转为灰度图
    gray = cv.cvtColor(dst, cv.COLOR_BGR2GRAY)
    cv.imshow('gray-level-image', gray)
    # 二值化 将图片处理为只有黑白两色的图片,目的为去干扰线
    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
    cv.imshow('binary', binary)
    # erode = cv.erode(binary, None, iterations=2)
    # cv.imshow('erode', erode)
    # 腐蚀函数 用于去除白噪声
    # 所以除白色的边缘区域都会变成黑色 达到边界腐蚀效果
    erode = cv.erode(binary, None, iterations=2)
    cv.imshow('erode-2', erode)
    # 膨胀函数 作用在于放大图像内容
    # dilate = cv.dilate(erode, None, iterations=1)
    # cv.imshow('dilate', dilate)
    # 用于结构特征提取 图像二进制进行取反操作
    # cv.bitwise_not(binary, binary)
    # cv.imshow('binary-image', binary)

    test_message = Image.fromarray(dst)
    text = pytesseract.image_to_string(test_message)
    print(f'识别结果:{text}')

运行效果:

记录一次Windows系统下的Python验证码识别_第1张图片

 

你可能感兴趣的:(python)