採点準備作業を大幅に自動化しました!

マークシートや手書き答案のデジタル採点プログラム MS_Reader V3 の採点準備作業のうち、自動化できる部分を全自動化し、実際の採点に入れるまでの時間を短縮しました。

【もくじ】

1.手書き答案を処理する際は、最後の1枚に白紙答案を準備
2.白紙答案を準備した場合の処理の流れ
3.解答欄矩形の検出プログラムも改良
4.まとめ
5.お願いとお断り

1.手書き答案を処理する際は、最後の1枚に白紙答案を準備

新しい MS_Reader V3 ではプログラム起動直後、スプラッシュ画面が表示された後に、次のメッセージが表示されるよう仕様を変更しました。

初めて採点を行う場合、採点専用画像はまだ作成していませんから、上のメッセージに対しては「いいえ」を選択することになります。ここでは「いいえ」が選択されたものとして、操作方法を説明します。続けて、次のメッセージが表示されます。

試験の形式をオプションボタンで選び、OKをクリックしてください。

ここでは「手書き答案のみを利用した試験の採点」を行うこととして説明を続けます。

OK をクリックすると、次のメッセージが表示されます。

最後の1枚は白紙答案をスキャンすることを推奨仕様としました

【最後の1枚を白紙答案とすることを推奨仕様とした理由】

手書き答案を採点する場合、解答欄矩形の検出処理にこれまでは、採点専用画像として用意した画像の先頭1枚目の画像を使用してきましたが、解答欄に解答が記入されていると、どうしても解答欄矩形を誤検出(1つの解答欄を2分割して検出する等)してしまうことがあり、出来れば解答欄矩形の検出作業には、解答の書かれていない白紙の解答用紙を使いたいとずっと考えてきました。

試験実施前に予め白紙の解答用紙をスキャンして解答欄矩形の座標を検出し、座標情報をデータ化して保存しておくことは不可能ではありませんが、それなりに手間がかかり、この採点準備作業を予め行っておくことは、一般ユーザーには難しく感じられるに違いないと考えました。

また、スキャンした画像から採点専用画像を作成する際、画像サイズを縮小した場合は、この縮小率を忘れると、これが意図しない事故の発生原因になってしまうという問題もありました(実際に、作者である自分自身が縮小率を忘れ、困ったことも・・・)。

上記メッセージに対して「はい」を選択した場合、プログラムは採点専用画像作成時に最後の1枚を別フォルダに移動し、これを解答欄矩形の座標取得用答案画像として使用するよう、プログラムを修正。同時に採点専用画像作成作業そのものを全自動化して、採点準備にかかる手間を大幅に削減しました。

【新しく生まれた構造的な問題点】

プログラムを起動して、初めて「解答用紙をスキャンする際、白紙の答案1枚を最後に追加しておく必要がある」ことがわかる点が、構造的な問題として残ったというか、今回、新しく生まれてしまいました。

2.白紙答案を準備した場合の処理の流れ

「はい」をクリックします。

「はい」を選択した場合、次のメッセージが表示されます。今回、採点専用画像の作成を自動化する新機能を追加しました。

スキャンした答案画像を保存した「フォルダ」をクリックして選択します。

「ファイル」ではなく、「フォルダ」を選択します。

画像の回転が必要な場合に、次のようなダイアログが表示されることがあります。
※ プログラム側で回転の必要性の有無を確認できた場合、このダイアログは表示されません。

指定したフォルダ内にある全画像に同じ設定が適用されます。
(解答用紙をスキャンする際、全解答用紙の向きを必ず確認してください)

変換作業が始まると、作業の進行状況は画面下部のプログレスバーに表示されます。変換先のProcDataフォルダ内に変換元と同じ名前のフォルダが作成され、変換元の画像がA3やB4サイズだった場合には、A4サイズ相当に自動的に縮小された画像が、採点用画像として連番のファイル名が付いた状態で保存されます。

無事、採点専用画像が作成されると、プログラムは解答欄矩形の座標を自動的に取得して表示します。出来れば、この部分も全自動化してしまいたい部分なのですが、現在の私の技術では、どうしてもそれが出来ません。次の図に明らかなように、現在採用している矩形検出アルゴリズムは、解答用紙の解答欄だけでなく、解答用紙に印刷された文字に外接する矩形を勝手に作成し、その座標を取得し表示してしまいます。

【検出アルゴリズムの改良前】

▶ ボタンをクリックして、必要な座標のみ解答欄座標側に移します。

ここから先は、これまで通りの使い方になります。

3.解答欄矩形の検出プログラムも改良

・・・と、ここまで来て、上の画像を眺め、あまりにも解答欄矩形の誤検出?が多いことに気がつきました。矩形検出プログラムは、解答欄矩形どころか、本来、というか、元々「枠がない」文字列の外接矩形を自分で勝手に作成し、その座標まで検出しています。

ちなみに枠の検出は、しきい値の決定には「大津の二値化(Otsu 法)」、解答欄群(ブロック)の検出にはモルフォロジー演算(膨張)+輪郭抽出(二値化後に3×3で2回膨張させ、最外周の輪郭だけを取って外接矩形にする。幅150px超などで絞り、解答欄が並ぶブロックを見つける)を用いています。さらにこうして発見した解答欄群(ブロック)毎に、レイアウト判定(解答欄群をを左右の列に振り分け、上下分割・左右連結等を判定)を行い、解答欄矩形を抽出(各ブロック内で再び二値化し、1回だけ膨張。枠の外周・内周を含む全輪郭を取り、条件で絞る)し、後処理(枠線の外周と内周のような位置の近い重複を除外し、Y座標の許容幅20pxで行にまとめ、左から右、上から下へ並べる)を行って、最終的に得られた値を解答欄矩形の座標として表示していましたが、これに以下の処理を追加し、文字列を誤って解答欄矩形として検出してしまわないようにプログラムを改良しました。

【今回追加した「真枠」の発見方法】

  • インク率判定:矩形を枠線の太さ分だけ内側に縮め、内側の黒画素の割合(0.15未満なら解答欄)で解答欄矩形であるかどうかを判定(白紙の解答用紙を用いることが大前提)。
  • 印刷インクのマスク:同じフォルダの複数の答案を二値化し、論理積(AND)で全答案に共通するインクだけを残します。これで手書き文字があっても、その部分を除外して判定できます。
  • 位置合わせ:画像の行・列方向の黒画素量の分布(射影プロファイル)の相互相関で、答案間の平行移動を推定します(±20px)。さらに膨張でわずかなずれを吸収します。

【検出アルゴリズムの改良後】

誤検出しなくなりました!

4.まとめ

これまで手動で採点用画像を準備していたことを思うと、今回の自動化処理の搭載で、必要な工数が相当数削減され、ユーザー体験の向上が図れたのではないか? と思います。ScanDataフォルダ内の任意の名称を付けたフォルダ内にスキャンした解答用紙の画像を保存して、採点用画像の自動作成機能を利用すれば、データの保存場所の知識等は一切不要で、最も重要な「デジタル採点」作業そのものに専念できます。作者である私が動作確認を行った範囲では、意図した通りに動作し、不具合は発見できませんでした。万一、バグがありましたら発見次第修正して、このブログで報告し、修正版をアップロードします。

採点専用画像の自動作成機能を追加した MS_Reader V3 Ver,3.1.0 は次のリンク先記事にあるダウンロードリンクからダウンロードできます。

5.お願いとお断り

このサイトの内容を利用される場合は、自己責任でお願いします。記載した内容を利用した結果、利用者および第三者に損害が発生したとしても、このサイトの管理者は一切責任を負えません。予め、ご了承ください。