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点です。
- answer_sheet.xlsxをカラー印刷して試験を実施
- 150dpiの解像度でカラースキャンした画像をsourceフォルダに保存
- 画像ファイルのファイル名は、no1.jpg、no2.jpgなどのように、学生の番号と紐付いた番号を付ける(rename.pyの利用を推奨)
- correct_answer.xlsxに解答と配点と採点方法を記入(使わない設問の番号は消す)
- scoring.pyを実行($python scoring.py)
- checkフォルダに生成された画像を確認し、うまくいっている事を確認する(失敗した場合は2値化の条件を変えたり、膨張収縮を調整したり)
- scoring_result.csvを確認し、合計を求めるなどの処理を行う
実行時に、スクリプト名の後に着けるオプションがいくつかあります。
- -r: 既に読み取り済みの解答内容と正解を突き合わせて採点します。配点が変わった場合に使ってください。
- -w: ファイル名と画像内の出席番号の両方を読み込んで結果のファイルに保存します。
- --read-student-id: 画像内の出席番号のみを読み込んで結果のファイルに保存します。source内の画像ファイルをソートしていない場合にお使いください。