SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
マークシート読み込み
プログラムを
Pythonで作ってみた
2018-04-04
オトナのプログラミング勉強会LT
森下功啓
定期試験と採点と配点調整
採点が面倒くさい
そうだ、マークシートにしよう
普通のマークシートの様子
特殊用紙で印刷綺麗→
グリッド検出用マーク
https://www.sekonic.co.jp/product/o
mr/accessory/mark_sheet.html
学校は再生用紙だし、印刷も綺麗じゃない・・・
Pythonで作っている人もいる
• https://qiita.com/sbtseiji/items/6438ec2bf970d63817b8
(←アンケート用)
簡単なのを自作しよう・・・
解答用紙を
Excelで作った→
出席番号欄は画像を貼り付け→
マーカー的なやつ→
太枠を検出して、
枠数で分割すれば
良いのではと安直なアイデア
実際の解答用紙の例
想定外の書き込み→
(´・ω・`)
画像を2値化
↓
膨張収縮でゴミ削除
↓
ヒストグラムで枠検出
&枠数で領域分割
↓
黒の面積の平均と標準偏
差でマーク位置を検出
• 薄いマークは筆入れ
• マーカーは邪魔だった
• 出席番号欄も邪魔だった・・・(赤の発色が悪い)
改善案
• 細枠が言うほど細くない → 細くする
• 太枠が言うほど太くない → 太くする
• 太枠の検出を検出しやすく → 色を付ける
• 出席番号欄の発色が悪い → 画像から普通のセルに変更
• 設問数が少ない → 回答欄を増やす
• 余計な書き込み → 書き込まないように明記
第2世代のデザイン
出席番号欄の画像を止めた
枠に色を着けた
回答欄を増やした
注意事項を追加
実際の解答用紙の例
(検出後)
左右の枠は、色でフィルターして
それぞれ抽出した
左の枠処理結果 右の枠処理結果
作ったプログラム
(の一部)
処理した結果
• 読み込みはできた
• 複数選択式の設問にも対応
• たまに薄いマークが有ったが、40名前後分なのでサービスで加筆
• 膨張収縮の回数を毎度調整した方が良さげ
あとは採点だ!
採点条件
以下のタイプの設問に対応する
• 正解が1〜n個あって、1つでも合っていればOKな問題→normalモード
• 例「この条件に合致するものを1つ選べ」
• 作問ミスで正解が複数ある場合も含む
• 全て選択する問題で、選択しないことも正解な問題→full matchモード
• 例「この条件に合致するものを全て選べ」
作ったプログラム
• 約170行
処理の流れ 正解ファイルの読み込み
解答画像の読み込みと、
マーク情報の取得
点数の計算
採点結果の保存
正解率の保存
正解ファイル(xlsx形式)の入力例
採点結果と正解率の計算
正解率→
採点結果↑
プログラムをGitHubで公開しています!
https://github.com/KatsuhiroMorishita/OMR_by_python
まとめ
• 採点が面倒なのでマークシート処理プログラムを作った
• 配点を変えて再計算するのがすごく楽になった
• Moodle(CMSの一種)などを使えよと思えなくもない
• 問題のCMS対応は非常に面倒なので、これはこれでOK
• 今年度から少し楽になるのかもしれない
• 合同講義で80人超の講義も有るし・・・

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

再現性問題は若手研究者の突破口
再現性問題は若手研究者の突破口再現性問題は若手研究者の突破口
再現性問題は若手研究者の突破口
 
Recent Advances on Transfer Learning and Related Topics Ver.2
Recent Advances on Transfer Learning and Related Topics Ver.2Recent Advances on Transfer Learning and Related Topics Ver.2
Recent Advances on Transfer Learning and Related Topics Ver.2
 
【DL輪読会】ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
【DL輪読会】ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation【DL輪読会】ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
【DL輪読会】ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
 
スキルチェックリスト 2017年版
スキルチェックリスト 2017年版スキルチェックリスト 2017年版
スキルチェックリスト 2017年版
 
Attentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAttentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門まで
 
合成変量とアンサンブル:回帰森と加法モデルの要点
合成変量とアンサンブル:回帰森と加法モデルの要点合成変量とアンサンブル:回帰森と加法モデルの要点
合成変量とアンサンブル:回帰森と加法モデルの要点
 
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
 
【DL輪読会】Perceiver io a general architecture for structured inputs & outputs
【DL輪読会】Perceiver io  a general architecture for structured inputs & outputs 【DL輪読会】Perceiver io  a general architecture for structured inputs & outputs
【DL輪読会】Perceiver io a general architecture for structured inputs & outputs
 
コンピュータビジョンの研究開発状況
コンピュータビジョンの研究開発状況コンピュータビジョンの研究開発状況
コンピュータビジョンの研究開発状況
 
cvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tipscvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tips
 
異常検知と変化検知 9章 部分空間法による変化点検知
異常検知と変化検知 9章 部分空間法による変化点検知異常検知と変化検知 9章 部分空間法による変化点検知
異常検知と変化検知 9章 部分空間法による変化点検知
 
失敗から学ぶ機械学習応用
失敗から学ぶ機械学習応用失敗から学ぶ機械学習応用
失敗から学ぶ機械学習応用
 
畳み込みLstm
畳み込みLstm畳み込みLstm
畳み込みLstm
 
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
 
道具としての機械学習:直感的概要とその実際
道具としての機械学習:直感的概要とその実際道具としての機械学習:直感的概要とその実際
道具としての機械学習:直感的概要とその実際
 
機械学習で嘘をつく話
機械学習で嘘をつく話機械学習で嘘をつく話
機械学習で嘘をつく話
 
DLLab 異常検知ナイト 資料 20180214
DLLab 異常検知ナイト 資料 20180214DLLab 異常検知ナイト 資料 20180214
DLLab 異常検知ナイト 資料 20180214
 
機械学習と主成分分析
機械学習と主成分分析機械学習と主成分分析
機械学習と主成分分析
 
モデルアーキテクチャ観点からの高速化2019
モデルアーキテクチャ観点からの高速化2019モデルアーキテクチャ観点からの高速化2019
モデルアーキテクチャ観点からの高速化2019
 
工学系大学4年生のための論文の読み方
工学系大学4年生のための論文の読み方工学系大学4年生のための論文の読み方
工学系大学4年生のための論文の読み方
 

Semelhante a マークシート読み込みプログラムを作ってみた@2018-04-04

Excel 方眼紙撲滅委員会 活動報告 2012.11 #odstudy
Excel 方眼紙撲滅委員会 活動報告 2012.11 #odstudyExcel 方眼紙撲滅委員会 活動報告 2012.11 #odstudy
Excel 方眼紙撲滅委員会 活動報告 2012.11 #odstudy
Takeshi Komiya
 

Semelhante a マークシート読み込みプログラムを作ってみた@2018-04-04 (20)

[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
 
Excel 方眼紙撲滅委員会 活動報告 2012.11 #odstudy
Excel 方眼紙撲滅委員会 活動報告 2012.11 #odstudyExcel 方眼紙撲滅委員会 活動報告 2012.11 #odstudy
Excel 方眼紙撲滅委員会 活動報告 2012.11 #odstudy
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonad
 
アウトプットのすすめ
アウトプットのすすめアウトプットのすすめ
アウトプットのすすめ
 
60秒で終わるステッカー発注の基礎 - Node学園2015 株式会社パエリア
60秒で終わるステッカー発注の基礎 - Node学園2015 株式会社パエリア60秒で終わるステッカー発注の基礎 - Node学園2015 株式会社パエリア
60秒で終わるステッカー発注の基礎 - Node学園2015 株式会社パエリア
 
第13回名古屋アジャイル勉強会発表資料『チケット駆動開発入門』
第13回名古屋アジャイル勉強会発表資料『チケット駆動開発入門』第13回名古屋アジャイル勉強会発表資料『チケット駆動開発入門』
第13回名古屋アジャイル勉強会発表資料『チケット駆動開発入門』
 
[OSC2018広島]自分にできる貢献のしかたを見つけよう(OSC2018広島Ver)
[OSC2018広島]自分にできる貢献のしかたを見つけよう(OSC2018広島Ver)[OSC2018広島]自分にできる貢献のしかたを見つけよう(OSC2018広島Ver)
[OSC2018広島]自分にできる貢献のしかたを見つけよう(OSC2018広島Ver)
 
GDG2018 vision kit mahjong
GDG2018 vision kit mahjongGDG2018 vision kit mahjong
GDG2018 vision kit mahjong
 
Swift (with SceneKit) で簡単な3Dゲームを作ってみた
Swift (with SceneKit) で簡単な3Dゲームを作ってみたSwift (with SceneKit) で簡単な3Dゲームを作ってみた
Swift (with SceneKit) で簡単な3Dゲームを作ってみた
 
Penbe ~勉強したくなる魔法のペン~
Penbe ~勉強したくなる魔法のペン~Penbe ~勉強したくなる魔法のペン~
Penbe ~勉強したくなる魔法のペン~
 
そっか ぼくらは ディベロッパーやったんや
そっか ぼくらは ディベロッパーやったんやそっか ぼくらは ディベロッパーやったんや
そっか ぼくらは ディベロッパーやったんや
 
第1回SIA研究会(例会)プレゼン資料
第1回SIA研究会(例会)プレゼン資料第1回SIA研究会(例会)プレゼン資料
第1回SIA研究会(例会)プレゼン資料
 
Output Driven 20170721
Output Driven 20170721Output Driven 20170721
Output Driven 20170721
 
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
 
IT技術者でも1から学べるビジネスモデルキャンバス入門
IT技術者でも1から学べるビジネスモデルキャンバス入門IT技術者でも1から学べるビジネスモデルキャンバス入門
IT技術者でも1から学べるビジネスモデルキャンバス入門
 
Bot Service 概要
Bot Service 概要Bot Service 概要
Bot Service 概要
 
量子コンピュータのプログラミング・コンテスト体験記
量子コンピュータのプログラミング・コンテスト体験記量子コンピュータのプログラミング・コンテスト体験記
量子コンピュータのプログラミング・コンテスト体験記
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
 
どうやってフォント選ぶべき?
どうやってフォント選ぶべき?どうやってフォント選ぶべき?
どうやってフォント選ぶべき?
 
[DojoCon Japan 2018]自分にできる貢献のしかたを見つけよう by CoderDojo光
[DojoCon Japan 2018]自分にできる貢献のしかたを見つけよう by CoderDojo光[DojoCon Japan 2018]自分にできる貢献のしかたを見つけよう by CoderDojo光
[DojoCon Japan 2018]自分にできる貢献のしかたを見つけよう by CoderDojo光
 

Mais de Katsuhiro Morishita

Mais de Katsuhiro Morishita (20)

数ページの卒業論文作成のためのwordの使い方
数ページの卒業論文作成のためのwordの使い方数ページの卒業論文作成のためのwordの使い方
数ページの卒業論文作成のためのwordの使い方
 
Pythonのパッケージ管理ツールの話@2020
Pythonのパッケージ管理ツールの話@2020Pythonのパッケージ管理ツールの話@2020
Pythonのパッケージ管理ツールの話@2020
 
オトナのpandas勉強会(資料)
オトナのpandas勉強会(資料)オトナのpandas勉強会(資料)
オトナのpandas勉強会(資料)
 
SIgfox触ってみた in IoTLT in 熊本市 vol.3
SIgfox触ってみた in IoTLT in 熊本市 vol.3SIgfox触ってみた in IoTLT in 熊本市 vol.3
SIgfox触ってみた in IoTLT in 熊本市 vol.3
 
Google Colaboratoryの使い方
Google Colaboratoryの使い方Google Colaboratoryの使い方
Google Colaboratoryの使い方
 
Excelでのグラフの作成方法re
Excelでのグラフの作成方法reExcelでのグラフの作成方法re
Excelでのグラフの作成方法re
 
Pythonのmain関数
Pythonのmain関数Pythonのmain関数
Pythonのmain関数
 
Pythonスクリプトの実行方法@2018
Pythonスクリプトの実行方法@2018Pythonスクリプトの実行方法@2018
Pythonスクリプトの実行方法@2018
 
Pythonで始めた数値計算の授業@わんくま勉強会2018-04
Pythonで始めた数値計算の授業@わんくま勉強会2018-04Pythonで始めた数値計算の授業@わんくま勉強会2018-04
Pythonで始めた数値計算の授業@わんくま勉強会2018-04
 
オトナの画像認識 2018年3月21日実施
オトナの画像認識 2018年3月21日実施オトナの画像認識 2018年3月21日実施
オトナの画像認識 2018年3月21日実施
 
LoRa-WANで河川水位を計測してみた@IoTLT@熊本市 vol.001
LoRa-WANで河川水位を計測してみた@IoTLT@熊本市 vol.001LoRa-WANで河川水位を計測してみた@IoTLT@熊本市 vol.001
LoRa-WANで河川水位を計測してみた@IoTLT@熊本市 vol.001
 
シリーズML-08 ニューラルネットワークを用いた識別・分類ーシングルラベルー
シリーズML-08 ニューラルネットワークを用いた識別・分類ーシングルラベルーシリーズML-08 ニューラルネットワークを用いた識別・分類ーシングルラベルー
シリーズML-08 ニューラルネットワークを用いた識別・分類ーシングルラベルー
 
シリーズML-07 ニューラルネットワークによる非線形回帰
シリーズML-07 ニューラルネットワークによる非線形回帰シリーズML-07 ニューラルネットワークによる非線形回帰
シリーズML-07 ニューラルネットワークによる非線形回帰
 
シリーズML-06 ニューラルネットワークによる線形回帰
シリーズML-06 ニューラルネットワークによる線形回帰シリーズML-06 ニューラルネットワークによる線形回帰
シリーズML-06 ニューラルネットワークによる線形回帰
 
シリーズML-05 ニューラルネットワーク
シリーズML-05 ニューラルネットワークシリーズML-05 ニューラルネットワーク
シリーズML-05 ニューラルネットワーク
 
シリーズML-03 ランダムフォレストによる自動識別
シリーズML-03 ランダムフォレストによる自動識別シリーズML-03 ランダムフォレストによる自動識別
シリーズML-03 ランダムフォレストによる自動識別
 
シリーズML-01 機械学習の概要
シリーズML-01 機械学習の概要シリーズML-01 機械学習の概要
シリーズML-01 機械学習の概要
 
Pandas利用上のエラーとその対策
Pandas利用上のエラーとその対策Pandas利用上のエラーとその対策
Pandas利用上のエラーとその対策
 
Pythonによる、デジタル通信のための ビタビ符号化・復号ライブラリの作成
Pythonによる、デジタル通信のための ビタビ符号化・復号ライブラリの作成Pythonによる、デジタル通信のための ビタビ符号化・復号ライブラリの作成
Pythonによる、デジタル通信のための ビタビ符号化・復号ライブラリの作成
 
機械学習(仮)in Mobile conference 2017
機械学習(仮)in Mobile conference 2017機械学習(仮)in Mobile conference 2017
機械学習(仮)in Mobile conference 2017
 

マークシート読み込みプログラムを作ってみた@2018-04-04