Locked History Attachments


Scripts for data acquisition with paper-based surveys

SDAPS is an open source (GPLv3, LPPL) optical mark recognition (OMR) program. It is written in python and has an integrated workflow with both LibreOffice and LaTeX to create questionnaires.

SDAPS Workflow

With SDAPS you create the questionnaire using either LibreOffice or LaTeX. After this some processing is done to collect the information about the survey (questions, and answers) and a printable PDF is created. The filled out questionnaires only need to be scanned in (example). SDAPS will do the optical mark recognition and can create a PDF report (example) or export the data. Optionally it is possible to manually correct the results using a graphical user interface.

There is now a MailingList for questions related to SDAPS, if you are thinking about using SDAPS feel free to subscribe and ask questions. You can also look around on irc #sdaps on freenode (webchat).

For an introduction of how SDAPS is used and what can be done with it you can look at the Tutorial and Documentation. Should you have any further questions about SDAPS you can use the mailing list. If you find any issues, please report them in the Issue Tracker.

Should you find SDAPS useful and use it for any survey or similar, then please consider contributing to the project. A good first start is to subscribe to the mailing list or join the IRC channel.


  • Open Source Software; use and modify it as you like (subject to the GPLv3/LPPL)
  • Optical mark recognition (OMR) from scanned data
  • OpenDocument text (ODT) for creating questionnaires

  • LaTeX class for creating questionnaires

  • Supports any paper size
  • Multipage questionnaires, both simplex and duplex printing (up to 9999 pages with "code128" style)
  • Different kinds of questions:
    • A mark type question (value from 1 to 5)
    • A choice of many, that may also include freeform fields
    • Freeform fields
    • The LaTeX class also supports more compact matrix configurations for these.
  • Creation of PDF reports for printout
  • Export of data to CSV files for further analysis (excluding image data)
  • Import of additional results from other sources.
    With this it is for example possible to merge data aquired via a webpage at a later point.

  • A GUI application to check the recognition and correct errors
  • Written in Python using a modular and extensible design


Overview of Changes in SDAPS 1.1.4 -- 04.08.2014

This is mostly a bugfix and translations release, as there was still some fallout from the refactoring done in the last release. Thanks to everyone who submitted patches to fix these!

Important changes:

  • dependency, build, and import fixes (#44, #46, and more)
  • fix layout changes in LaTeX and example (introduced in 1.1.2)
  • report: fix non A4 paper sizes (issue #41)

New and updated languages:

  • Portuguese (Brazil)
  • Spanish
  • German

Overview of Changes in SDAPS 1.1.3 -- 29.05.2014

With this release SDAPS has been restructured internally. There are two reasons for doing this. The first is to improve the API which simplifies the usage of it in custom scripts. Another point is that the old code was incompatible with the import handling of python 3. So doing this change is also a prerequisite for a future port to python 3.x.

Other changes include:

  • GUI: Fix an offset error with new GTK+ versions
  • GUI: Improved keyboard navigation (issue #30)
  • GUI: Improved mouse handling and overlay drawing
  • GUI: Show the questionnaire ID on the right side
  • GUI: Sort images by page number
  • LaTeX: Improved unicode support
  • LaTeX: Fixed precision issues in report generation
  • LaTeX: Fixed some whitespace issues in the LaTeX class
  • ODT: When stamping a single document, keep forms intact
  • reorder: Fix reordering of simplex documents
  • recognize: Slight changes in the OMR heuristics.
  • Fixed issues in the upgrade routine

New and updated translations:

  • German
  • Spanish

Overview of Changes in SDAPS 1.1.2 -- 27.10.2013

This release brings a lot of small improvements, but also some new features. The main new feature is the addition of a "convert" module, which can be used to convert non-monochrome scans into monochrome images for later processing. This module is also able to apply 3D-transformations as they are neccessary when the source image was done using a camera.
This new module requires OpenCV. Note that using a feed scanner is still prefered to this method.

Other changes include:

  • LaTeX: Fix compilation of large documents (by suppressing position output)
  • LaTeX: Fix multicolumn items and cline at the start of choicequestions
  • ODT: Custom styling in answers and question is now possible.
  • Various improvements and fixes in the corner mark detection code
  • New "custom" style which can be used when customizing the behaviour of SDAPS
  • A PDF with annotations will now be created if there was an error during setup
  • An issue in the base dir search code that affected OSX has been fixed

New and updated translations:

  • Arabic

Overview of Changes in SDAPS 1.1.1 (from 1.1.0) -- 28.06.2013

Important changes:

  • Fix the "min coverage" heuristic
  • Export text as UTF-8 in CSV files (issue #23)
  • report: Ignore empty sheets
  • Add "verified" and "recognized" flags for sheets. Recognition will not be done by default if either flag is set.
  • GUI: Pressing "Enter" now sets the "verified" flag
  • LaTeX class: Paint inner area of boxes white. This is required to allow background coloring.
  • Do not ship python-pdftools anymore. It needs to be installed separately now.

And a couple more small bugfixes and additions.

New and updated translations:

  • German
  • Dutch


There is some work going on to create a Django based web frontend for SDAPS. This work is in very early stages and can be seen on github. Some of the basic parts are already there, but it still requires a lot of work until it is ready. Any contributions in this area are welcome (HTML/JavaScript/Django code/design) and will be essential for the success of the project.


The repository was moved out of the personal account github account into the newly created "sdaps" project. Anyone using GIT might want to update the references.

Overview of Changes in SDAPS 1.0.5 (from 1.0.4) -- 19.05.2013

This release contains an important bugfix that affected the quality of the OMR engine. It was broken with the introduction of circular checkboxes.

The full list of changes:

  • Fix the min coverage heuristic.
  • Guard against unknown rotation during report creation.

New and updated translations:

  • German