- 締切済み
マークシート読取ソフトの仕組みについて
いま普通なスキャナとプリンタを使って、マークシートの作成や読取ができるみたいです。 普通紙マークシート採点システムのようなソフトもあります。↓ http://www.vector.co.jp/soft/winnt/business/se398027.html そのソフトをインストールして、C言語で作れたことが分かりました。スキャナを使用し、回答用紙をjpgなどの画像ファイルに保存して、ソフトで採点できるんです。 私はC言語があまり分かりませんので、ここで聞きたいです。 (1)上記のようなソフトはどういう風にマークの正か誤かを判断しますか?画素ごと判断ではないでしょうか、鉛筆のマークの厚さや形状が違うと思いますが、どう解決しますか? (2)JAVAで簡単な採点システムを作りたいですが、できますか?どういうふうにやれば実現できますか。 自分の力で解決できない問題が多いですね、経験がある方のアドバイスを是非いただきたいと思います。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- TERABIT
- ベストアンサー率44% (4/9)
作ったことはないですし、作りきれる自信もないですが(^^; 画像の連続読み込みさえ出来れば、そんなに難しくはないと思います。 まず、白黒で読み込みますが、黒部分は、確実に黒に、塗りつぶす枠は、白になるように、汚れなどがある場合も白になるようにスキャナの明るさ調整をします。 (出来なければ、ソフト側でしきい値調整をし、白黒にします) マークシートを見れば、原理はわかると思いますが、 シートには、シートの位置マークがまず付いていると思います。 これで始点と終点、座標が確定するわけです。 これは、シートの一番端の辺りにあるはずですから、端のあたりにある同一マークを検索します。 多分、斜めになったりなども有り得るので、斜めになった時用のデータも持って、位置検索しますが、 通常それはマークシートに最初からプリントされているものなので、 80%~90%くらいの確率で同じデータになればいいと思います。 ここで、画像を回転移動させて、検出位置データを塗りつぶしのチェック位置に持っていくか、 位置データーから塗りつぶしチェック位置を計算させるかは好みです。 位置データが出れば、必要なマークを書く位置は決まっているはずなので、各位置の塗りつぶし状況を見れば、いいだけです。 ここも、何%くらいで良いことにすればいいかはカットアンドトライでしょうか。 イメージセンサーなどにならえば、最初、200% 位の枠で見て、次 100% 位の枠で見て、最後に 50% 位の枠で見て、などと段階的に厳しくしていくなどの手法が多いようです。 200% -> 50~150 100% -> 50~100 50% -> 40~50 どれもパスすれば、塗りつぶしてあると判断でいいのではないかな。 (200% 時に 150 以上になるようでは、エラーですが。) 後は検出した位置データに沿って、データを格納していくだけです。
- SilverThaw
- ベストアンサー率32% (260/806)
No.1です。 >採点システムの仕組みは大体分かりましたが、実際にソフトを作る時、どんなクラスを使うとか、黒マークの判断とか、分からないことがまたあります。 >その具体的な内容は、やはり画像処理の本を読んだほうがいいですよね。 そうですね。 使用する(言語などの)開発環境により、手順は変わってきますので、それに合わせて調べるなり質問するなりは行ったほうがいいと思います。 >SilverThawさんの回答によって、こんな採点システムはそんなに難しいものではないでしょうか、1ヶ月くらいできますか。 質問者さんのプログラムスキルなどがわからないので何とも言えませんが、 行うこと(作らなければいけない機能)を理解していて、その作成方法がわかっていれば、一か月でできかもしれません。 但し、No2.で書いたとおり、「付加機能」をどこまでつけるかということによっても難易度は変わってくると思います。
お礼
SilverThawさん、何度のご回答をいただき、ありがとうございます。 私はJAVAを使ってこの採点システムを開発したいと思います。JAVAのレベルもそんなに高くないし、今の段階では私一人でやりますし、あまり自信がありません。 SilverThawさんはなにかアドバイスがあれば、是非教えていただきたいと思います。 よろしくお願い致します。
- SilverThaw
- ベストアンサー率32% (260/806)
No.1です。 >もう一つ分からないことですが、マークの部分として指定された範囲はどういうふうに指定できますか。 >プログラミングでどういうふうにこの範囲を判断できますか?もしかして「座標」みたいのものですか。 はい、座標です。 概要だけ説明すると、マークシートの用紙の大きさが分かっているのであれば、 ・「左からXcm、上からYcm」のところを「横Acm、縦Bcm」の範囲で確認する。 ・用紙全体を「横にX分割」「縦にY分割」して、左上から「X1,Y1」の部分を確認する(分割数で確認する範囲はわかる)。 といった方法が考えられます。 さらに細かく考えると、 五択とか三択などのように複数の中から1つだけ(複数選択は不可)や複数選択可の場合をどうするか といったことを考えていくと……
お礼
SilverThawさん、ご回答ありがとうございます。 採点システムの仕組みは大体分かりましたが、実際にソフトを作る時、どんなクラスを使うとか、黒マークの判断とか、分からないことがまたあります。その具体的な内容は、やはり画像処理の本を読んだほうがいいですよね。 SilverThawさんの回答によって、こんな採点システムはそんなに難しいものではないでしょうか、1ヶ月くらいできますか。
- SilverThaw
- ベストアンサー率32% (260/806)
(1) 理屈的には、読み込んだ画像情報を2値(黒/白)化してマークの部分として指定された範囲に対しての黒の割合が一定以上であればマークされたと判断する。 (2) ・JPEG画像を読む ・上記(1)の内容を行う ができれば可能です。
お礼
SilverThawさん、ご回答ありがとうございました。 もう一つ分からないことですが、マークの部分として指定された範囲はどういうふうに指定できますか。プログラミングでどういうふうにこの範囲を判断できますか?もしかして「座標」みたいのものですか。
お礼
TERABITさん、ご回答ありがとうございます。 私は作りたいのは、普通紙のマークシート採点システムです。いろいろ調べましたが、確かに紙の右と下●か■のようなマークを付いたら、マークの範囲を判断しやすいみたいですね(私はまだこの判断方法については分かりません)。 >200% -> 50~150 >100% -> 50~100 >50% -> 40~50 >どれもパスすれば、塗りつぶしてあると判断でいいのではないかな。 >(200% 時に 150 以上になるようでは、エラーですが。) 上記の数字の意味がよく分かりませんが、もうちょっと詳しく教えていただけませんか。 私はJAVAを使って採点システムを作ると思いますので、これについてのアドバイスなどもいただければと思います。 よろしくお願い致します。