Reference no: EM132227545
Assignment - Image Processing and Recognition Basics
In this assignment, we recommend using either Python with the Pillow library, or C/C++ with the CImg library. No matter what language and library you use, make sure that your program obeys the input and output requirements (e.g., takes the right command line parameters in the right order, and creates the right output files) since we use testing scripts that automatically test your program.
The problem - In a major midwestern research university not far away, a mild-manner professor of computer science has a dream: a cheating-proof final exam that could be graded perfectly and effortlessly in has class of 100 students. He will first write 85 multiple-choice questions. Then he will write a Python program to randomly shuffle both the order of the questions and the order of the multiple-choice options within each question, creating 100 unique exam booklets. The first page of each exam booklet will be an answer sheet like that shown in Fig 1. The students will be asked to detach the answer sheet and turn it in after the exam. Unbeknownst to the students, each answer sheet will have a unique code printed on it that contains an encrypted copy of the correct answers for that particular answer sheet. After the exam, the instructor will scan all the answer sheets to produce 100 images, which he'll then run through a custom computer vision program to score the exams automatically. The grading program will simply read the code, decrypt the correct answers, recognize the student's marks on the answer sheet, and calculate how many questions have been answered correctly.
Your job is to write an automatic grading program that will work as well as possible. Given a scan of the answer sheet like that shown in Fig 1., your program should identify the answers that the student marked as accurately and robustly as possible.
What to do
1. You can find your assigned teammate(s) by logging into IU Github. In the upper left hand corner of the screen, you should see a pull-down menu. Select cs-b657-sp2019. Then in the yellow box to the right, you should see a repository called userid1-userid2-userid3-userid4 -a1, where the other user ID(s) corresponds to your teammates.
2. While you may want to do your development work on a local machine (e.g. your laptop), remember that the code will be tested and thus must run on the CS Linux machines. After logging on to that machine via ssh, clone the github repository, where your-repo-name is the one you found on the GitHub website above. (If this command doesn't work, you probably need to set up IU GitHub ssh keys. See Piazza for help.) This should fetch some test images and some sample code (see the Readme file in the repo for details).
3. Now write a program that accepts a scanned image file of a printed form like that in Fig 1, and produces an output file that contains the student's marked answers.
4. Finally, devise a system for printing the correct answers on the answer sheet in some way so that your grading program can read them, even after the answer sheet is printed and scanned. There are many possible ways of doing this; you might add some textual annotations, or add some form of bar code, or a watermark, or some other pattern. Whatever system you adopt should not reveal the correct answers to the students.
Explain your technique in detail in your report (see below). Try to make your technique robust enough to be detectable even after the image has been printed, filled in by a student, and then scanned into an image file. We've provided a blank form called blank form.jpg for you to do some experimentation along these lines, and please report about these experiments in your report.
Attachment:- Assignment Details.rar
Attachment:- Assignment Files.zip