Killer
2020-07|个人项目
一个通用的高校教务系统自动选课应用源码
项目预览
首页 | 验证码识别 |
---|---|
选课时间 | 选课志愿 |
开始选课 | 选课成功 |
项目亮点
- 一键自动选课,只需填写好选课志愿,在选课开始后会自动匹配并提交心仪课程,让你选课快人一步。
- 余课监控,自动捡漏,如果暂无名额,会自动定期查询是否有新的名额,帮你并第一时间捡漏。
- 自动识别选课验证码,内置验证码识别 tensorflow 模型,准确率高达 90% 以上。
- 强大的课程筛选系统,不仅可以指定课程名称,授课教师,还可以筛选上课时间(支持上午、下午、晚自习或指定时间段),上课地点甚至可以精确到 xx 教学楼的 xx 层楼的 xx 教室。
- 支持设置多个备选志愿,如果目标课程未开课或已满员,则依次尝试剩余备选志愿。
幕后花絮
Killer 是我做过的第一个正式 APP,也是我开始自学前端的起点。
Killer 这个名称是指,它就像是一个选课杀手一样,帮你选到自己心仪的课程。
最初这个项目,只是一个相对简陋的 Python 脚本,只有我自己一个人使用。
后来,我喜欢上一位法语系的小姑娘,就想着做一个能在她手机上安装和使用的 APP,帮她也选上想要的课程,然后便有了这个项目。
当时我在自己的公众号上,也向同学们宣传过 Killer。后来不知道是哪位小可爱,因为自己没选上课,向学校教务处举报了它,我也差点被学校教务处请去“喝茶”……
从那以后,Killer 就对外终止维护了。
有趣的是被人举报后,学校教务处破天荒的在原来的选课流程上添加了验证码。
由于验证码过于变态(字符又是扭曲变形,又是加入各种干扰线和噪点),很多同学好不容易进到选课页面,却因为验证码填错,错过了选课的机会,这也为学校教务处招来了一片骂声。
这个变化对于 Killer 本身而言,也是一个致命的打击:原来的选课脚本完全失效了。
后来,我根据选课验证码的一些特征,找到了对应的 Java 验证码生成库和近似参数,批量生成了 20000 张带标签的验证码,然后训练了一个简易的 CNN 模型。
模型结构 验证码数据集模型训练好之后,我又把模型量化成了,适合在移动端部署的 TensorFlow Lite 格式,实现了在端侧离线识别验证码,最终识别率达到了 90% 以上,远高于人类的平均识别准确率。
后来这段验证码识别技术的研究过程,也被作为选题写进了我的本科毕业论文里,算是一段非常有趣的经历。