It is best to install from source into your preferred version of Python 3:

python3 -m pip install -U

ArtExamScan requires pdfimages, pdftoppm, and zbar, as well as possibly pdftk. On Linux systems derived from Debian (e.g. Ubuntu), do:

apt-get install libzbar-dev poppler-utils

before executing the above command. You can test if your installation was successful by doing:

python3 -m artexamscan.demo    # Creates "demo" folder with sample scans
cd demo
python3 -m artexamscan.scan --roster=roster.xlsx scan.pdf


The first step is to "tag" the exam PDF with the QR codes and grader score boxes that will eventually be scanned. This requires only a reasonably recent TeX setup and the files available here; see the README file there for details.

For the mechanics of hand grading the exams see the grading instructions

After scanning the exams (which must be done rotated 180 degrees), do something like:

python3 -m artexamscan.scan --roster=roster.csv scans/*.pdf

to read in all the scores, which are eventually dumped it "results.csv".


The basic strategy used here originated Nathan Dunfield's unpublished "examautomat" program written in 2016. In 2017, Marc C Bell did a complete rewrite as ExamScanUIUC. This current version derives from both sources, and is maintained by Nathan. The authors thank Pat Szuta and Malik Obeidin for their help on this project.


This code is released under the open-source MIT 3-clause license.