基于Python的自动阅卷系统,支持屏幕截图、大模型OCR识别和自动评分功能。
- 交互式区域选择:可视化界面选择截图区域,一次配置多次使用
- 高精度截图:支持高分辨率截图,确保文字清晰可识别
- 智能命名:自动保存截图,文件名包含时间戳和学生信息
- 图片预处理:自动增强对比度、锐化,优化OCR识别效果
- 多模型支持:支持OpenAI GPT-4 Vision、Claude等主流大模型
- 可配置接口:灵活的API配置,支持自定义模型参数
- 智能预处理:去噪、增强、二值化等图像优化技术
- 高精度识别:基于大模型的文字识别,支持手写和印刷文字
- 多种题型:支持选择题、填空题、简答题、论述题等
- 智能比对:关键词匹配 + 语义相似度双重评分机制
- 部分得分:支持根据相似度给予部分得分
- 详细反馈:提供具体的得分点和扣分原因
- Excel导出:生成标准化的Excel成绩报告
- PDF导出:专业的PDF格式成绩单
- 批量导出:支持批量学生成绩导出
- 历史记录:完整的阅卷历史查询功能
exam-master/
├── src/exam_master/
│ ├── core/ # 核心模块(模型、配置、工具)
│ ├── gui/ # GUI界面模块
│ ├── ocr/ # OCR识别模块
│ ├── grading/ # 评分引擎模块
│ └── export/ # 报告导出模块
├── screenshots/ # 截图保存目录
├── exports/ # 导出文件目录
├── logs/ # 日志文件目录
└── config.json # 配置文件
- Python 3.13+
- uv 包管理器
# 使用uv安装依赖
uv pip install -e .创建 .env 文件并添加API密钥:
LLM_API_KEY=your_api_key_here
# 运行GUI应用
python main.py
# 或使用命令行
exam-master- 启动应用后,点击"工具" → "配置截图区域"
- 拖拽选择答题卡区域,松开鼠标确认
- 区域配置会自动保存,后续无需重复配置
- 在"学生信息"区域填写学号、姓名、班级
- 点击"设置学生"按钮确认
- 截图文件会自动以"学号_姓名_时间戳"格式命名
- 点击"添加题目"按钮创建新题目
- 设置题目ID、题型、分值、标准答案
- 支持选择题、填空题、简答题、论述题
- 截图:点击"截图"按钮获取答题卡
- OCR识别:点击"OCR识别"提取文字
- 自动评分:点击"自动评分"进行评分
- 导出报告:点击"导出报告"保存结果
- 选择题:完全匹配标准答案
- 填空题:基于相似度阈值,支持部分得分
- 简答题:关键词匹配(60%) + 语义相似度(40%)
- 论述题:更注重关键词匹配(70%),标准相对宽松
{
"screenshot": {
"save_dir": "screenshots",
"image_format": "PNG",
"quality": 95,
"auto_naming": true
}
}{
"llm": {
"provider": "openai",
"api_key": "your_api_key",
"model_name": "gpt-4-vision-preview",
"max_tokens": 1000,
"temperature": 0.1,
"timeout": 30
}
}{
"grading": {
"similarity_threshold": 0.8,
"keyword_matching_weight": 0.6,
"semantic_similarity_weight": 0.4,
"enable_partial_credit": true
}
}from exam_master.ocr import OCRProcessor
processor = OCRProcessor()
result = processor.process_image(image_path, custom_prompt="识别数学公式")from exam_master.grading import GradingEngine
from exam_master.core import Question, QuestionType
engine = GradingEngine()
question = Question(
question_id="q1",
question_type=QuestionType.SHORT_ANSWER,
content="什么是人工智能?",
standard_answer="人工智能是模拟人类智能的技术科学",
score=10.0
)
result = engine.grade_question(question, student_answer)from exam_master.export import ReportExporter
from exam_master.core import ExamResult
exporter = ReportExporter()
success = exporter.export(exam_result, "report.xlsx", is_excel=True)- 继承
LLMProvider基类 - 实现
recognize_text方法 - 在
OCRProcessor中注册新提供商
- 继承
QuestionGrader基类 - 实现
grade方法 - 在
GradingEngine中注册新评分器
- 创建新的导出器类
- 实现
export方法 - 在
ReportExporter中集成新格式
- 检查API密钥是否正确
- 确认网络连接正常
- 检查图片质量是否清晰
- 尝试调整图片预处理参数
- 调整相似度阈值配置
- 优化标准答案的表述
- 检查关键词提取是否准确
- 考虑调整权重配置
- 重新配置截图区域
- 检查屏幕分辨率设置
- 确保截图时窗口位置固定
- ✨ 初始版本发布
- 🖥️ 屏幕截图功能
- 🤖 大模型OCR集成
- 📊 自动评分引擎
- 📋 Excel/PDF导出
欢迎提交Issue和Pull Request来改进项目。
git clone https://github.com/your-username/exam-master.git
cd exam-master
uv pip install -e ".[dev]"pytest tests/black src/
isort src/MIT License - 详见 LICENSE 文件