I would suggest taking a look at implementing something yourself with OpenCV and possibly python.
A couple of things to keep in mind about your form design:
- Include registration marks, (usually 3 of them), so as to be able to rotate and scale the image to cope with forms scanned the wrong way up or at an angle, etc.
- Include a machine readable form identifier and for multi-page a page identifier.
- Space the answer boxes well, even spacing but well spaced makes filling the form easier and extracting it much easier.
- Have a clear rule on how to mark the options, e.g. Use BLACK pen to place a vertical line in the selected box.
- Include an option to cancel a box, e.g. If box marked erroneously cancel the mark with a horizontal bar the width of the box.
- Always have a box for "I don't wish to answer that"
- Use colours to separate out elements by an audience, if all the questions are in light blue but the registration marks are black you can separate them out of the image with a simple colour filter.
Once you have done the above it is simply a matter of:
- capturing the image,
- colour filter to get just what we are interested in,
- rotating and scaling to get the reference marks in the correct place,
- check it is the right form and
- then look for marks in the specific areas of interest, (the boxes).
You could even have a "training mode" where you mark all the areas of interest, say in red, and then scan that to tell the code where to look.
OpenCV includes display facilities so you could show the problem area to an operator with a "Which do you think this is?" prompt for any anomalous areas.
There are a number of good books online some free, or from retailers, that cover using OpenCV and python in this sort of way.
- Completely Free and Open Source
- Cross Platform Win/OS-X/Linux all supported
- Lots of online/community help
- Could provide an educational and interesting couple of days to implement.