マークシート作成」カテゴリーアーカイブ

MS_Reader V3 の使い方(マークシートリーダー編)

この Blog で先にご紹介した完全無料でお使いいただける、「手書き答案のデジタル採点機能付き」マークシートリーダー MS_Reader V3 の使い方のご案内です。

MS_Reader V3 の付属の機能を利用した、手書き答案のデジタル採点の実施方法は、当 Blog の次の記事をご参照ください。

MS_Reader V3 の付属の機能を利用した、マークシートと手書き答案の併用型デジタル採点の実施方法は、当 Blog の次の記事をご参照ください。

【もくじ】

1.マークシートの準備
2.マークシートの印刷
3.マークシート読み取り前の確認
4.マークシートをスキャナーでJpeg画像化
5.スキャンしたマークシート画像の保存先
6.マークシート読み取りと採点のための準備
7.処理に必要なメモリー容量の確認
8.採点対象の読取専用画像が入ったフォルダを選択
9.特徴点の検出
10.マークシート情報の設定
11.マークシート設定の複写
12.マーク読み取りの実行と確認
13.音声読み上げ
14.正解・配点・観点別評価の区分の入力と保存
15.成績一覧表、正答率一覧表の作成と印刷
16.採点結果通知シートの作成と印刷
17.まとめ
18.お願いとお断り

1.マークシートの準備

試験で使用するマークシートを準備します。MS_Reader V3 で使用するマークシートには特徴点が必要です。マークシートの左上隅の任意の位置に ■■■(ドットを3つ)ご用意ください。

プログラム自体は、特徴点がなくても、スキャンした画像の左上を座標原点 (0, 0) として動作するように組んでありますが、動作テスト時に一部データの読み込みに問題が発生することがありました。ですので、誤動作を極力防止するためにも特徴点は必ずご用意いただけますよう、お願い申し上げます。

【ご注意願います】

特徴点をご用意いただいた場合でも、MS_Reader V3 が常に意図した通り、完全に動作することは保証できません。MS_Reader V3 を使用される方の完全自己責任の下、十分な動作テストを行っていただいた上で、マークシートの読み込み性能に納得していただける場合のみ、MS_Reader V3 はお使いいただけます。悪しからず、ご了承ください。

上図のような位置に、上図のような大きさで ■■■ をご用意ください。

MS_Reader V3 に同梱した Mark Sheet Maker をご使用いただければ、上図のようなマークシートをどなたでも簡単に作成できる(?)と思います。(もし、難しかったらごめんなさい)

< 戻る >

2.マークシートの印刷

マークシートの印刷には、輪転機ではなく、必ずインクジェットプリンターを使用してください。

高性能化が進む輪転機ですが、マークがどうしても濃く印刷されてしまい、マーク読み取りの際に問題が発生することがあります。タイトル及び特徴点以外の、マーク・罫線部分の印刷の濃さは、「実際の運用でご使用になるスキャナーで読み取ったマークシート画像のマーク内の数字がモニター画面上で読み取れ、かつ、その画像を実際にご使用になるプリンタで印刷した場合に、マーク内の数字が何であるか、ある程度判別可能な濃さ」としてください。

※ 上記マークシートメーカーの記事に、印刷濃度とスキャンした画像の比較サンプルがあります。

< 戻る >

3.マークシート読み取り前の確認

スキャナーでマークシートを読み取る前に、次の事項について確認し、必要な作業を行ってください。

(1)欠席者の位置に白紙のマークシートを挿入

(2)マークシートに付着した消しゴムの屑を除去

塵も積もれば・・・ナントカで、消しゴムの屑が付いたままのマークシートをスキャナーで何百枚も処理すると、スキャナーの光学読取装置部分が大変なコトになります。ですので、マークシートに付着した消しゴムの屑は出来る限り除去してからスキャン作業を行ってください。

(3)マークシートが出席番号番号「昇順」に並んでいることを確認

マークシートが出席番号(もしくは受験番号)の昇順(=スキャナーで読み込む順)に並んでいることを最低2回は確認してください。また、その際、上下の逆転がないことも入念にご確認ください。

< 戻る >

4.マークシートをスキャナーでJpeg画像化

マークシートは解像度 200 dpi、カラー、Jpeg 画像を指定してスキャンしてください。

必要以上に解像度を高くしても良いことは1つもありません。200 dpi で十分な精度が得られます。また、必ずカラー画像としてスキャンしてください(スキャナー側では二値化処理しないでください)。

一般的に使用されている複合機のスキャナーでスキャンした PDF ファイルは、Jpeg 画像のコンテナのような形式で作成されていることが多いと聞き、MS_Reader V3 には、そのような PDF ファイルであった場合、Jpeg 画像を抽出する機能も搭載しましたが、様々なスキャナーで作成されたPDF ファイルを入手し、必要十分な動作テストを行うことは私の環境では不可能でありますので、この PDF ファイルから Jpeg 画像を抽出しての処理は、その可否をご確認の上、可の場合でも必要十分な動作テストを実施後にご利用ください。

なお、筆者の職場にあります E 社製複合機のスキャナーで解像度 200 dpi、カラー、PDF を指定して読み込んだデータを用いた動作検証を行い、プログラムが意図した通りに動作することを確認しましたことを申し添えます。

< 戻る >

5.スキャンしたマークシート画像の保存先

スキャンした画像は、MS_Reader_V3.exe と同じフォルダにある ScanData フォルダ内に任意の名称のフォルダを作成し、そこへ保存してください。各 Jpeg 画像ファイルの名称は、この後の読み取り処理専用画像作成の際に一括して変更しますので、どのような名称でもかまいませんが、ファイルの並びが出席番号(=受験番号)順となるような名称である必要があります。

Jpeg 画像を保存するフォルダの名称は、実際には「年度・考査名・教科科目名・クラス名」を組み合わせて作成すると良いと思います。

例:R8_考査①_物理基礎_2A

【重要】フォルダ名には「 – 」や「 ー 」を用いないでください。

フォルダ名に「 – 」や「 ー 」が含まれていた場合、読み取り専用画像を保存するフォルダ名は、スキャナーで読み取った画像を保存したフォルダ名中の「 – 」や「 ー 」を自動的に「 _ 」に変換した名称で作成されます(文字列処理の中で「 – 」を分割に利用しているためです)。この点につきましては、どうか十分にご注意願います。

また、スキャナーで読み取った画像を入れるフォルダの配置については、次の例をご参照ください。

< 戻る >

6.マークシート読み取りと採点のための準備

MS_Reader V3 を起動し、マークシート読み取りと採点のための準備を行います。

MS_Reader_V3 フォルダ内にある上のアイコンをダブルクリックして起動します。

ダウンロード直後の初回起動時に、次のような Windows Defender SmartScreen による警告画面が表示されると思います。「詳細情報」をクリックし、次に表示される画面の「実行」をクリックしてプログラムを起動してください。

ダウンロードされたファイルに「 Zone.Identifier 」という「ゾーン識別子」が付加されていると、Windows はこの識別子を見て「インターネット経由で取得されたファイル」と判断し、SmartScreen が警告を表示します。

MS_Reader V3 が起動したら、まず、読み取り専用画像を作成します。次の図に示す「矢印がフォルダ内へ入っている」アイコンをクリックしてください。

?マークをクリックすると操作ガイド PDF が表示されます。

「選択」をクリックして、スキャナーで読み取った Jpeg 画像を保存したフォルダを選択します。

「選択」をクリック
Jpeg 画像を保存した「フォルダ」を選択し、Ok をクリックしてください。

次の図に示すように①→②→③の順で操作してください。

①で、必要があれば回転方向を指定します。
②で、画像のリサイズ指定が可能です(A4のマークシートであれば「なし」か「自動」を指定)
③をクリックすると読取専用画像を保存するフォルダを指定するダイアログが表示されます。

【ご注意】

②でリサイズする際、サイズを指定した場合は必ずその数値をメモしてください。他のクラスも同じ設定で読み取りと採点を行うためには、全クラス同じサイズで画像を変換する必要があります。

ProcData フォルダ内に読取専用画像を保存するフォルダが自動作成されますので、このフォルダをクリックして指定し、その後 Ok をクリックしてください。

「変換実行」をクリックしてください。

「マークシート」と「手書き答案の採点」を併用する場合は「はい」、併用しない場合は「いいえ」をクリックしてください。

確認メッセージが表示された場合は、Ok をクリックしてください。

他のクラスも連続して処理する場合は「画面の初期化」を、読取専用画像の作成作業を終了する場合は「終了」をクリックしてください。

< 戻る >

7.処理に必要なメモリー容量の確認

図の「矢印がフォルダから出ている」アイコンをクリックしてください。

次の案内が表示されます。

上記案内に表示している画像1枚あたりのサイズは、「メモリ上に展開されたOpenCV IplImageの生ピクセルデータサイズ」で計算しています。こちらのメモリ検証を参考に、お使いの PC で快適に作業できる答案枚数をご確認ください。

プログラムは、画像をメモリ上に展開しなくても動作するように作成してありますが、都度画像を読み込んで処理する場合、動作速度(=ユーザー体験)は大変遅くなります。全画像をメモリー上に展開できる作業環境で MS_Reader V3 をお使いいただけますよう、伏してお願い申し上げます。

プログラム作成の流れで言うと、非メモリー展開モードが当初作成した「都度画像を読み込み、採点結果を都度書込みという(流れの)オリジナル」で、それではどうしても動作速度的に満足できないと(新規に手書き答案採点プログラムを書き直した意味がない・旧版の AC_Reader に比較して明らかに良くなっている・進化していることが自分自身の中での絶対的評価基準でした)、このユーザー体験の改善は「やるか・やらないか」の二択ですから「それはやるしかないだろ」ってコトで、もう一度イチから出直して新たに追加したのが「全画像をメモリ上に展開し、読み込みはそこから行い、採点結果は画像に書き込まず JSON ファイルに保存、それが必要な時は JSON ファイルから読み出して画像上に描画する」というメモリー展開モード(=自分的には、新しく採用したアルゴリズム:現実世界では、これが業界標準のようですが・・・)です。

上記の理由から、MS_Reader V3 のプログラムは、状況に応じて2つのモードを使い分けて動作するように出来ています。・・・ 出来ているはずなのですが、メモリー展開モードを追加してからは、ほとんど、この環境でしか動作テストを行っておりませんので、もしかしたら、非メモリー展開モードでの実行時に何らかの予期しない不具合が発生するかもしれません。

ただし、非メモリー展開モードは、私ではない善意の第三者が、高校現場において、定期考査の採点に実際に使用し、致命的な問題がないことをリアル採点現場で確認済みです(この際、判明した問題点はすべて修正・改良しました)。

< 戻る >

8.採点対象の読取専用画像が入ったフォルダを選択

解答用紙のサイズを選択し、受験者数を入力してメモリー展開モードでの作業の可否を確認後、Ok をクリックすると「フォルダーの選択」ダイアログが表示されます。

採点対象の読取専用画像が入ったフォルダを選択

ここではファイルではなく、「フォルダー」を選択することに注意してください。上の例で言えば「 01_MarkSheet 」フォルダをクリックして選択 ⇨ 「フォルダーの選択」ボタンをクリックという流れになります。

案内が表示された場合は、Ok をクリックします。

< 戻る >

9.特徴点を検出

今回の冒頭でお示ししたように、MS_Reader V3 では、マークシートのマークを個別に切り出す際の座標原点として、マークシート(解答用紙)の左上隅に印刷した ■■■ を特徴点として利用します。これがなくても動作するように設計しましたが、マークシートだけでなく、手書き答案の採点プログラムでもこれがあることをあくまでも大前提としておりますので、MS_Reader V3 で処理する解答用紙の左上隅には必ず ■■■ を設置していただけますようお願い申し上げます。

解答用紙は通常ワープロソフトで作成されることが多いと思いますが、10.5~14ポイントくらいの大きさで ■■■ を入力していただければよろしいかと思います。

前作と異なり、MS_Reader V3 では、特徴点を自動認識するよう、アルゴリズムを改善しました。以下、特徴点検出方法です。

画面右上の操作案内の表示(✅Info )がチェックされている場合

■■■ の下に Thresh とある表示の右側の閾値表示用 ComboBox が「空欄」の状態で、その閾値表示用 ComboBox の右にある特徴点自動検出ボタンをクリックしてください。

特徴点検出手続きが実行され、プログラムは画像の左上付近に捜索範囲を限定して ■■■ を探します。プログラムは検出閾値を次々に変え、最も安定して利用できると思われる最適な値を見い出します。最適な値が見つかったら場合、その値付近でさらに数回試行し、安定動作(検出)出来た場合は検出動作を停止して特徴点を赤枠で囲み、ユーザーに確認を求めます。

特徴点検出作業中、画面左下に進捗状況が表示されます。

【特徴点が検出された場合】

「はい」をクリックしてください。
(背景のマークシート画像がぼやけているのは検出手続き中でガウスぼかしを利用しているためです)

【特徴点が検出されなかった場合】

特徴点が検出されなかった場合は、次のメッセージが表示されます。

Ok をクリックしてください。

上記いずれの場合でも次の確認メッセージが表示されます。マークシートのみの採点作業及びマークシートと手書き併用型の採点作業を行う場合は「はい」を、手書き答案の採点作業のみを行う場合は「いいえ」をクリックしてください。

続けて、手書き答案の採点作業を行うかどうかの確認メッセージが表示されます。

適切な方のボタンをクリックしてください。

< 戻る >

10.マークシート情報の設定

特徴点が検出できたら、次にマークシートの情報をイニシャライズファイルに登録します。

各ブロックの 幅と高さは同じ でなければなりません。
また、設問番号部分はブロックに入れません

MS_Reader V3 では、上の図のようにマークシートのマーク欄を群(ブロック)に分け、さらにその群(ブロック)を行と列に分割してマーク単体を切り出し、その部分の濃度を計測してマークの有無を判定しています。前作までのマークシートリーダーでは白黒二値化後の塗り面積計算でマークの有無を判定していましたが、これを濃度を計測しての判定に変更することで、次のような点で判定精度を向上させることが出来たのではないかと考えます(比較実験は行っておりません)。

(1)薄いマークや濃淡のあるマークの検出精度の向上
(2)スキャナーの機種の違いに強くなる(採点現場では統一されていないことの方が多い)
(3)「消え残り」と「真のマーク」を区別しやすくなる
(4)紙の汚れ・印刷のムラに強くなる(マーク領域全体の平均をとることで、局所的なノイズの影響が統計的に薄まる)
(5)パラメータ調整が容易になる(白黒二値化では、閾値を1動かしただけで検出結果が逆転することがあり、感覚的に調整しにくい)

高校における実際の定期試験の採点現場では、スキャン環境も受験者の筆記具も統一されていないのが当然で、白黒二値化から濃度計測への判定アルゴリズムの変更は、判定精度と運用安定性の両面で大きな改善につながったと思います。

まず、群(ブロック)数を入力します。

次のメッセージが表示されます。

自動検出は「おまけ・お遊び」程度にお考えください。

スキャナーで読み込んだ画像の罫線の状態は粗めになっていることが多く、余程良好な状態でないと群(ブロック)ごとの罫線枠の自動検出は成功しないと思われます。

【参考:罫線枠の自動検出に成功した場合】

罫線の状態が良ければ、罫線枠の自動検出に成功します。

ちなみに上の場合のパラメータ設定は「10」です。こちらを先に設定してから左隣の「マーク欄の自動検出」ボタンをクリックしてください。群(ブロック)数設定時の操作ミスを防止する観点から、敢えてコントロールの位置を自動検出ボタンの「右」側にしてあります。

閾値は「10」程度でお試しください。

自動検出に成功した場合は、次のように操作してください。まず、検出できた座標を保存します。

▯1 ボタンをクリックしてください。

2つ目に自動検出された罫線枠が自動的に選択されます。2つ目に検出できた座標を保存します。

▯2 ボタンをクリックしてください。

設定した群(ブロック)数回、同様に操作します。これ以降の設定方法は自動検出機能を利用しなかった場合と同じです。

なお、罫線枠(マーク欄)の自動検出には「適応的二値化」を用いています。これにより紙の折り目跡などによる画像の濃淡の違いに強くなり、より安定して検出できるようにはなっていると思うのですが、私の行った試行では誠に残念ながら上手く検出できることの方が少なかったです(検出精度を数値的に評価するような実験は行っておりません)。・・・ですので、ここでは罫線枠(マーク欄)の自動検出機能は利用せず、手動でマーク欄の情報を設定する方法を説明致します。

罫線枠(マーク欄)の自動検出機能を使用しない場合は「いいえ」をクリックします。

次のメッセージが表示された場合は、よく読んでから Ok をクリック。

マウスのカーソルが大きな「+」になります。範囲の設定は必ず読み取りブロックと表現している罫線枠(マーク欄)の左上から右下へドラッグするかたちで行ってください。まず、+になったカーソルを読み取り範囲の左上位置にポイントします。

ポイントしたらカーソルを動かさずに、そこでクリックして右下方向へドラッグします。画面はマウスの動きに追従して自動的にスクロールするはずです。

実際には、右下隅でぴったり罫線枠に合わせるのは、なかなか難しいと思います。そこで、少し大きく範囲指定して微調整できるようにアルゴリズムを改善しました。

幅・高さともやや大きめに範囲指定したところ。この後、微調整します。

微調整は Shift キーを押したまま、上下左右の矢印キーを押し下げして行います。

上の状態を例に説明すると、

Shift + 左向きの矢印キー押し下げで、幅が左へ小さくなります。
Shift + 上向きの矢印キー押し下げで、高さが上へ小さくなります。

また、MS_Reader V3 では、赤い点線で範囲指定した枠そのものも移動できるようにしました。

上下左右の矢印キーを押し下げすると、1回押し下げにつき1ピクセルずつ、赤い点線で範囲指定した枠そのものが押し下げた矢印キーの方向へ移動します。

1つめの範囲を指定出来たら、その座標を保存します。

▯1 ボタンをクリックしてください。

次に2つ目の読み取り範囲の罫線枠(マーク欄)を指定しますが、ここにも改良を加えました。MS_Reader V3 で使用するマークシートにおいて各マーク欄ブロックの幅と高さは全て同じという大前提ですので、2つ目以降のブロックは特徴点からの距離が変化するのみで、その大きさは変わりません。そこで、1つ目で指定した範囲をそのまま2つ目のブロックへドラッグ&ドロップ出来るようにしました。作業内容は、次のようなイメージです。

選択した範囲の内部をクリックし、そのまま図の矢印方向へドラッグします。
選択範囲を2つ目のブロック位置へ移動します。

マウスはなるべく水平方向へ移動するよう操作してください。上や下方向へマウスを動かすと画面がスクロールしてしまいます。ご注意ください。

ドロップ位置での微調整は、上で説明した通りの方法で行うことができます。

2つ目の罫線枠(マーク欄)の座標を保存します。

▯2 ボタンをクリックしてください。

同じ操作を、ブロックの数だけ繰り返し、すべてのブロックの座標を取得・保存します。

次に1ブロックあたりの行数、1解答欄(=設問)あたりの選択肢数他を指定します。

1ブロックあたりの行数を設定します。
ComboBox の選択肢から適切な値を選択してください。

次に1解答欄(=設問)あたりの選択肢数を指定します。

選択肢数は8
ComboBox の選択肢から適切な値を選択してください。

用紙のサイズと向きも ComboBox の選択肢から選んで指定します。最後の項目は縮小率(%)です。

画像のリサイズが「なし」or「自動」の場合は縮小率は「100」を指定し、任意のサイズを指定した場合は指定したサイズ(%)の数値を指定します。(下の図を参照してください)

次に設問数を設定します。100設問設定可能なマークシートであっても実際に使用しているのが 74 設問分であれば設問数には 74 を設定してください。

設問数を設定

次に選択肢の始まりの番号を指定します(多くの場合、それは「1」だと思いますが、高等学校の教科「情報」のように選択肢の始まりの番号が「0(ゼロ)」である場合があります。ご注意ください)。

選択肢の始まりの番号が1なら1を指定

次に複数マークの扱いを指定します。

【チェックなしの場合】

複数マークがあった場合は「99」と表示します。
(99 は複数マークであることを示すフラグです)

【チェックありの場合】

複数マークがあった場合、そのまま読み取ってカンマ区切りで表示します。

【ご注意ください】

複数マークを許可した場合は、読み取り結果を CSV ファイルに出力して、採点等はこの CSV ファイルを利用した別アプリケーションで行っていただく必要があります。MS_Reader V3 付属の採点システムでは複数マークを許可した場合の採点を想定しておりません。ですので、複数マークを許可した場合の MS_Reader V3 の機能は、マークの読み取り& CSV 出力までとなります。

最後に、マークシート情報が正しく設定されていることを目視して確認します。

目視チェックの実行ボタンをクリックするとマークの切り出し枠が赤い線で描画されます。
画面をスクロールしてマークシート情報が正しく設定されているかどうか、確認してください。

最後に設定内容をイニシャライズファイルに保存します。

「マークシート設定の保存」ボタンをクリックしてください。

< 戻る >

11.マークシート設定の複写

複数クラスに同じマークシート設定を適用する場合は、作成したマークシート設定を複写できます。

複写する必要がなければ「いいえ」をクリックします。

【「はい」を選んだ場合】

例:1A のマークシート設定を 1B, 1C に複写する場合、Ctrl キーを押しながら選択します。

「フォルダの選択」ボタンをクリックすると、既存のマークシート設定が複写先のクラスのフォルダへコピーされます。

既存のファイルがある場合、上書き確認のメッセージが表示されます。

< 戻る >

12.マーク読み取りの実行と読み取り結果の確認

これでマークシートを読み取る準備が出来ました。たくさん準備を行ってきましたが、読み取りはあっけないくらい 走召 高速です。初めて実行した時、機械が壊れているんじゃないかと思ったくらいです。

「①実行」ラジオボタンをチェックし、「②マーク読み取りを実行」ボタンをクリックするだけです。

私の環境では、1設問あたり8選択肢、100 設問、40 Sheet分、すなわち 32000 マークを

1.011 秒で読んでいます。もちろん、読み取りミスはありません。

マークの有無の判定アルゴリズムは3種類用意してあります。

・Area:面積法
・Intensity:濃度法
・Hybrid:上記2つの方法の組合せ

何度も試行して確認しましたが、濃度法一択でよろしいのではないかと思われます。

続いて、読み取り結果の確認です。

例えば 50 設問用のマークシートを使用し、実際の設問数は 46 であった場合、47, 48, 49, 50 は間違えてマークした生徒を除き、受験者全員が空欄になっています。このような空欄は最初からチェックの対象としないように設定できます。また、0を指定すると、そのブロック内のすべての回答欄がチェック対象となります。

第2ブロックは、これ以降の設問をチェックから除外します。

チェックの設定は保存しておき、同じ試験を実施した他のクラスにも適用できます。

チェックを実行すると「空欄:999」と判定したマークと、「複数マーク:99」と判定したマーク位置でチェックが停止します。目視して該当マーク部分の読み取り判定結果をチェックしてください。

【空欄と判定した場合】※ 空欄のフラグは 999

【複数マークありと判定した場合】※ 複数マークのフラグは 99

複数マークを許可した場合は、1, 2 と表示され、チェック対象ではなくなります。

塗りつぶしが薄すぎて空欄判定になっていたり、消したマークの消し方が不十分で複数マークありの判定になっている場合は、読み取り結果を採点者の判断で正しく修正してください。

すべてのマークをチェックしたら、保存ボタンをクリックして、読み取り結果を保存します。

既存のファイルがある場合、上書き確認のメッセージが表示されます。

採点の「確定」を確認するメッセージです。採点結果を確定しないと合計点や採点結果通知シートの作成は行えません。また、採点結果を確定した場合は、次回当該クラスのフォルダを指定して開いた際、採点処理をしなくても合計点他の計算や各種資料の印刷が可能になります。

事故防止の観点から、どんな場合でも、処理は必ず「合計点を計算」⇨「採点結果通知シートの作成・印刷」の順で実行しなければならないように設定してあります。それが MS_Reader V3 の仕様であると御理解いただけますよう、お願い申し上げます。

< 戻る >

13.音声読み上げ

グリッドコントロールの任意の箇所をクリックしてアクティブにした位置から音声による読み取り結果の読み上げが可能です。マークシートの実際のマークと読み取り結果の照合や、入力した正解が正しいかどうか等の確認にご使用ください。読み上げ速度も設定可能です。

< 戻る >

14.正解・配点・観点別評価の区分の入力と保存

採点を実行する前に、採点に必要な情報を入力し、保存します。

「配点」をチェックすると入力が可能になります。

(マークシート用採点情報の入力実行時は)「編集」をチェックしないと値を入力できません(デフォルト設定で「チェックあり」になっています)。

合計点等は自動計算され、表の上に表示されます。

必要なすべての値を入力したら採点に必要な情報を保存します。上の図にある保存ボタンをクリックします(既存のファイルがある場合、上書き確認のメッセージが表示されます)。

【採点情報の複写方法】

マークシートの設定同様、採点情報も同一の試験を行った他のクラスに複写して利用できます。

複数クラスに複写する場合は、Ctrl キーを押しながらフォルダをクリックしてください。

1A の採点情報を 1B, 1C に複写する場合の例です。

< 戻る >

15.成績一覧表、正答率一覧表の作成と印刷

旧版では別プログラムだった成績一覧表の作成を MS_Reader 内できるようにしました。また、併せて旧版では出来なかった正答率一覧表の作成や印刷も可能としました。さらに、旧版と比較した場合、いずれの処理も高速に実行できます。

成績一覧表のサンプルです(成績はデタラメです)。

正答率一覧表のサンプルです(こちらも適当です)。

< 戻る >

16.採点結果通知シートの作成と印刷

受験者に配布する個別採点結果通知シートの作成と印刷が可能です。マークシート画像上に採点結果、配点、観点別評価の区分、正答・正解を描画し、さらに任意の位置に合計点他を描画、採点結果通知シートとして印刷できます。

「調整」をチェックして作業を開始します。

赤い枠内にチェックを入れるとよろしいのではないか?思います。

【印刷プレビューの表示】

印刷プレビュー

【印刷の実行】

○:正答・正解 △:部分点有り ×:誤答・不正解 K1, K2:観点別評価の区分

【合計点表示例】

合計点他は任意の位置に

【採点結果通知シートのサンプル】

不正解であった場合は、正解マークの上に正解の選択肢番号を描画

< 戻る >

17.まとめ

・名称:MS_Reader V3(完全無料のマークシートリーダー)
・超高速読取り:My PC では 約 32000 マーク/秒
・極軽量:本体わずか4MB
・手書き答案のデジタル採点機能付き(横書き&縦書き両形式答案に対応)
・観点別評価に対応
・成績及び正答率一覧表、採点・配点・正解マーク&得点合計&順位付き採点結果通知の作成&印刷
・CSV出力
・音声読み上げ
・答案画像の傾き補正
・マークシート作成ソフトも同梱
・動作保証一切なし、サポートなし、バグあるかも?
・完全自己責任のもとでのみ使用可能です。

< 戻る >

18.お願いとお断り

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

< 戻る >

MS_Reader V3(完全無料のマークシートリーダー・超高速読取り・極軽量本体わずか4MB・手書き答案のデジタル採点機能付き=横書き&縦書き両形式答案に対応・観点別評価対応・成績一覧表、正答率一覧表、採点・配点・正解マーク&得点合計&順位付き返却用答案の作成と印刷・CSV出力・音声読み上げ・答案画像の傾き補正・マークシート作成ソフトも同梱・動作保証一切なし・サポートなし・バグあるかも?・完全自己責任のもとでのみご使用いただけます)

1クラス分のマークシート読み取りに5分を要したバージョン1、Python 用の OpenCV を使用してやや高速化できた反面、容量が激増、WindowsのDLLチェックのため起動が遅く、動作が重かったバージョン2、このままでは死んでも死にきれないと 2025 年秋から Windows 用 OpenCV を利用したバージョン3の制作に着手。世に誰一人その完成を待ってくださる方もいらっしゃいませんが、2026年、春、ついに出来ました☆ 僕の夢のカタチ MS_Reader V3 です。

【もくじ】

1.推奨動作環境
2.サンプル画面
3.プログラムのダウンロード
4.お願いとお断り

1.推奨動作環境

長すぎるタイトルに書けなかったこともご承知おきください。以下、推奨動作環境です。

OS:開発したのは Windows11 25H2 です(Windows11以外では動作検証しておりません)。
CPU:はやければ、はやいほどイイです!
GPU:深層学習とか、興味ありますし、したいけど、出来ません!!!・・・ので不要です。
搭載メモリ:16GB以上を推奨(8GBの場合、B4サイズ以上の答案100枚対応が困難な見込み)
画面解像度:1366×768を推奨(アイコンが小さいので超高解像度のディスプレイには不向きです)
マウス:必須です。画面をタッチして使うことを一切想定しておりません。
特徴点:このプログラムで扱うマークシート・答案は、左上隅に特徴点 ■■■ が必要です。

2.サンプル画面

マークシートリーダー実行時の画面
手書き(横書き)答案採点時の画面
手書き(縦書き)答案採点実行時の画面

3.プログラムのダウンロード

今回の記事でご紹介した マークシートリーダー(マークシートメーカーも同梱)のプログラム一式を以下からダウンロードできます。なお、ダウンロードとご使用にあたっては、免責事項及び使用条件への同意が必要です。免責事項及び使用条件の詳細は付属の Readme.txt をご覧ください。なお、本ソフトウェアは OpenCV 2.4.13 (3-clause BSD License)及び Delphi-OpenCV を使用しています。OpenCV 2.4.13 のライセンスの詳細については、マークシートリーダーのフォルダに同梱した LICENSE 文書をお読みください。また、Delphi-OpenCV のライセンスの詳細については、こちらもマークシートリーダーのフォルダに同梱した MPL-1.1.txt をお読みください。

アプリケーション起動時に『このアプリケーションを実行するには、「Visual C++ v14 Redistributable (x86)」が必要です。Microsoft の公式サイトから最新版をインストールしてください。』というメッセージが表示され、アプリケーションを起動できない場合、アプリケーションが利用しているDLLファイルがお使いのシステムにインストールされていません。下記URLより、Microsoft公式の再頒布パッケージ(vcredist_x86.exe)の最新版をダウンロードし、お使いのシステムにインストールしてください。なお、マークシートリーダーの操作方法の詳細については、付属のご案内をご参照ください。

https://www.microsoft.com/ja-jp/download/details.aspx?id=53587

追記(20260405)

Windows の OpenCV は Visual C++ でビルドされており、そのビルドに使われた特定バージョンのVisual C++ ランタイム DLL がシステムフォルダに存在しない場合、OpenCV が起動できないため、vcredist でその DLL を所定の場所にインストールする必要があります。

MS_Reader V3 のダウンロードは、以下のリンク先から行ってください。

MS_Reader V3 のマークシート読み取り&デジタル採点の実施方法は、当 Blog の次の記事をご参照ください。

MS_Reader V3 の付属の機能を利用した、手書き答案のデジタル採点の実施方法は、当 Blog の次の記事をご参照ください。

MS_Reader V3 の付属の機能を利用した、マークシートと手書き答案の併用型デジタル採点の実施方法は、当 Blog の次の記事をご参照ください。

同梱のマークシートメーカーは PDF ファイルの出力に Skia を使用しています。Skia のライセンスは MIT ライセンスです。このライセンスの詳細につきましては、マークシートメーカーのフォルダに同梱した Skia4Delphi_and_Skia_LICENSE.txt をご覧ください。マークシートメーカーの使い方の詳細については、当 Blog の過去記事をご参照ください。

4.お願いとお断り

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

My Mark Sheet Maker

プロが作ったプログラムには、到底敵わないけれど・・・ でも、今の自分の精一杯。
持てる力の全てをつぎ込んで書きました。

マークシートを(半自動ですが)作ってくれるプログラムです。
罫線の幅や長さ等、微調整が必ず必要ですが、動きます!

この世界に残したかった、夢のひとつをかたちにしました。
My Mark Sheet Maker です。

4ブロックまで。最大19選択肢。A3, A4, B4, B5版のマークシートが作成可能です。

【もくじ】

1.使い方
(1)用紙と向きを選択(新規作成の場合)
(2)タイトルを入力
(3)群数、行数、列数、解答欄群(ブロック)の間隔を設定
(4)マークの縦長楕円の幅と高さを調整
(5)選択肢番号の大きさの変更他
(6)表示の更新と設定の保存
(7)選択肢数(=列数)の設定
(8)設問番号の変更
(9)罫線の設定及び長さの調節
(10)上余白・■■■ 位置・氏名記入欄の設定
(11)印刷
(12)セクション名の追加と削除(の仕様)
2.sk4d.dllについて
3.ダウンロード
4.まとめ
5.お願いとお断り

1.使い方

(1)用紙と向きを選択(新規作成の場合)

プログラムを起動したら、最初に作成するマークシートの用紙と向きを選びます。これだけでデフォルト設定に従ったマークシートが描画されます。

一般的な試験用途でしたら、A4・横向きが最適だと思います。


描画される内容が『チープ』だと感じる方が多いと思いますが、機械にマークをしっかり読ませることが最大の目的なので、これを阻害しそうな要因は出来るだけ取り除いた結果が、細く薄い印字と罫線になっています。行列切り出しの目安となる解答欄の枠線は残しましたが、解答欄内の縦罫線は消去できる設定としたのもこのためです。罫線があった方が好ましいと感じられる方も、もちろんいらっしゃると思いますが、縦罫線がない状態の方が機械の目に対する悪影響は排除できます。

デフォルト設定では、解答欄の群数(ブロック数)は4、1群あたりの行数は25行(行数はすべてのブロックで等しくする必要があります)、選択肢数は8としてあります。ブロックどうしの間隔(群間と表示)も調整できます。群数・行数・列数を増減すると、その設定に合わせたマークシートが再描画されます。1366 × 768 ピクセルの解像度で開発しています(高 DPI 環境には非対応です)。

カチカチ、クリックして値を設定するより、TSpinEdit に直接入力した方が早いカモ?です。

・既存のマークシート設定がある場合

以前に使用して保存したマークシート設定がある場合は、それを呼び出して利用することもできます。プログラムの起動後に ComboBox の選択肢から選ぶだけです(用紙のサイズや方向の設定は必要ありません)。

(2)タイトルを入力

後からでもかまいませんが、用紙と向きを選んだら、次に「タイトル」を入力してください。

内容は自由です。

例えば、こんな感じです。

あまり長くしない方が管理が楽?かな・・・


タイトル名でマークシート設定を管理( INI ファイルに保存&呼び出し)しますので、教科 or 科目の名称、考査の時期、日付等を入れておくと管理しやすいのではないかと思います。Edit コントロールへ入力すると同時にマークシートの描画も更新されます。入力確定後、再度 Enter キー押し下げで、次のコントロールへフォーカスが移動します。

フォントは「MS Pゴシック」一択です(すみません)。

タイトルを入力するComboBoxの右隣には、次のアイコンがあります。クリックすると、デフォルトのタイトル文字列『タイトル 考査名 解答用紙(20XX/MM/DD)』を設定できます。

クリックすると、次の確認メッセージが表示されます。
「はい」をクリックすると更新されます。
新しいタイトルを設定してください。

(3)群数、行数、列数、解答欄群(ブロック)の間隔を設定

ここで、前述した群数、行数、列数、解答欄群(ブロック)の間隔を設定してください。ここでのフォーカスの移動は TAB キー押し下げです(Shift + TAB で戻ります)。


解答欄の纏まりを「群(ブロック)」と表現しています。1~4群(ブロック)まで設定できます。群数を変更すると、それに合わせてマークシートの描画内容も更新されます。列数と行数は1つの群(ブロック)内での値を設定してください。

群数1、行数25、列数8の場合(実行時の画面)
群数1、行数25、列数8の場合(PDF出力時の画面)

マークする部分(楕円)の大きさは、後から調整できます。
群数2、行数25、列数8の場合(実行時の画面)

解答欄群(ブロック)矩形の右側にややはみ出した横罫線の長さはあとから微調整できます。
群数2、行数25、列数8の場合(PDF出力時の画面)
群数3、行数25、列数8の場合(実行時の画面)
群数3、行数25、列数8の場合(PDF出力時の画面)
群数4、行数25、列数8の場合(実行時の画面)
群数4、行数25、列数8の場合(PDF出力時の画面)

行数、列数、解答欄群(ブロック)の間隔の設定も同様に TSpinEdit の値を変更するだけで行えます。TSpinEdit の値の変更に合わせて画面の描画内容が自動更新されます。

(4)マークの縦長楕円の幅と高さを調整

塗りつぶし範囲を示す、選択肢番号を囲む縦長楕円(=マーク)の幅と高さを調整します。やり方はこちらも TSpinEdit 右側の ▲ や ▼ をカチカチするだけです。広すぎると塗りつぶしに時間がかかり、狭すぎると(読み取りプログラムのアルゴリズムにもよりますが)読み取り判定に問題が生じる可能性が高くなります。

過去に私が自作したマークシートリーダーは(設定によっては)髪の毛1本分の・・・マークとは到底言い難いような・・・「線」でも反応しましたので、マークシートの印刷用紙に黒いシミがあったり、受験者の使用した消しゴムの屑が付着していた場合にも(読み取り閾値の設定で)対応できるよう、やはり、マークはある程度の幅と高さがあった方がいいのかもしれません。

・・・というようなこれまでの経験と、自分的な好みでデフォルトの幅と高さは設定しました(やや大きめです)ので、適宜変更してください。

長径が「高さ」、短径が「幅」です。
(負の数も設定できます)
いちばん小さくした場合で、これくらいでしょうか?

(5)選択肢番号の大きさの変更他

選択肢番号の数字の大きさを変更したい場合は、画面右上の □設定 をチェックしてください。

□部分をクリックして、チェックを入れます。

各種設定を変更できるバーが新しく表示されます。その中の「 Font サイズ」(文字が小さいです)で選択肢番号の数字の大きさを調整できます。

デフォルトは10ポイントに設定してあります。

【マークする部分の設定例】

FontSize : 10, 楕円の長径 : +0, 楕円の短径 : +0 (デフォルト設定)
FontSize : 16, 楕円の長径 : +2, 楕円の短径 : +2 に設定
FontSize : 7, 楕円の長径 : -3, 楕円の短径 : -3 に設定

ちなみに▼をクリックして入力できる下限値は「7」です。

これ以上小さく出来ません・・・と言いたいところですが


プロパティで MinValue を「7」に指定しても・・・

MaxValue は大きすぎ?・・・
直接入力すれば「1」指定も出来てしまいます。もちろん、数字は判読困難・・・

直接入力する場合、欄を空欄にすると( SpinEdit が内部で StrToInt 関数のような仕組みを使い、入力値を整数に変換する際に)例外が発生しましたので、StrToIntDef 関数を使用して空欄でもエラーメッセージが表示されないようにしましたが、MinValue 以下の値が直接入力された場合に、強制的に値を変更して SpinEdit に「7」と表示するのはワザと避けてあります(そういう仕様だと御理解ください)。

つまり・・・

    ACanvas.Font.Name  := 'MS Gothic';
    //ACanvas.Font.Size  := StrToInt(seFontSize.Text);
    ACanvas.Font.Size  := StrToIntDef(seFontSize.Text, 7);

・・・という記述は入れましたが、

procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
  if SpinEdit1.Value < 7 then
    SpinEdit1.Value := 7;
end;

procedure TForm1.SpinEdit1Exit(Sender: TObject);
begin
  if SpinEdit1.Value < 7 then
    SpinEdit1.Value := 7;
end;

みたいな記述はしてません。

なので、TSpinEdit を空欄にすると表示される・・・

このメッセージはでません。

カチカチクリックじゃなくて、コントロールに数値を直接入力すれば・・・

FontSize := 1 も可能

これもナニかに使えるかも・・・と思った次第です。
思っただけで、ナニに使えるかは、まだ思いつきませんが・・・

ちなみに「0」を入力してみたら・・・

選択肢番号が巨大化しました!

これは Windows の仕様で、TFont.Size プロパティに 0 を代入すると、Windowsはそれを「サイズ指定なし(デフォルト)」と解釈するようです。その結果、そのシステムやデバイスの「標準のフォントサイズ」が適用されてしまい、大きな文字が表示される・・・でいいのかな?

Font サイズ指定周辺のコントロールについても触れておきます。


「選択肢始番」(自分でも読み方がわかりません・・・)は、正確に表現すれば「マークシートの選択肢の番号の始まりの数字を0(ゼロ)にするか、1(イチ)にするかの指定」を意味します。

そこにどういった必然性があるのか、わたしにはまったく理解できませんが、高等学校の教科「情報」の共通テストのマークシートでは、選択肢の始まりは「1」ではなく「0」です。このことから、選択肢の番号が「0」始まりのマークシートも作成可能としました。

また、「印刷濃度」は、罫線を含めたマークシート印刷時の灰色の濃さの調整です。このプログラムは(別に作成中の)マークシートリーダーで使用するマークシートを作成するために開発しました。その開発中のプログラムで実際に読み取りテストを行って、問題なく動作した値(140)をデフォルト値に設定してあります。

マークの読み取りに限って言えば、ヒトの目で選択肢番号が読み取れるギリギリの線まで印刷の濃さは薄くしたいところ(=機械的な読み取り判定ミスを防止するため)ですが・・・

自分的には、できればこれくらいの濃さで仕上げたい気がします・・・

しますが・・・

実際の運用では、これくらい印刷濃度を薄くすると、以下のような様々な問題が生じます。

問題1 スキャナーで解像度 200dpi を指定してスキャンすると選択肢の数字が読めなくなる。
問題2 罫線もほぼ消えるので、読み取りプログラムで読取範囲を設定するのに一苦労する。
問題3 採点プログラムで採点し、返却用シートとして印刷すると「ほぼ白紙化」する。等々

ですので、後の処理を考慮して気持ち濃い目に設定してあります。このプログラムを、万一、使用される場合は、必要十分な試行を行って、「試験実施後の処理に支障の出ない濃さ」でマークシートを印刷していただけますようお願い申し上げます。

試しに様々な濃度で印刷したマークシートを、実際に現場で使用しているスキャナーでスキャンして、読み取った後の画像がどのような状態になるのか、確認してみました。

【 濃度 140 】

実行時の PC 画面
スキャンしたJpeg画像(部分・カラー・200dpi)

【 濃度 150 】

実行時の PC 画面
スキャンしたJpeg画像(部分・カラー・200dpi)

【 濃度 160 】

実行時の PC 画面
スキャンしたJpeg画像(部分・カラー・200dpi)

【 濃度 170 】

実行時の PC 画面
スキャンしたJpeg画像(部分・カラー・200dpi)

【 濃度 180 】

実行時の PC 画面
スキャンしたJpeg画像(部分・カラー・200dpi)

【 濃度 190 】

実行時の PC 画面
スキャンしたJpeg画像(部分・カラー・200dpi)

【 濃度 200 】

実行時の PC 画面
スキャンしたJpeg画像(部分・カラー・200dpi)


自分的には、濃度 200 くらいで印刷した状態が『しっくり』きますし、これをスキャンするとほとんど白紙状態になりますので、機械的に読み取り精度を上げるという意味では、これくらいの濃度に設定したいところです。

ただ、ヒトがマークの読み取り結果を目視して確認したり、マークシート画像上に採点結果を印刷して答案返却用に使用するという、採点に伴う諸々の作業を円滑に行うためにはスキャンした画像で文字の判別がギリギリ可能な濃度 140 以下に設定する必要がありそうです。このマークシート作成プログラムで作成したマークシートを使用して、試験の準備→実施→採点→答案返却という実際の現場の作業を何回か繰り返す中で最適な濃度の設定値を見つけなければなりません。経験して初めてわかることがどうしてもあるからです。そのようなことから、現在は濃度のデフォルト設定値をスキャナーでスキャンした際に選択肢の数字・文字がギリギリ読める限界の値 140 としてあります。

(6)表示の更新と設定の保存

ジョイスティックの絵文字は「操作」を意味します。

モニター画面のアイコンがあるボタンが「表示の更新」、フロッピーディスクにギヤのアイコンがあるボタンが「設定の保存」です。

「表示の更新」ボタンは、このプログラムの設計当初設置したもので、その名前の通り、このボタンをクリックして表示(描画)を更新するために設けたものです。ですが、すぐに設定値の変更と同時に画面を更新しても動作がそれほど重たくならないことに気づき、画面への描画は自動化することにしました。しかし、何かの拍子に(あぁこの操作のためには、このボタン残しておかないと・・・)と思った記憶があり、つまり、確かに何か明確な理由があって残してある「表示の更新」ボタンなのですが、その・・・確かにあったはずの明確な理由が、今、どうしても思い出せません。

たしかにナニか、あったんだけどなー

なので、あとから思い出せたら追記することにします!

「設定の保存」ボタンは、用紙の選択や向き、タイトル他の設定を一括して exe と同じ場所に自動的に作成される INI ファイルに保存するためのボタンです。INI ファイルはただのテキストファイルなので、メモ帳等のエディタで開いて直接編集することも可能ですが、推奨はしません。設定の変更と保存はなるべくプログラムを起動して行っていただけますよう、お願いいたします。

ちなみに INI ファイルの内容は次の通りです。

[情報Ⅰ  考査①  解答用紙(2026/05/25)]
SectionNmae=情報Ⅰ  考査①  解答用紙(2026/05/25)
PaperSize=A4
Orientation=横
Blocks=4
Rows=25
Cols=8
Space=5
Major=0
Minor=0
StartingNumber=1
Gray=140
TateKeisen=-21
YokoKeisen=0
TopMarginMM=14
TDPosition=30
Copies=1
PDF_Margin=0
SectionNumber=1
Multiple=0
UseKana=0
OffVertLine=1
Option=1
Name=1
rbtn1=1
rbtn2=0
FontSize=10

(7)選択肢数(=列数)の設定

19列(選択肢)を指定すると大語群対応がチェックできるようになります。
(上の図はチェックした状態です)


今回作成したプログラムでは、この Blog の過去の記事で紹介した「 100 選択肢に対応したマークシートリーダー」用のマークシートも作成できます。自分で言うのも何ですが、「 100 選択肢に対応したマークシートリーダー」は好評で、複数の方が定期的に使用してくださっています。ただ、Word や Excel を利用して作成したマークシートでは、私の作成技術が稚拙なため、どうしてもマークとマークの間隔が狭くなってしまい、大きく(乱暴に?)塗りつぶされた場合に複数マーク判定が出やすくなる(大語群の場合には空欄と同様に扱っていますが)という問題がありまして、これをどうにか改善したいと考えたことも、「プログラムでマークシートを作ってみよう!」と思った理由のひとつです。

新しく作成中のマークシートリーダーでも、もちろん、この大語群対応マークシートが読めるようにしてありますが、まだ実際の試験で使用して問題がないかどうかの確認を行っていませんので、現時点での公開はできませんが、この Blog で過去に公開してきたマークシートリーダーより、読み取り速度は比較にならないくらい高速化することに成功しています。設定によりますが、輪郭検出を最初の1枚のみに限定した場合で、私の PC では、1秒間に約47,500マークを読み取り可能です。

【テストに使用したPCのスペック】
プロセッサ	11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz (3.00 GHz)
実装 RAM	32.0 GB (31.7 GB 使用可能)	
システムの種類	64 ビット オペレーティング システム、x64 ベース プロセッサ

【OS】
エディション	Windows 11 Pro
バージョン	25H2

開発中の MS_Reader V3(2026年1月現在)

上の図のように、8選択肢 × 100 設問 × 42 枚 = 33600 マークを 0.708 秒で読みますので、1秒間あたりでは、47457 マークを読める計算になります。

すべてのマークシートについて輪郭検出を行った場合(すべてのマークシートについて、画像左上の ■■■ 座標を検出し、予め登録してあるそこからの位置座標から読み取り範囲を設定する=印刷時やスキャン時のズレ・ブレの問題を完全に解消できます)は、

1秒間あたり、25946 マーク読みます。過去に私が作ったマークシートリーダーの読み取り速度に比較すれば、これでも十分、高速です。

※ 読み取り時間はあくまでも参考です。使用する PC の性能により、この時間は大きく変化します。

(8)設問番号の変更

デフォルト設定の設問番号は、1から始まる数字の連番ですが、□ 設問番号カナにチェックすることで解答欄群(ブロック)毎に半角カタカナのアから五十音順で始まる表記に変更できます。

主に数学の採点用途での使用を想定しましたので、
設問番号をカナ表記にした場合は解答欄群上に大問番号が表示されます。


また、表示される大問番号は任意の値から開始することができます。

・・・と、ここまで記事を書いて、重要な設定をし忘れたことに気づきました。あわわ・・・

プログラムを修正(改良)してから、この続きを書くことにします。

72時間ほど経過しました。

で、ナニをしたかと言うと・・・

共通テストの数学解答用マークシート形式での出力を可能に設定


どうせやるなら、理科も・・・


情報も・・・

16進数に関連した問題が脳裏をヨギリマス。


作り方は簡単。選択された列数が11列、12列、16列であった場合には次のようなメッセージを表示して、ユーザーの返答が「はい」の場合には共通テスト仕様のマークシートを出力するようにプログラムを修正しました。返答が「はい」なら共通テスト仕様の、「いいえ」なら選択肢が1始まり・連番のマークシートが作成されます。

次の列数指定に移動するには「キャンセル」をクリックします。

(9)罫線の設定及び長さの調節

罫線の種類を変更したり、太さを変えたりすることは出来ませんが長さの調整は可能です。

列数や行数を変更すると、ド素人が書いたプログラムですので、計算が微妙に狂って、次のようにブロックの右側や下側の罫線がはみ出したり、足りなくなったりすることがあります。

右側の横罫線がはみ出し
右側の横罫線がはみ出し & 縦の罫線の長さが足りない


このような場合には、□ 設定をチェックして・・・


表示されたコントロールの「縦罫調整」及び「横罫調整」の値を増減させて調整してください。1クリックで1ピクセル単位の調整が可能です。このプログラムは画面サイズ 1366 × 768 での使用を前提として開発していますので、必要なコントロールを幅の制限内に詰め込むため、キャプションは「意味が通じれば可」とし、「罫線」の「線」は省略しました(入力ミスではありません)。


これで次のように修正できます。

ちなみに、罫線の長さ調整コントロールの左にある「群内縦罫線なし」のチェックを OFF にすれば列を示す縦罫線も描画できますが、正確なマークの読み取り処理を実行するには、縦罫線はない方が絶対に良いので、デフォルト設定では「なし」にしています。

   ↓

【縦罫線がある状態】

縦罫線の使用は推奨しません!

(10)上余白・■■■ 位置・氏名記入欄の設定

上の余白を設定すると、解答欄群(ブロック)の高さが変わらないように、下の余白も連動して調整されます。左右の余白は自動設定です(左右の余白を手動で調整することはできません)。

■■■ の位置は、デフォルト設定で画像化したマークシートの左端から300ピクセル以内、上端から300ピクセル以内で、解答欄に重ならないように、また、数学用途の場合は大問番号とも重ならないように位置を設定してください。最も左の解答欄群(ブロック)の設問番号欄の右側縦罫線を上に延長した位置に ■■■ の左側が一致するように設計してあります(左右の位置の調整はできません)。

■■■ は、輪郭検出のターゲットとして利用し、マーク読み取り時に
解答欄群(ブロック)の位置を決定する計算の基点になります。


氏名記入欄は、敢えてマークを利用しない設定としてあります。クラスや番号をマークで・・・と考えたこともあるのですが、実際の運用上では塗りつぶしミスが絶対にあることや、スキャンする前にマークシートの並べ間違い(番号順になっていない・上下が逆さま・裏返し等)のチェックを必ず行う必要があることから、採点業務を円滑に進めるためには「氏名記入欄は手書きが最も良い方法」であると考えました。なお、表示(描画)位置は、シートの右上限定です。

氏名部分の下線から大きくはみ出して氏名を記入する受験者もいます。
解答欄との間に十分な余白を設けているのは、氏名のはみ出し対策です。

(11)印刷

印刷関連のコントロールとその役割です。

大変申し訳ありませんが一部のモバイルプリンターで、このプログラムで作成したマークシートを印刷出来ないことを確認しました。機種名は記載しませんが、どうやら一部のモバイルプリンターでは他のプリンターとドライバ互換性や DevMode 処理が異なり、Delphi の TPrinter で印刷エラーが発生しやすいようです。私の場合も PrinterSetupDialog 実行後、GetPrinter / SetPrinter による dmCopies 設定が My モバイルプリンターでは失敗し、BeginDoc できない状態になりました(普段マークシートの印刷に利用している複合機ではちゃんと印刷できました)。

仕方がないのでデータをビットマップに保存し、これを印刷する方法(以下のコードを参照)を試したら印刷できましたが、この方法では余白の設定に問題が残り・・・結局、元の「一部のモバイルプリンターで印刷出来ない」コードに戻しました。

procedure TForm1.PrintImageShell;
var
  TmpFile: string;
  Bmp: TBitmap;
  i: Integer;
begin
  CopyCount := StrToInt(seCopies.Text);
  if (Image1.Picture = nil) or (Image1.Picture.Graphic = nil) then Exit;

  Bmp := TBitmap.Create;
  try
    Bmp.Assign(Image1.Picture.Graphic);
    TmpFile := ExtractFilePath(ParamStr(0)) + 'temp_print.bmp';
    Bmp.SaveToFile(TmpFile);

    for i := 1 to CopyCount do
    begin
      //ShellExecute(Handle, 'print', PChar(TmpFile), nil, nil, SW_HIDE);
      ShellExecute(Handle, 'open', 'mspaint.exe', PChar('/p "' + TmpFile + '"'), nil, SW_HIDE);
      Sleep(3000);  //プリンタ待ち延長
    end;
    Sleep(5000);  //全印刷完了待ち
    DeleteFile(TmpFile);
  finally
    Bmp.Free;
  end;
end;

ですので、このプログラムを利用してマークシートを作成した場合、すべてのプリンターで印刷できるわけではないことを申し添えます。

追記(20260330)

以前、PDF 関連のプログラムを書いた際にその存在を知り、PC にインストールしておいた、ドイツの Geek Software GmbH が開発した PDF24 Creator に出力し、PDF24 Creator から上記の「印刷できなかったモバイルプリンター」への出力を試したところ、無事、印刷できました。もちろん、余白等の問題も発生しませんでした。 PDF24 は、“完全無料で広告のみで運営されている” PDF ツール群で、オンライン版(PDF24 Tools)とオフライン版(PDF24 Creator)があります。利用したのは(名前からおわかりかと思いますが)、オフライン版(PDF24 Creator)です。

【正答シート・読み取りテスト用シートの印刷】

正答シート・読み取りテスト用シートの印刷を実行すると、次のメッセージが表示されます。

「はい」を選択:正答シートを1枚印刷
「いいえ」を選択:読み取りテスト用シートを指定枚数分印刷
「キャンセル」:処理を終了

正答シート・読み取りテスト用シートを印刷するためには、次のデータをCSV形式で指定 Path に準備する必要があります(開発中のマークシートリーダーでも、このデータを使用します)。

指定 Path:exe があるフォルダ\ProcData\採点用マークシート画像を保存したフォルダ

指定ファイル名:MS_ScoringData.csv

1行目の第1列から設問数分、正答データを入力してください。
数学なら-(マイナス)記号、理科なら a, b、情報なら a, b, c, d, e, f の入力に対応しています。

「はい」を選ぶと作成される正答シートの例:

マークシートリーダーの読み取りテストに使用できます。


「いいえ」を選ぶと作成される読み取りテスト用マークシートの例:

空欄や誤答マーク(複数マーク)入りの読み取りテスト用マークシートを作成できます。
※ 印刷実行前に印刷枚数を設定してください。


実際の操作は次の流れになります。

PrinterSetupDialog が表示されます。
設定を確認し、OK をクリックしてください。
数学・理科・情報の場合に確認メッセージが表示されます。

MS_ScoringData.csv のあるフォルダを指定してください。

(12)セクション名の追加と削除(の仕様)

設定の保存ボタンをクリックすると、現在表示されているマークシートの設定が exe と同じ場所に自動的に作成される INI ファイル内に「タイトル名をセクション名として」保存されます。次回、プログラムを起動する際、プログラムは自動的に INI ファイル内のセクション名を取得して、タイトルを表示する ComboBox の選択肢に設定します。

セクションの削除と、画面の表示は、『連動しない仕様』としてある点にご注意願います。

例えば、「情報Ⅰ」と「情報Ⅱ」の2種類のマークシート設定があり、「情報Ⅱ」を表示している状態で「情報Ⅱ」のセクションを INI ファイルから削除したとします。

マークシート設定の削除は、このアイコンをクリックして実行します。
削除したいタイトル(セクション名)を表示されたリストから選んで右クリックし、
さらに表示されるサブメニューの削除をクリックしてください。

確認メッセージが表示されます。

「はい」をクリックすると、セクションが削除されます。

INI ファイル内のマークシート設定(セクションとして管理)はこの操作で削除されますが、例え、現在表示されているマークシート設定(のセクション情報)を削除したとしても、画面の描画内容には影響を与えません。単に、次回から(その設定を)呼び出せなくなるだけです。

この例では、「情報Ⅱ」のマークシート画面を表示しながら、「情報Ⅱ」のマークシート設定を削除しましたが、「情報Ⅱ」のマークシート画面は表示されたままになっています。このままプログラムを終了してもマークシート設定の保存の可否を確認するメッセージ等は表示されません。

このように、現在の描画内容はセクション名とは無関係に、独立した存在として扱う仕様となっていることにご留意いただけますよう、お願い申し上げます。

2.sk4d.dllについて

このプログラムは PDF の作成に Googleが中心となって開発している、オープンソースの強力な2D描画ライブラリ Skia (スキア)を使用しています。ですので正常に動作させるには、exe と同じ場所に Skia の描画エンジン本体(sk4d.dll)が必須です(ダウンロード Zip に同梱されています)。

このプログラムの正常な動作に必要なファイルの一覧です。

sk4d.dll のライセンスはMIT Licenseです。ですので、アプリ(商用を含む)への組み込み・再配布・改変まで自由にできますが、著作権表示とライセンス文の同梱が必要です。

※ MarksheetMaker は非商用・有償販売禁止という利用条件でダウンロードとその使用を可としておりますので、ご注意ください。

3.ダウンロード

今回の記事でご紹介した MarksheetMaker プログラム一式を以下からダウンロードできます。なお、ダウンロードとご使用にあたっては、免責事項及び使用条件への同意が必要です。免責事項及び使用条件の詳細は付属の License.txt をご覧ください。本ソフトウェアは PDF ファイルの出力に Skia を使用しています。Skia のライセンスは MIT ライセンスです。このライセンスの詳細につきましては同梱した Skia4Delphi_and_Skia_LICENSE.txtをご覧ください。

また、動作には sk4d.dll が必要です。MarksheetMaker.exe と同じフォルダ内に sk4d.dll を置いてプログラムを実行してください。

4.まとめ

今回の記事でご紹介した MarksheetMaker は、当 Blog の過去記事で紹介したマークシートリーダー及び現在開発中の超高速・軽量マークシートリーダー( MS_Reader V3 )で利用可能なマークシートを作成・印刷するプログラムです。

5.お願いとお断り

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