# omr-img-corrector **Repository Path**: ch1ny/omr-img-corrector ## Basic Information - **Project Name**: omr-img-corrector - **Description**: 基于投影的OMR卡片图像纠偏设计与实现 - 山东大学 2019 级软件工程毕业设计课题 - **Primary Language**: TypeScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-04-09 - **Last Updated**: 2023-05-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于投影的OMR卡片图像纠偏设计与实现 - 山东大学 2019 级软件工程毕业设计课题 ## 课题描述 光学标记识别OMR(Optical Mark Recognition)是解决信号自动录入的有效方法。利用光学方法将信息录入到计算机并进行识别处理,能极大地提高数据信息的采集速度,便于计算机存储、管理与检索。OMR技术快速简单,识别率高且成本低,广泛应用于各类标准化考试、各类调查问卷的统计、选举结果的统计等,是自动识别领域中应用较多的一种方法。 1. 通过横向和纵向投影实现OMR定位和信息提取。通过搜索投影最大标准差所对应的方向实现角度校正,克服扫描误差引起图像偏斜的问题。图像无偏斜时,各选项纵横方向对齐,投影曲线起伏变化较大;当图像倾斜时选项的交错使投影起伏变化变小。由此,可用投影曲线的标准差为判断依据,确定图像偏转角度。 2. 使图像在角度范围内以微小角度旋转,计算纵向投影的标准差,标准差最大的旋转角度作为最佳纠偏角度。 3. 实验测试:对各种输入试卷图像进行大量测试,分析实验结果,总结失败的原因,并提出改进解决方案。 ## 系统设计 本仓库采用 monorepo 策略,核心代码存放于项目根目录下的 `packages` 文件夹当中。 - **core**: 验证程序,基于 `lib` 完成开发。主要用于对核心算法进行试用和验证。 - **lib**: 核心算法 crate ,基于 `opencv` 提供多种 OMR 纠偏方法。 - **app**: 基于 tauri 和核心算法库开发的桌面级程序。 ## 应用架构 此处主要讨论应用级别的 `app` 的系统架构。 该应用基于 `tauri` 开发,系统交互层面使用 `Rust` 完成,用户界面采用 `React` 技术栈编写。UI 组件使用 Material UI 。 采用多页面架构以适应多窗口应用。各个窗口之间通过 [useLocalStorage](/packages/app/src/hooks/useLocalStorage.ts) 利用 `localStorage` 共享全局状态,降低了各个窗口之间同步基本数据的难度。 rust 部分引入 `lib` 库,使用线程池实现**针对单个图片的加速处理**或是**针对多个图片的同时批量处理**。 核心 `lib` 已实现的纠偏方案有: - 基于投影标准差的方案 - 基于霍夫变换检测图中直线的方案 - 基于快速傅里叶变换找寻图中主导线的方案 ## 如何开发 ### 安装 pnpm 我们使用 `pnpm` 作为我们的包管理器。 #### 使用 `npm` 全局安装 `pnpm` ```bash npm install -g pnpm ``` 或者 ```bash npm install -g @pnpm/exe ``` 如果您的电脑上没有安装 `Node.js` 也可以使用以下脚本安装 `pnpm` 。 使用 PowerShell: ```bash iwr https://get.pnpm.io/install.ps1 -useb | iex ``` 然后您可以使用 [`pnpm env`](https://pnpm.io/cli/env) 命令来安装 Node.js 。 ### 安装 rust 该应用使用 Rust 进行开发,请参照 [Rust官网](https://www.rust-lang.org/learn/get-started) 进行安装。 ### 安装 opencv