Inspiration
Education is the main pathway toward upward mobility, yet our current education system persists of many inequities, which disproportionally impact socioeconomically disadvantaged students. These disparities have been further exacerbated by virtual classes of the current pandemic and brought to light by the Black Lives Matter movement. One of the main issues is lack of access to technology; since amount of funding and student demographics vary greatly across schools around the country, schools in low-income areas are at a major disadvantage because they have less money to spend on the latest, most advanced technologies. As a result, we wanted to use our coding skills to create a free, accessible product to improve education quality for all.
What it does
The website requests the user to upload the images for the test answer key and the students’ responses. The images then get passed to a Java program that uses the OpenCV library that processes them and extracts the answers. The student responses are compared to the answer key and are marked as correct or incorrect. The answer key and student responses, as well as a table showing which problems students got correct and incorrect are written to CSVs and downloaded to the user.
How I built it
Our front-end consisted mainly of HTML and CSS. We used some Thymeleaf templating, which was built into Spring. To navigate, we created buttons, one to the upload subpage, and one to the Equiscan template. Under the file upload page, we used HTML to take the file uploads. Spring was used as the backend, and connected the user’s inputted files to the OpenCV processing. The images are first converted into binary images. Then, image contours are drawn and the extraneous ones are filtered off, leaving only the answer boxes. Then, the number of non-zero pixels in each zone are counted and compared to the other boxes within each problem. The zone with the largest percent of non-zero pixels is then determined to be the marked answer. Tablesaw was used as data processing, storing the extracted answers and also comparing the student responses to the answer key to determine correctness. Tablesaw also exported them to CSVs.
Challenges I ran into
We had difficulty with sorting the detected contours. Although the program was able to accurately detect the shaded portions in some images, the same settings would not work for another image. There were also issues with the hierarchy. Due to the fact that contours would overlap, we had to use the contour retrieval mode that only returned external contours. However, this would cause some images that had the paper border visible to only return one contour. These issues force us to require a relatively specific/similar type of image from the user. While we used Spring for the backend, which was quite effective at implementing the OpenCV image processing, we struggled with returning information back to the frontend. We initially hoped to display graphics of various student results and statistics, but were unable to complete this in time.
Accomplishments that I'm proud of
We are proud of our OpenCV program. The program was able to read in answers with a high degree of accuracy, and we learned a lot about the OpenCV library along the way.
We are also proud of the file upload feature on the website. Not only were we able to incorporate the file upload, we were also able to edit the specifications of the upload to allow it to upload multiple files at once. We replaced the outdated radio buttons with functional, user-friendly buttons that serve the same function,
We learned how to use Spring.io and Spring Boot to create a microservice with a functional frontend and backend.
What I learned
When we began this project, we had virtually no knowledge of how to use OpenCV. By developing equiScan, we learned how the OpenCV library operates our Java program by essentially testing how it functions to create contours on JPEG images and how to implement it into our program. We learned about the usage of contours and masking to study and section off an image to gather its data. Additionally, we got to study the functionality of Spring.io and its attributes to create a file upload program.
What's next for equiScan
We aim to develop the analytics further so that the user can have more information about their students’ performances and about the quality of the tests given. We could use some plotting software such as Plot.ly to create graphs such as bar graphs of the number of questions each student got right, or what percentage of students got each question correct. We would also integrate that with the frontend, likely in the submission page. We could also use another frontend framework, such as React to compliment our Spring backend and make transferring information between the two better. We also hope to improve the program so that a greater variety of images can be uploaded. Currently, only images with consistent lighting and taken with a scanning app are likely to work. This may be able to be done by processing the image further (automatic cropping, blurring, removing image noise) before finding the contours.
Log in or sign up for Devpost to join the conversation.