Skip to content
This repository has been archived by the owner on Jun 25, 2019. It is now read-only.

zhangboyang/fdu_xk_captcha

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

# fdu_xk_captcha
a simple and fast captcha reader for xk.fudan.edu.cn

==========================================================
***** 注意这个程序只适用于旧版选课系统(现在已经下线) *****
==========================================================


一个用来识别复旦选课系统验证码的程序

主要特点:算法简单,速度快,识别率高,纯 C 语言编写,依赖库少

核心算法:将待识别字符与字符库中字符逐一比对,差异最小者即为答案
识别速度:在批量识别模式下,每秒可以识别 10000 个验证码以上。(在我自己的电脑上)
识别率:在一次登录测试中 50000 个验证码全部识别正确,正确率至少在 99.99% 以上。
依赖库:libjpeg (版本 8d1)

接口说明:
    头文件:
        include/ocr.h
    函数原型:
        int ocr_jpeg(void *buf, int len, char ret[]);
    参数:
        void *buf   指向验证码的 jpeg 数据的指针
        int len     验证码的 jpeg 数据的长度
        char ret[]  存放答案数组
    返回值:
        返回值若大于等于 0 则表示最大字符差异值,若小于 0 则说明出现错误
    注意:
        该函数不会在 ret 末尾处添加字符串结束符 '\0'

示例程序:
    sample/ocr_single   识别单个验证码文件
    sample/ocr_batch    批量识别验证码,用来进行批量识别测试

使用方法:
    1. 确认已经安装 libjpeg 库以及必要的头文件
    2. 支持的命令如下
        make                编译库及样例程序
        make test           测试自带的样例验证码
        make onlinetest     执行在线登录测试
        make clean          清除所有产生的文件

常数优化:
    本程序有专为 64 位平台设计的代码,而且可以使用 SSE4.2 指令集优化,不过需要修改代码来开启
    关于 SSE4.2 指令集: 本程序计算字符间差异使用的是异或并计算结果二进制表示中 1 的个数的方法,
        其中计算二进制表示中 1 的个数可以使用 SSE4.2 中的 POPCNT 指令优化
    具体方法如下:
    1. 修改 src/xk.h 开启所需要的编译选项
    2. 修改 src/Makefile 根据需要修改 CFLAGS 变量 (开启 -mpopcnt 选项,并开启 -O3 优化)
    3. 执行命令 make clean && make

性能测试:
    对于自带的 50000 个样例验证码,在我自己的电脑上测试结果如下: (总时间 / 平均每个验证码时间)
    默认编译选项(只开启 -O2 编译优化): 4.31s / 0.086ms
    只开启 -O3 编译优化: 3.75s / 0.075ms
    开启 -O3 编译优化,开启 64 位优化,使用 SSE4.2 指令集: 2.31s / 0.046ms

About

[DISCONTINUED] a simple and fast captcha reader for xk.fudan.edu.cn

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages