基于 OpenCV 和 PyQt5 的答题卡识别桌面应用:对手机拍摄的答题卡做几何校正、气泡定位与答案识别,并支持导入标准答案后自动判分。
| 输入答题卡 | 识别结果 |
|---|---|
![]() |
![]() |
示例素材为空白答题卡,不包含个人姓名或学号信息。
- 手机拍摄、倾斜或透视变形的答题卡自动校正。
- 识别准考证号、科目和选择题答案。
- 导入标准答案后自动判分,按题号显示正确 / 错误 / 漏涂。
- PyQt5 图形界面展示原图、学号区、科目区、答案区域与得分。
- 中间处理图自动保存到
photos/,便于定位预处理与坐标映射问题。
- 预处理:灰度化 → 高斯滤波 → 自适应阈值 → Canny 边缘检测。
- 几何校正:寻找最大四边形轮廓,使用四点透视变换校正拍摄角度。
- 气泡检测:二值化后按轮廓面积和宽高筛选填涂气泡,计算质心。
- 坐标映射:按固定行列网格将质心映射到题号和选项。
- 分区识别:分别处理学号、科目、答案三个区域。
- 判分:导入标准答案,与识别结果比对并计算得分。
pip install -r requirements.txt
python enablement.py界面操作顺序:
- 点击“扫描答题卡”,选择一张答题卡照片。
- 点击“导入标准答案”,选择文本答案文件。
- 点击“检查答案”,查看学号、科目、正确率和逐题结果。
标准答案文件为逐行文本,一行一个选项,例如:
B
D
C
A
.
├── enablement.py # PyQt5 应用入口
├── interface.py # 主窗口与交互逻辑
├── recognition.py # OpenCV 识别与几何校正
├── assets/ # README 示例图
└── requirements.txt
- 当前网格坐标针对示例答题卡模板固定配置;更换版式后需要重新标定
xt1、yt1、yt2、yt3。 - 只识别填涂气泡,不包含手写姓名或手写文字的 OCR。
- 原始测试图片和中间处理图未上传,
photos/与test/已加入.gitignore;使用自己的空白答题卡即可测试。 - 拍照时保持答题卡完整入镜、光线均匀,可提高轮廓检测和填涂识别稳定性。
- Python 3.9+
- OpenCV、NumPy、imutils、PyQt5
测试环境:Windows 11、Python 3.9、OpenCV 4.11。

