【Python小工具】爬虫之使用OpenCV识别数字+字母验证码详解,告别收费

Python小工具系列是一个使用Python实现各种各样有意思的小玩意儿的系列,包括制作个性化的二维化、词云、简单爬虫等,持续更新中,如果你感兴趣就关注一波吧!

一、基本介绍

:这个工具是干嘛的?

:主要是为了识别最基本的数字+字母验证码,之前解决验证码主要依靠各种网站,如超级鹰等

⭕️ 注意:较为复杂的验证码还是需要依赖第三方网站
如有需求,这里推荐一个第三方网站接口的基本使用课程:超级鹰的基本使用

但对于简单的验证码,现在只要使用OpenCV库,就可以很轻松地识别出来,直接告别收费!

二、具体代码

import cv2 as cv
import pytesseract
from PIL import Image
import requests
from lxml import html
etree = html.etree

# 使用opencv进行图像识别来识别 数字+字母验证码,从而实现登陆
def recognize_text(image):
    # 边缘保留滤波  去噪
    blur =cv.pyrMeanShiftFiltering(image, sp=8, sr=60)
    cv.imshow('dst', blur)
    # 灰度图像
    gray = cv.cvtColor(blur, cv.COLOR_BGR2GRAY)
    # 二值化
    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
    print(f'二值化自适应阈值:{ret}')
    cv.imshow('binary', binary)
    # 形态学操作  获取结构元素  开操作
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 2))
    bin1 = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel)
    cv.imshow('bin1', bin1)
    kernel = cv.getStructuringElement(cv.MORPH_OPEN, (2, 3))
    bin2 = cv.morphologyEx(bin1, cv.MORPH_OPEN, kernel)
    cv.imshow('bin2', bin2)
    # 逻辑运算  让背景为白色  字体为黑  便于识别
    cv.bitwise_not(bin2, bin2)
    cv.imshow('binary-image', bin2)
    # 识别
    test_message = Image.fromarray(bin2)
    text = pytesseract.image_to_string(test_message)
    print(f'识别结果:{text}')
    print(text.strip())  # 使用strip()函数去掉末尾残留的奇怪字符

src = cv.imread(r'../images/verification2.jpg')
cv.imshow('input image', src)
recognize_text(src)
# cv.waitKey(0) #这一行的意思是等待输入
cv.destroyAllWindows()

三、注意事项

  1. 此处引入cv2的库,需要先提前安装,注意安装时搜索不要直接搜索cv2,而是要搜索 opencv-python 然后引入就正常了。如下:【Python小工具】爬虫之使用OpenCV识别数字+字母验证码详解,告别收费_第1张图片
  2. 注意读取的图片路径不要包含中文,否则读取图片会失败~
  3. 如果只在pycharm中导入pytesseract,会报错系统找不到指定文件,还要另外安装一个库,详细可见链接:安装了 pytesseract 后依然报错怎么解决
    【Python小工具】爬虫之使用OpenCV识别数字+字母验证码详解,告别收费_第2张图片
    【Python小工具】爬虫之使用OpenCV识别数字+字母验证码详解,告别收费_第3张图片
    ⭕️ 最后补充一个关于Python文件路径的知识点(以Windows系统为例):
    【Python小工具】爬虫之使用OpenCV识别数字+字母验证码详解,告别收费_第4张图片
    这里在字符串前面加 小 r 或 大 R 的意思是 表示字符串中的特殊字符如 ‘/’不用转义,否则就要使用斜杠 ’ / '或者双反斜杠 ’ \ ’ 表示具体文件路径,如下所示:
    【Python小工具】爬虫之使用OpenCV识别数字+字母验证码详解,告别收费_第5张图片
    图中
    ①:使用反斜杠 \ 转义第二个反斜杠 \ ,从而成功识别文件路径
    ②:使用 r 表示其后面的字符串不是转义字符,从而保持原路径
    ③:使用斜杠来分隔路径也能成功识别

你可能感兴趣的:(小项目,opencv,python,爬虫)