zhongxinghong / PKUAutoElective

北大选课网补退选阶段自动选课小工具
MIT License
668 stars 231 forks source link

验证码变为GIF后如何识别 #50

Closed Catalyst0306 closed 3 years ago

Catalyst0306 commented 3 years ago

Check List

Version / Environment

System infomation: [ ] ( Windows10 64bit, MacOS 10.13.6, Ubuntu 18.04.3 amd64, ... ) Python version: [ ] ( run python3 --version ) AutoElective version: [ ] ( run python3 main.py --version )

Config

除了学号/密码外的其他配置

Issue Description

What

遇到的问题

Console Log

必要的终端输出信息

Reproduce

如有必要,提供复现的步骤

Mzhhh commented 3 years ago

这个时候CaptchaRecognizer获得的Image是动态的,可以调用 im.seek(im.n_frames-1) 定位到最后一帧(通常是最完整)进行识别。

但由于之前的识别算法会首先将图片变成黑白,对于新的captcha(可能存在空心字符,或者灰度值小于threshold的字符,从而被转换成白色)可能并不work。

MapleCatalpa commented 3 years ago

这个时候CaptchaRecognizer获得的Image是动态的,可以调用 im.seek(im.n_frames-1) 定位到最后一帧(通常是最完整)进行识别。

但由于之前的识别算法会首先将图片变成黑白,对于新的captcha(可能存在空心字符,或者灰度值小于threshold的字符,从而被转换成白色)可能并不work。

对于后三个字符,可以用相邻两帧之间的差分来提取字符的形状,因为根据试验,每个字符都是在固定的帧出现的:第1字符在第1帧,第2字符在19帧,第3字符在37帧,第4字符在60帧,验证码共计60帧 提取出来字符出现前后的两帧,比较哪些像素发生了变化,然后再降噪,应该可以准确识别后三个字符

但是第一个字符仍然比较困难,但是目前能发现的是它是一个严格纯色的区域,可以考虑提取纯色的区域然后直接比较轮廓,因为虽然有的空心字符有中空,但是轮廓是唯一对应的

zhongxinghong commented 3 years ago

新版本的 CNN 模型 PKUElectiveCaptcha2021Spring