
用于将纸质试卷/手写答题卡图片进行结构化识别,并在提供“标准答案/评分参考”的前提下,自动完成题目级别的对错判定、得分统计、错题汇总与结果导出。
作者:磁县教师发展中心 郑重
工作室:邯郸市信息技术马建辉名师工作室
net9.0-windows)dotnet 命令行)Endpoint + API Key + ModelId)依赖包见 手写答题卡识别.csproj(例如:Microsoft.SemanticKernel、Microsoft.Data.Sqlite、NTwain、DevExpress.Win.Spreadsheet)。
手写答题卡识别.sln在 CardGraderAI 目录下执行:
dotnet restore .\手写答题卡识别.csproj dotnet run --project .\手写答题卡识别.csproj
API Key:你的模型服务密钥(界面中会以 * 显示)Model ID:例如 gpt-4o(或你服务端支持的模型名)Endpoint:OpenAI 兼容服务的基地址,例如:
https://api.openai.com/v1http://127.0.0.1:11434/v1(示例)MaxTokens:每次请求允许的最大输出 token模型配置支持“保存为配置模板”,便于在多个 Key/模型之间切换。
系统提示词用于约束 AI 的输出结构与评分规则。程序内置了一份默认提示词,也支持维护多份“提示词库”。
用于单图快速验证识别与批改效果:
点击扫描后,会通过 TWAIN 设备采集图片,并保存到:
ScannedImages\yyyy-MM-dd\TwainScan_yyyyMMddHHmmss.jpg扫描得到的图片可加入“批量列表”。

ExamResults\yyyy-MM-dd_HHmmss\{学生姓名}.txt 与 {学生姓名}-json.json(无姓名时用序号)StudentKnowledgeBase\{学生姓名}\{科目}.txtStudentData.db(在程序运行目录)
程序会在运行目录自动读写 appSettings.json,用于保存:
ApiKey/ModelId/Endpoint)说明:appSettings.json 中包含密钥信息,建议不要上传到公开仓库。
appSettings.json:运行配置(包含密钥)StudentData.db:SQLite 数据库(考试记录与题目明细)ExamResults\...:每次批量处理的批次输出(txt/json)StudentKnowledgeBase\...:按学生沉淀的长期档案ScannedImages\...:扫描仪采集图片为了确保系统的长期稳定运行与功能迭代,制定以下版本维护方案:
Major.Minor.Patch (主版本.次版本.修订号)。
<Version> 标签同步修改,程序会自动读取并显示在“关于”页面。README.md 的“版本更新”章节。appSettings.json 结构变更,需在程序启动时增加旧配置的自动兼容与迁移逻辑。StudentData.db 表结构变更,需使用 SQLite 迁移脚本或在 DatabaseService 中实现自动升表逻辑。.zip 包解压覆盖的轻量化更新方案。本项目属于教学与教研用途的工具实践。AI 结果可能存在误判,请在正式使用中保留人工复核环节,尤其是主观题与复杂题型。