Skip to content

マークシートの自動読み取りと採点を行うプログラムです。

Notifications You must be signed in to change notification settings

KatsuhiroMorishita/OMR_by_python

Repository files navigation

OMR_by_python

scoring.pyはマークシートの自動読み取りと採点を行うプログラムです。 標準では50問ですが、あと10問は余裕で増やせるものと思います。 試験で使う前に、何枚か試してからご利用下さい。

動作環境

  • OS:Mac, Windows
  • Python: 3.6.x
  • 主に必要なライブラリ: numpy, OpenCV

標準仕様

  • 解答用紙:A4
  • 解答用紙の設問数:50問
  • 解答用紙のスキャン解像度:150dpi

ファイルとフォルダの説明

  • scoring.py:マークシートの読み込みと採点まで実施するスクリプト
  • marking_parser.py:マークシートのマークを読み取るライブラリ。scoring.pyが利用する。
  • correct_answer.xlsx:解答と配点と採点方法を記載したファイル。scoring.pyの実行には必須
  • answer_sheet.xlsx:解答用紙の雛形。カラーで印刷して、配布すること。回答欄の色は意味があるので変更しないこと。
  • sourceフォルダ:処理したい解答用紙のスキャン画像を入れて下さい
  • checkフォルダ:読み取った画像の2値化画像と元のスキャン画像にマークを読み取った位置を重ね描きした画像を保存する確認用フォルダ
  • rename.py:スキャンした画像に連番を振るスクリプト(必要に応じて利用)
  • correct rate.txt:設問ごとの正解率を保存したファイル
  • superposition answer.csv:全ての解答を設問毎に集計したファイル(誤答バターンが分かる)
  • scoring_result.csv:受験者ごとの採点結果

採点方法

採点にはnormalモードと、full matchモードを用意しています。 normalモードは、正解が1つ以上の場合で、正解が複数の場合は解答がそのいずれかであればその設問は満点とします(例えば、正解は0101で解答が0001の場合は満点です。ここで、マークを付けたものを1としています)。 一方で、full matchモードは正解は1つ以上で同じなのですが、正解と解答の答えが完全に一致していればその設問は満点とします。 例えば、選択肢が4つある場合で2つマークを付ける必要があった場合に1つ間違えたとします(例えば、正解が0101で、解答は1001)。 すると、2箇所が正解と不一致であるため、この設問は満点の半分の点数となります。 4点問題なら2点です。

使い方

  1. answer_sheet.xlsxをカラー印刷して試験を実施
  2. 150dpiの解像度でカラースキャンした画像をsourceフォルダに保存
  3. 画像ファイルのファイル名は、no1.jpg、no2.jpgなどのように、学生の番号と紐付いた番号を付ける(rename.pyの利用を推奨)
  4. correct_answer.xlsxに解答と配点と採点方法を記入(使わない設問の番号は消す)
  5. scoring.pyを実行($python scoring.py)
  6. checkフォルダに生成された画像を確認し、うまくいっている事を確認する(失敗した場合は2値化の条件を変えたり、膨張収縮を調整したり)
  7. scoring_result.csvを確認し、合計を求めるなどの処理を行う

オプション

実行時に、スクリプト名の後に着けるオプションがいくつかあります。

  • -r: 既に読み取り済みの解答内容と正解を突き合わせて採点します。配点が変わった場合に使ってください。
  • -w: ファイル名と画像内の出席番号の両方を読み込んで結果のファイルに保存します。
  • --read-student-id: 画像内の出席番号のみを読み込んで結果のファイルに保存します。source内の画像ファイルをソートしていない場合にお使いください。

About

マークシートの自動読み取りと採点を行うプログラムです。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages