Skip to content

基于投影的OMR卡片图像纠偏设计与实现 - 山东大学 2019 级软件工程毕业设计课题

Notifications You must be signed in to change notification settings

ch1ny/omr-img-corrector

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于投影的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 利用 localStorage 共享全局状态,降低了各个窗口之间同步基本数据的难度。

rust 部分引入 lib 库,使用线程池实现针对单个图片的加速处理或是针对多个图片的同时批量处理

核心 lib 已实现的纠偏方案有:

  • 基于投影标准差的方案
  • 基于霍夫变换检测图中直线的方案
  • 基于快速傅里叶变换找寻图中主导线的方案

如何开发

安装 pnpm

我们使用 pnpm 作为我们的包管理器。

使用 npm 全局安装 pnpm

npm install -g pnpm

或者

npm install -g @pnpm/exe

如果您的电脑上没有安装 Node.js 也可以使用以下脚本安装 pnpm

使用 PowerShell:

iwr https://get.pnpm.io/install.ps1 -useb | iex

然后您可以使用 pnpm env 命令来安装 Node.js 。

安装 rust

该应用使用 Rust 进行开发,请参照 Rust官网 进行安装。

安装 opencv