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()