2021/11/11追記
紹介用の動画を作りました!細かい機能はさておき実際に使ってみたい場合は、こちらの動画をご覧ください。
はじめに
- 教員にとって、採点は時間がかかる業務の一つです。高校教員で必修科目を担当する場合には、40人×8クラスの採点を一人で行わなくてはいけません。
- マークシート式で試験を実施すると、採点時間が大きく削減されます。しかし定期試験では作図問題や論述問題も問いたいです。
- 記述採点の効率化のためには、竹内俊彦氏作成の採点革命や島守睦美氏作成の採点斬りなどの素晴らしいフリーソフトがありましたが、いずれも2000年代初頭のソフトで開発は中断されているため、実行のためにVBランタイムの導入が必要だったり、いくつかのバグが残っていたりと、2021年現在では課題があるのも事実です。
- そこで、記述問題のデジタル採点を可能にするソフトウェアを作成しました。
作ったもの
できること
- 解答用紙の設問領域をマウスで選択します。
- それぞれの問題が斬りとられて、採点画面に表示されます。
- 数字キーで点数を入力します。
- Excelに出力ボタンを押すと、Excelファイルが出力されます。名前領域を画像として出力するので、名前と対応するように横に生徒番号等を入力しておけば、Vlookup関数等で直接データを扱えます。
- また、元画像に点数を書き込んだファイルを出力することもできます。
処理の概要
- 初期設定をすると、
setting/input
フォルダとsetting/output
フォルダと、setting/ini.csv
が作成されます。 - 解答用紙の切り取り範囲は、
ini.csv
に書き込んでいき、範囲確定を押すとini.csv
をtrimData.csv
に名前を変えて、切り取る座標を保存します。 -
setting/trimData.csv
の座標データをもとに、setting/input
の中の画像をPillowで連続トリミングします。 -
setting/output
の下に設問ごとにQ000X
というフォルダを作成し、切り抜いた画像を保存します。 - 採点作業では、
Q000X
の中にQ000X/n
(nは点数)という名前のフォルダを新規作成し、画像をその中に振り分けて保存していきます。 - フォルダ構造に基づいて、Excel出力や採点結果画像の出力を行います。
コードの概要
- TkinterでUIを作成しました。
- Pyinstallerで実行ファイルにコンパイルしました。
- Pillowで画像の読み込み、トリミング、文字の記入を実装しています。
- openpyxlでExcelへの書き込みを実装しています。
- tkinterで画像を表示するためには、pillowのimgオブジェクトはグローバル変数にしないといけないようです。低レイヤは詳しくないですが、切り取った画像などがメモリを圧迫するのは良くない気がしたので、
配列の初期化→.append
で処理を書くようにしてみました。この辺については、詳しい方のアドバイスをもとに高速化を実現したいです。 - 採点の進捗をどう保存していくかについては工夫しました。
ini.csv
にログを残していこうかとも思いましたが、エラー回避を書くのがめんどくさかったので、ini.csv
への設定の保存は最小限にして、進捗等はフォルダ構造で判別するように工夫しました。Excelに出力や、採点結果画像の出力の際には、flagを立てながらos.walk
でフォルダ構造を解析して、点数を出力しています。
今後の展望
- Pythonで作成しているので、機械学習と相性が良いはずです。
pyocr
等のライブラリと連携して、自動採点ができるといいなあという野望はあります。 - 採点斬り2021のリンクでは、ソースコードもすべて公開しています。ぜひ、改造、改良をしてください。
- 著作権は放棄していません。改造する場合は、ライセンスをご確認ください。