✅源码获取:
🍅--------------------【左上方头像,置顶文章的最上方】联系我们------------------🍅✌网站介绍:✌10年+项目辅导经验、专注于计算机技术领域学生项目实战辅导。
✌服务范围:大数据、机器学习、Java(SpringBoo/SSM)、Python、PHP、Nodejs、爬虫、数据可视化、小程序、安卓app等设计与开发。
随着教育信息化和人工智能技术的不断发展,传统人工阅卷方式在批改效率、结果一致性和学情反馈及时性等方面逐渐暴露出不足。针对这一问题,本文设计并实现了一种基于机器视觉的智慧阅卷系统,以提升试卷处理自动化水平和教学评价分析能力。
系统采用前后端分离的 B/S 架构,后端基于 Flask 与 MySQL 构建业务服务与数据存储,前端基于 React 实现用户交互界面。在固定模板阅卷模式下,系统综合利用 OpenCV 图像预处理、YOLOv8 目标检测和 OMR 识别技术,实现了试卷上传、答题区域检测、题目切图、客观题自动判分以及主观题人工复核等功能。在智能阅卷模式下,系统进一步引入多模态大模型,支持参考答案卷题目信息提取、学生答卷识别以及客观题与填空题的文本核对,并保留主观题人工评分机制。与此同时,系统结合评分结果实现了成绩分布统计、题目正确率分析、知识点掌握度分析和个人错题整理等学情分析功能。
测试结果表明,本文所设计的系统能够完成固定模板阅卷与智能辅助阅卷两类业务流程,具备较好的功能完整性和工程可用性。系统在提高教师阅卷效率、减轻重复劳动、增强结果统计与教学反馈能力等方面具有一定实际价值。研究结果表明,将机器视觉、目标检测、大模型辅助识别与 Web 平台相结合,是构建智慧阅卷系统的一种有效技术路径。
3.1 功能需求分析
智慧阅卷系统的建设目标并不只是实现试卷图像识别,而是面向教师日常教学和考试批改业务,提供从试卷管理、自动处理、人工复核到结果分析的完整业务闭环。结合本课题已实现的系统功能,可以将系统的功能需求概括为用户管理需求、阅卷处理需求和学情分析需求三个方面。
3.1.1 用户管理需求
系统面向的主要使用对象为管理员和教师,因此首先需要具备基础的用户管理能力。用户管理模块应支持用户登录、身份认证、角色区分和账户维护等功能,以保证系统资源和阅卷数据的安全性。
在登录认证方面,系统需要支持用户通过用户名和密码完成身份验证,并在登录成功后获得后续接口访问凭证。由于系统采用前后端分离架构,用户登录后应能够以无状态方式访问后端服务,因此需要令牌式身份认证机制。对于不同角色,系统还应限制其可访问的功能范围。例如,管理员应具备用户新增、删除和权限管理能力,而教师主要使用模板配置、试卷处理、结果评阅和学情分析等功能。
在实际教学应用中,系统还需要支持试卷模板、知识点和用户之间的协同管理。管理员或具备相应权限的用户应能够维护系统基础数据,为后续阅卷和分析流程提供支撑。因此,用户管理需求不仅包括账户本身的维护,也包括围绕身份和权限展开的系统使用边界控制。
3.1.2 阅卷处理需求
阅卷处理是本系统的核心业务,其目标是完成从试卷上传到评分输出的完整流程。根据项目实际实现情况,系统需要同时支持固定模板阅卷模式和大模型辅助阅卷模式。
在固定模板阅卷模式下,系统应支持教师事先创建试卷模板,并配置题号、题型、标准答案、分值和知识点等信息。在此基础上,教师上传学生答题卡图像后,系统应能够自动完成图像预处理、答题区域检测、题目切图和客观题自动判分。对于选择题,系统需要结合 OMR 判分策略识别学生填涂结果,并与标准答案比较生成得分;对于填空题和主观题,系统应支持教师在评阅工作台中查看题目图像、录入分数或修正答案,实现自动处理与人工复核相结合的评阅机制。
在大模型辅助阅卷模式下,系统应支持教师上传参考答案卷,并自动提取题号、题型、答案和分值等信息,形成结构化标准答案。随后,系统还应支持教师上传学生答卷图像,尤其是多页答卷图像,并调用视觉大模型识别学生作答内容。对于客观题和填空题,系统需要完成答案核对;对于主观题,系统应提供人工评阅界面,并可选生成辅助评分建议。该模式强调的是对非固定版式答卷的灵活支持。
此外,阅卷处理模块还应支持试卷状态跟踪、处理结果展示和人工纠错功能。例如,教师需要看到试卷当前处于“已上传”“处理中”“已完成”等状态;系统需要支持查看检测结果图、题目切图和自动判分结果;对于识别错误的客观题,教师应能够手动覆盖修正,以保证最终结果的准确性。
3.1.3 学情分析需求
智慧阅卷系统的价值不仅在于“批改试卷”,更在于“利用批改结果反哺教学”。因此,系统需要具备学情分析能力,对阅卷结果进行进一步统计、汇总和可视化展示。
首先,系统应能够从多个已完成评阅的试卷记录中统计班级整体成绩情况,包括平均分、最高分、最低分、标准差和成绩分布等指标,以便教师快速掌握整体考试效果。其次,系统应能够按照题目维度统计正确率、错误分布和平均得分,帮助教师识别高错误率题目和学生普遍薄弱的内容。再次,系统应支持按照知识点维度对学生掌握情况进行分析,将题目得分与知识点映射关系结合起来,形成知识点掌握度统计结果。
对于单个学生,系统还应具备错题整理能力,能够展示其答错的题目、标准答案和个人得分情况,便于后续开展针对性学习与复习。为了提高分析结果的可读性,系统还应通过图表形式展示分析数据,如柱状图、折线图、饼图或分布图等,使教师能够直观理解班级与个人学习情况。
由此可见,学情分析需求体现了系统由“自动阅卷工具”向“教学决策支持平台”的延伸,是本课题系统功能完整性的关键组成部分。
4.1 系统架构设计
本系统面向教师阅卷、试卷管理和学情分析场景,采用前后端分离的 B/S 架构进行设计。整体上,系统由前端表示层、后端业务层、算法处理层、数据存储层和外部能力层组成。其中,前端负责用户交互与结果展示,后端负责业务编排与接口服务,算法层负责图像处理、目标检测和阅卷识别,数据层负责结构化数据与图像文件存储,外部能力层则为 OMRChecker 与多模态大模型等扩展能力提供支撑。
前端部分采用 React 18 构建单页应用,结合 Ant Design 实现登录、系统选择、试卷管理、模板管理、智能阅卷、知识点管理、学情分析和用户管理等页面。通过 React Router 完成路由组织,通过 Axios 统一调用后端接口,并在页面中展示试卷状态、检测结果、题目切图、评分信息和统计图表。该设计使系统交互流程清晰,便于教师在浏览器中直接完成各项操作。
后端部分采用 Flask 框架构建 RESTful API,按照“路由层 + 服务层 + 核心能力层 + 数据模型层”的思路组织代码。路由层位于 api/routes,主要负责参数接收、权限校验和接口响应;服务层位于 services,负责模板管理、试卷处理、客观题评分、主观题复核、学情分析和智能阅卷等业务编排;核心能力层位于 core,封装数据库连接、安全认证、文件路径管理、图像处理和 OMR 调用等通用能力;数据模型层位于 models/entities.py,用于定义数据库实体及其关系。该分层设计有利于降低模块耦合度,提高系统的可维护性和扩展性。
从处理链路上看,系统包含两种主要工作模式。第一种是固定模板阅卷模式。教师先配置模板和题目信息,再上传学生答题卡图像,系统依次完成图像预处理、YOLO 检测、题目切图、客观题自动判分和人工复核。第二种是智能阅卷模式。教师上传参考答案卷后,系统利用多模态模型提取题目结构与标准答案;随后上传学生答卷,由模型识别学生答案并完成客观题与填空题核对,主观题进入教师人工评阅流程。这种双模式架构既保留了模板化阅卷的稳定性,又增强了系统对灵活试卷场景的适应能力。
在部署结构上,系统支持以 Docker Compose 方式协同启动 MySQL、后端服务、前端服务和可选 OMRChecker 服务。后端负责与数据库及外部模型服务通信,前端通过浏览器访问后端 API,图像文件统一保存在后端数据目录中。整体部署方案简单清晰,便于开发测试和后续推广。
5.2.1 图像预处理与答题区域检测实现
试卷图像的质量直接影响后续识别和评分效果,因此系统首先实现了图像预处理模块。后端在 preprocess_service.py 中通过 preprocess_paper 函数统一调度预处理流程。该函数首先读取试卷记录,校验原始图像路径是否存在,然后将试卷状态更新为 preprocessing,再调用 core/image_utils.py 中的图像处理能力完成增强与校正,并将处理后的图像保存到 data/processed 目录下。预处理完成后,系统将 processed_image_path 写回数据库,同时将试卷状态更新为 preprocessed。
在实现思路上,预处理阶段主要解决拍照上传试卷常见的倾斜、光照不均、噪声干扰和对比度不足等问题。系统通过灰度化、直方图增强、阈值分割和透视校正等方式,使原始答题卡图像更加规范,为目标检测模型提供更稳定的输入。该步骤既提高了检测鲁棒性,也为教师在前端查看处理结果提供了直观依据。
完成预处理后,系统进入答题区域检测阶段。该阶段主要由 detect_service.py 和 models/yolo/infer.py 协同实现。系统调用 infer_image 对预处理后的图像执行 YOLOv8 推理,并得到若干检测框结果。根据 settings.py 中的类别映射关系,模型输出被统一映射为 answer_region、question_block 和 answer_box 三类对象,以适应本项目的试卷场景。
检测结果返回后,系统先按图像坐标对 question_block 进行排序,再结合模板题目顺序为检测框分配题号。随后,系统通过检测框重叠面积,将 answer_box 归属到对应的题块中,从而形成“题号 - 区域框”的结构化对应关系。所有检测结果会持久化到 detection_results 表中,字段包括类别名称、边界框坐标、置信度和题号。同时,系统还会在原图上叠加检测框并生成可视化图片,保存至 data/detections 目录,供前端页面展示和人工核查。
这一实现方式相较于仅使用固定坐标模板切分的方法更灵活,能够在一定程度上适应试卷拍摄角度变化和轻微版面偏移问题,也为后续题目切图和评分过程提供了可靠基础。
5.2.2 客观题自动判分实现
客观题自动判分模块是系统固定模板阅卷模式中的关键实现部分。该模块主要由 objective_score_service.py 和 core/omr_runner.py 完成,其整体思路是先获得题目切图或整张试卷图像,再通过 OMR 策略识别学生作答选项,最后与模板中的标准答案进行比对并生成得分记录。
在业务流程上,系统先通过 paper_service.run_pipeline 完成试卷上传后的整体处理链路,包括预处理、检测、切图和评分调度。题目切图完成后,score_objective 函数会读取当前试卷关联模板下的所有客观题信息,并构建题号与标准答案、分值之间的映射关系。如果模板配置了 omr_template_path,系统优先调用 run_omr_on_sheet,通过 OMRChecker HTTP 服务对整张答题卡进行识别;如果整卷识别未执行成功,或者模板未配置对应 OMR 模板,则系统自动回退到 run_omr_on_crops,即基于单题切图逐题识别。
在本地回退识别方案中,系统采用基于 OpenCV 的像素密度分析方法。detect_choice_answer 函数首先读取单题切图,进行灰度化、直方图均衡化和 Otsu 二值化,然后将选项区域按水平分栏切分,分别统计每个分栏中的暗像素占比。若某一选项区域的填涂密度最高且超过阈值,则判断其为学生所选答案;若密度普遍较低,则视为未作答。对于多选题,系统还提供了 detect_multi_answer 方法,对所有超过阈值的选项进行组合输出。
识别完成后,系统根据题号将学生答案与模板标准答案进行比较。若两者一致,则记为正确并赋予对应题目满分;否则得分为零。评分结果保存到 objective_scores 表中,字段包括识别答案、标准答案、是否正确、得分、是否人工覆盖、复核人和复核时间等。为了适应真实教学场景中自动识别可能存在的误差,系统还实现了人工修正机制。教师可在评阅界面中调用 override_score 接口修改某题识别答案,系统会重新计算正确性和得分,并标记该题为人工覆盖结果。
5.2.3 主观题评阅与大模型辅助实现
对于填空题和主观题,由于学生作答形式较为灵活,完全依赖固定规则进行自动评分难度较大,因此系统采用“自动辅助 + 人工复核”的实现方案。该部分既包含固定模板模式下的人工评阅实现,也包含智能阅卷模式下的大模型辅助能力实现。
在固定模板阅卷模式下,系统在自动处理完成后,会为主观题初始化待评记录,并在评阅页面中展示对应题目切图。教师可逐题查看学生作答内容,并录入分数与评语。相关结果保存到主观题评分实体中,并与客观题成绩共同构成试卷总分。这样做能够保证开放题评分的可控性,同时与客观题自动判分形成互补。
在智能阅卷模式下,系统引入了多模态大模型辅助完成标准答案提取、学生答卷识别和客观题文本核对。该功能的后端实现主要集中在 llm_answer_key_service.py、llm_submission_service.py 和 multimodal_client.py 中。首先,教师上传参考答案卷后,系统调用视觉模型读取图像内容,并要求其以 JSON 格式返回题号、题型、标准答案、分值、页码和题目位置框等结构化信息,生成 LLMExamQuestion 记录。然后,教师上传学生答卷图像,系统支持单页或多页输入,并按页逐一调用模型识别学生答案,再按题号合并识别结果,避免多页试卷中重复题目覆盖错误。
对于客观题与填空题,系统并不简单依赖模型“猜测”结果,而是进一步调用文本核对提示词,对学生答案与标准答案是否等价进行判断,从而生成 is_correct、auto_score 和 review_status 等字段。对于主观题,系统默认状态为待人工评阅,教师需要在评阅页面中查看原始答卷图像并录入最终得分。若启用 AI 建议功能,系统还可基于标准答案、评分要点和学生作答图像生成建议分值、理由和置信度,并保存到 LLMSubjectiveReview 表中,供教师参考。
5.2.4 学情分析模块实现
学情分析模块基于已完成评阅的试卷结果进行进一步统计,是系统教学支持能力的重要体现。该模块后端主要由 analytics_service.py 实现,前端通过分析页面与图表组件完成可视化展示。
在后端实现中,系统主要提供四类分析函数。第一类是 compute_class_stats,用于统计某一模板下所有已完成试卷的平均分、最高分、最低分、标准差、满分值和成绩分布情况。该函数通过遍历试卷的客观题和主观题评分记录计算总分,再按区间划分生成成绩分布数据。第二类是 compute_question_stats,用于统计每道题的正确率、平均得分和错误分布。对于客观题,系统依据 ObjectiveScore 表判断正误;对于主观题,则基于教师评分计算平均得分,并将其折算为相对正确率。第三类是 compute_knowledge_mastery,通过模板题目中配置的知识点字段,将评分结果映射到知识点维度,得到整体掌握率排序。第四类是 get_wrong_questions 和单卷分析函数,用于生成个人错题信息和单份试卷分析结果。
在数据存储方面,系统允许对单份试卷分析结果进行持久化,保存至 analytics_results 表中,其中 stats_json 字段采用 JSON 字符串形式存储统计明细。这样既便于后端统一返回结构化数据,也方便前端按需解析和绘图。
5.3.1 登录与系统选择界面实现
登录界面是用户进入系统的第一入口,其前端实现位于 LoginPage.jsx。页面采用居中卡片式布局,背景设置了带遮罩层的图片,整体视觉风格较为简洁。表单包含用户名与密码输入框,并分别使用图标增强识别性。用户点击登录按钮后,前端调用 login 接口,将用户输入提交给后端;登录成功后,前端通过 useAuth 中的 signIn 方法保存令牌与用户信息,并根据路由状态跳转到系统选择页。
系统选择界面位于 SystemSelectPage.jsx,主要用于区分“固定模板识别”和“智能阅卷”两种业务模式。页面采用双卡片布局,分别展示两套处理流程的适用场景、入口路径和功能特点。固定模板模式适用于模板化答题卡、YOLO 区域检测与 OMR 自动判分场景;智能阅卷模式适用于参考答案卷与学生答卷图文识别场景。该界面的实现使用户在进入具体业务前就能够明确系统当前支持的两条主流程,有利于减少误操作。
从交互逻辑上看,登录页和系统选择页共同构成了系统的入口层:前者解决身份认证问题,后者解决业务分流问题。这样的设计与本课题“双模式阅卷”的系统结构保持一致。
图5-7 登录界面效果图
图5-8 系统选择界面效果图
5.3.2 阅卷工作台界面实现
阅卷工作台是教师最核心的使用页面之一,固定模板模式下的主要实现位于 PapersPage.jsx 和评阅相关页面中。试卷管理页顶部设置了流程引导区和统计信息区,用于展示试卷总数、待处理数量、已完成数量和模板数量。页面中部通过表格展示所有试卷记录,包括学生姓名、关联模板、处理状态和上传时间等信息。
在试卷上传交互中,系统通过弹窗表单完成模板选择、学生姓名填写和试卷图像上传。上传成功后,试卷记录立即写入列表。对于状态为 uploaded 的试卷,页面提供“开始处理”按钮,教师点击后即可触发后端流水线处理,系统自动完成预处理、检测、切图和客观题判分。对于状态为 done 的试卷,页面提供“去评阅”和“分析”按钮,使教师可以继续进入人工评阅或学情统计流程。对于处理失败的试卷,系统还支持重新处理操作。
在界面细节上,试卷表格支持展开行功能,配合 PaperProcessPanel 展示更多处理细节;状态栏则通过 ProcessStatusBadge 对不同阶段进行颜色区分,使教师能快速识别试卷当前所处环节。整个页面从交互上形成了“上传 - 处理 - 评阅 - 分析”的闭环工作台逻辑,符合教师批改试卷的操作习惯。
智能阅卷模式下的工作台主要位于 LLMExamsPage.jsx。该页面允许教师创建智能阅卷考试、上传参考答案卷、管理学生答卷、触发自动识别以及跳转到智能评阅页。页面还区分了“主观题人工批改”和“主观题 AI 建议”两种模式,使系统在智能辅助程度上具有一定灵活性。
图5-9 试卷管理与处理工作台界面图
5.3.3 分析与可视化界面实现
学情分析界面主要由 AnalyticsPage.jsx 实现。页面顶部采用统一的“页面标题 + 功能说明 + 指标概览”布局,展示模板数量、已处理试卷数量、知识点条目数以及当前模板覆盖知识点数等信息。教师首先需要在筛选区选择一个模板,随后系统并发请求班级成绩统计、题目正确率统计和知识点掌握度统计数据。
在可视化展示部分,系统主要实现了三类图表。第一类是成绩分布图,通过柱状图展示不同分数区间内的学生人数分布,便于教师了解班级整体成绩层次。第二类是题目正确率图,通过柱状图展示各题正确率,并根据数值区间使用不同颜色区分高、中、低正确率题目,突出薄弱题。第三类是知识点掌握度图,按照掌握率升序排列知识点,并通过颜色区分掌握良好、待提升和薄弱知识点,使教师能够快速锁定教学难点。
在实现细节上,页面调用 getClassStats、getQuestionStats 和 getKnowledge 三类接口获取分析数据,再分别传入不同图表组件生成展示结果。图表均基于 ECharts 实现,并根据数据量动态调整标签、网格和高度参数,以保证页面可读性。若当前模板未绑定知识点,页面还会通过提示框提醒教师,这体现了系统在可解释性与使用引导方面的考虑。
通过该页面,教师能够从单纯查看分数,进一步过渡到查看题目质量、知识点掌握情况和整体班级表现,从而体现本课题系统在教学分析方面的完整性。
图5-11 成绩分布可视化界面图
5.4 本章小结
本章结合项目实际代码与页面实现,对系统的主要实现过程进行了说明。首先介绍了系统开发环境与运行方式,说明了前后端分离和 Docker 协同部署的基本实现基础;随后重点分析了图像预处理与答题区域检测、客观题自动判分、主观题评阅与大模型辅助、学情分析等核心模块的实现思路;最后介绍了登录与系统选择、阅卷工作台、分析与可视化等关键界面的实现情况。